Ho bisogno di aiuto per trovare un metodo migliore per il mio layout di applicazione, per favore

0

Lavoro come unico sviluppatore .Net presso un'azienda e mi è stato affidato un progetto molto ampio e complesso, un sito intranet interno per l'inventario e il monitoraggio del tempo. Ho creato un progetto che contiene 3 applicazioni, WebUI, Data Access Layer e Core.

Il WebUI è il mio materiale MVC normale, il DAL contiene i modelli utilizzati da Entity Framework per il DB MS SQL e attualmente Core detiene tutte le classi helper che ho sviluppato. Questo ha funzionato bene e bene per me finora, ma ora ho incontrato un problema che non riesco a trovare una soluzione decente e penso che derivi dal design di base del mio sistema.

Nel mio controller scheda attività ho un metodo privato chiamato GetTimesheetData che accetta un dato e un ID dipendente come parametri di input, fa qualche logica per ACL e alcune query sul DB per ottenere poi restituisce un'istanza di un ViewModel con tutte le dati in esso. Questo codice ora deve essere accessibile da altre classi al di fuori di questo controller. Questo mi ha presentato il problema di dove spostare questo codice o se ha bisogno di essere suddiviso e spostato in più posti (quali posti non lo so).

Stavo pensando di ritagliarlo e spostare le query nelle mie classi di helper che fanno cose come ottenere dati di base dal DB (ID dipendenti, informazioni sui dipendenti, ecc.) e anche cose come alcune logiche di business di base come trovare il periodo di paga una data data è in o in cui o no una persona è una mangiatoia e può approvare schede attività.

Come posso migliorare il design dell'applicazione per evitare di dover ricodificare l'intero metodo GetTimesheetData in più punti causando un mal di testa se qualcosa deve cambiare in esso?

Modifica:  Continuando a leggere le cose che posso trovare su Google, sto iniziando a pensare che potrei aver bisogno di aggiungere una nuova applicazione per "Business Logic" che contenga modelli e query più complesse di ciò che i miei aiutanti hanno o forse estendono la mia applicazione Core per comprendere anche questo.

    
posta Matthew 26.05.2016 - 16:26
fonte

1 risposta

1

Se sto capendo correttamente, il tuo livello web fa riferimento a core e riferimenti core al DAL.

Nel tuo core layer, crea una classe di servizio che esponga il metodo GetTimesheetData come

public class TimesheetService
{
    public List<TimesheetDataModel> GetTimesheetData()
    { 
        // call DAL to get data
    }
}

Poi nei tuoi controller e altrove, usa questo servizio

public class TimesheetController : Controller
{
    private readonly TimesheetService _timesheetService = new TimesheetService();

    [HttpGet]
    public ActionResult Get()
    {
        var data = _timesheetService.GetTimesheetData();
        return Json(data, JsonRequestBehavior.AllowGet);   
    }

}
    
risposta data 26.05.2016 - 17:03
fonte

Leggi altre domande sui tag