Sto costruendo un CMS e ho bisogno di una guida su come strutturare l'applicazione. Semplicemente non capisco quando dovrei usare le interfacce o una classe astratta.
Il sistema in fase di sviluppo utilizza .Net Core e EF core I pianifica di consentire a MySQL e SQL Server come origine dati. Voglio anche un approccio modulare in cui posso aggiungere elementi su base retribuita come ad esempio e-commerce e modulo di pagamento.
Il design dei livelli correnti è elencato sotto
Database - Contiene dipendenza di terze parti in EF Core
Contiene tutte le BusinessEntities con più classi, ma due interfacce una è IGenericProperties (che ha proprietà condivise tra le classi, ad esempio IsDeleted) e IPrimaryKey, molte entità implementano queste interfacce.
Inoltre contiene DataAccessLayer e un'interfaccia IGenericMethods che ha più metodi come Aggiungi, Eliminato, Recupera ecc. che la classe GenericObject implementa. Tutte le altre classi DAL ereditano GenericObject
Infine, anche l'EF DatabaseContext è specificato in questo livello.
quadro
Questo ha contenuto di framework come i metodi di estensione, la ricerca e cose non relative a db.
Sicurezza
Questo ha le identità di ASP.NET come UsersStore, Ruoli ecc.
Infine ho i livelli MVC e Test.
I controller nei livelli MVC possono quindi eseguire operazioni CRUD come questa
CategoriesDAL categoryObject = new CategoriesDAL();
IList<Category> getAll = categoryObject.RetrieveAll().ToList();
Tuttavia, dopo aver letto di più su Dependency Injection e layering (leggendo Adaptive Code: Agile coding con schemi di progettazione e principi SOLID (Developer Best Practices, Gary McLean)) , mi chiedo se l'approccio I sto scendendo è utilizzabile o se avessi problemi in futuro. Un paio di cose che posso individuare è come potrei rendere questo modulare come aggiungere moduli di e-commerce come dovrei fare riferimento a EF.
Ho esaminato esempi di codice sorgente su github di altri CMS / Framework Umbraco, MrCMS, Orachard, Piranah. Questi sistemi hanno un sacco di livelli e interfacce e sto semplicemente cercando di capirlo.
Quindi riassumi la mia domanda.
Quando e perché dovrei usare le interfacce / classe astratta?
Come posso rendere la mia attuale applicazione più modulare? (come avere moduli di e-commerce)
Grazie