Stiamo sviluppando un'applicazione web .NET
che utilizza WebApi
. Abbiamo livelli separati:
- UI (HTML, CSS, js ecc.)
-
ApiController
- riceve l'inputDTO
s dall'interfaccia utente e chiama l'endpoint appropriato nel Business Layer (ad esempio,StudentBLL.Add
oStudentReportBLL.GetFollowReport
) -
Business Layer
: contiene tutta la logica aziendale; non salva direttamente i dati nel DB, ma chiama il DAL (livello di accesso ai dati). -
Data Access Layer
(usa Entity Framework per CRUD o, in scenari più complicati, esegue alcune query complicate e così via - non ha logica aziendale).
In aggiunta:
- Usiamo "Business Objects" (classi con cui EF lavora; questi oggetti di solito vengono trasformati in tabelle di database nel nostro database relazionale).
- Utilizziamo "Visualizza modelli" (utilizzati in Controller e anche in Business Logic).
- Usiamo Automapper per mappare
Business Objects
inView models
. La mappatura di solito avviene nel nostro Business Layer. - Abbiamo anche l'iniezione di dipendenza (tutte le classi BLL e DLL hanno interfacce).
- Abbiamo servizi aggiuntivi come
ExcelReader
,OurEmailSender
,Workflow
ecc. Non abbiamo problemi con questi.
Quindi, finora abbiamo provato a separare tutte le parti logiche.
Ecco la definizione del problema architettonico con cui mi trovo di fronte:
È scritto molto sui problemi generali dell'architettura e su come separare i livelli. Ma il problema con cui affronto è che abbiamo un sacco di logica nel nostro Business Layer . Quando abbiamo appena iniziato a sviluppare questa applicazione, il codice ha generato classi Business Layer molto grandi con molti metodi private
. Quindi abbiamo iniziato a creare Helpers
. Questo ci ha aiutato a pulire un po 'il nostro BusinessLayer, ma abbiamo ancora Helpers
molto elevato e qualcosa come " HelpersOfHelpersOfHelpers
". Ovviamente, spesso lo chiamiamo in modo diverso, come "Importer" o "Calculations" o "Exporter", ma comunque, spesso questi sono solo Helpers con alcuni nomi strani.
Puoi dare alcuni indizi su come strutturare Business Logic? Questi potrebbero essere nomi di pattern, alcuni suggerimenti su letture aggiuntive o altro.