Ho creato un'applicazione web MVC e ho bisogno di eseguire diverse attività a intervalli di tempo diversi. Quindi ho anche creato un'applicazione console per pianificare queste attività tramite il task manager di Windows. Ad esempio, l'applicazione deve inviare un'email ogni settimana riepilogando i dati del programma. Ho scelto di utilizzare il pacchetto Nuget RazorEngine per formattare le email perché devo già mostrare gli stessi dati su una pagina Web, quindi utilizzando il pacchetto RazorEngine, posso riutilizzare il mio viewmodel sia per l'email che per l'interfaccia utente di il progetto web (basta usarlo in un modello formattato per e-mail anziché web). Ma qui sta il problema, ViewModel è nel progetto dell'interfaccia utente. Non penso che la cosa giusta da fare qui sia che la mia applicazione console abbia una dipendenza dal mio livello di interfaccia utente. La prima decisione logica per me era "basta creare un altro livello, App.ViewModelBuilders (forse anche aiutarmi con un nome migliore?), E prendere una dipendenza in App.UI e App.ConTasks" Ma non l'ho mai visto fatto prima, quindi non sono sicuro che sia una scelta saggia o no ...
Ecco i miei attuali livelli (progetti) per la soluzione:
- App.DAL (nessuna dipendenza - modello Unità di lavoro e deposito)
- App.Service (Dipende da DAL - utilizza DAL per le operazioni aziendali, come getDataWithCondition () che restituisce gli oggetti rilevanti (in realtà è un IQueryable)
- App.UI (dipende dal servizio: recupera i dati dal servizio e li esegue tramite ViewModelBuilder per associare gli oggetti business al modello di visualizzazione appropriato e quindi esegue il rendering di una vista utilizzando tale modello di vista)
- App.ConTasks (DOVREBBE dipendere solo dal servizio, ma necessita ancora di ViewModels - utilizza i dati restituiti dal servizio per renderizzare la vista formattata per e-mail e inviare l'e-mail)
Quale livello dovrebbe includere i miei modelli di visualizzazione e i tuoi programmi di creazione dei modelli?