Classi di utilità in MVC - ASP.NET

12

Quindi mi chiedevo oggi, dove metteresti le classi di utilità in un'app ASP.NET MVC? Per classi di utilità intendo classi che possono essere statiche e vengono utilizzate solo per eseguire una funzione. Come una classe per inviare una e-mail che prende come indirizzo email indirizzo, oggetto e corpo.
Suppongo che potrebbe creare una cartella separata e lo spazio dei nomi sarebbe abbastanza buono, ma volevo ottenere le opinioni di tutti

    
posta user60812 10.09.2013 - 14:17
fonte

4 risposte

10

Non lo fai. E il tuo esempio è perfetto per mostrare perché no.

Vuoi inviare e-mail, giusto? Quindi crei da qualche parte una classe statica CommunicationUtilities con una percentuale SendEmail() in essa. Si utilizza questo metodo da una classe che fa un sacco di cose, ad esempio reimposta la password di un utente e gliene invia una nuova via e-mail. Perfetto.

Ora, cosa succede se vuoi testare la tua classe? Non puoi, perché ogni volta che vuoi testare il metodo che reimposta la password, cambia il database (che non è adatto per un test di unità) e inoltre invia un'email (che è anche peggio).

Potresti aver letto su Inversion of Control, che ha il vantaggio di semplificare il test dell'unità. Gli articoli su IoC ti spiegheranno che invece di fare qualcosa del tipo:

void ResetPassword(UserIdentifier userId)
{
    ...
    new MailSender().SendPasswordReset(userMail, newPassword);
}

fai:

void ResetPassword(IMailSender sender, UserIdentifier userId)
{
    ...
    sender.SendPasswordReset(userMail, newPassword);
}

che consente di utilizzare mock e stub.

Prova ad applicare IoC al tuo CommunicationUtilities . Giusto, non puoi. Ecco perché è rotto.

    
risposta data 10.09.2013 - 14:30
fonte
7

La domanda è valida, anche se l'esempio fornito non lo è. La risposta data da Maina è perfetta, in un contesto molto specifico, che non è, per me, il contesto appropriato per le dette classi di "utilità".

Personnaly, creo una cartella "Helpers" in cui metto le funzioni semplici da chiamare ovunque, come le estensioni, nel qual caso, si, sono statiche.

Ora, se c'è un modo migliore, sarò lieto di imparare, ma finora: -Non vedo niente di sbagliato con le estensioni. -Non vedo nulla di sbagliato nel raggrupparli in una cartella specifica.

Ora, un'estensione è solo zucchero sintattico, potrebbe anche essere una funzione classica.

    
risposta data 02.11.2013 - 18:24
fonte
4

Nessuna delle risposte fornite in precedenza risolve la domanda effettiva. user60812 ha semplicemente chiesto dove si posizionerebbe una classe di utilità all'interno di un progetto MVC. Tutti hanno insistito sull'esempio singolare e hanno parlato di tutto tranne che della domanda in questione.

user60812, a seconda del livello di astrazione desiderato, vorrei: A. creare una cartella e creare la classe di utilità all'interno di quella cartella B. creare un progetto per contenere le classi di utilità (assumendo il desiderio di riutilizzo dell'assemblaggio). C. estrapola le tue utilità in un'architettura di servizio e chiama loro

Ecco un collegamento a una domanda simile con risposte migliori: link

IMHO

    
risposta data 15.03.2016 - 14:37
fonte
1

Non creare classi statiche per le utilità. La statistica è cattiva nella maggior parte dei casi. Non chiamarli neanche manager. Qualunque cosa stiate lavorando, dovrebbe essere inserita in uno spazio dei nomi logico.

Ad esempio:

namespace Application.Notifications.Email
{
   public interface ISendEmailCommand
   {
      void Execute(Email email);
   }
}

L'indirizzo email, l'oggetto e il corpo sono una preoccupazione separata, quindi avrei una struttura di classe per questo, quindi perché ho usato Email email nell'esempio sopra.

    
risposta data 10.09.2013 - 16:30
fonte

Leggi altre domande sui tag