Recentemente ho letto un articolo sulla creazione di un blog utilizzando ASP.NET e MVC e nell'articolo l'utente divide il Data Access Layer in una libreria di classi separata e crea un'interfaccia per consentire al DAL di essere deriso per i test.
Funziona benissimo per piccoli progetti, ma sto facendo fatica a vedere come questo si ridimensionerà. Ad esempio nell'articolo si finisce con la seguente interfaccia:
public interface IBlogRepository
{
IList<Objects.Post> Posts(int pageNo, int pageSize);
int TotalPosts(bool checkIsPublished = true);
IList<Objects.Post> PostsForCategory(string categorySlug, int pageNo, int pageSize);
int TotalPostsForCategory(string categorySlug);
Objects.Category Category(string categorySlug);
IList<Objects.Post> PostsForTag(string tagSlug, int pageNo, int pageSize);
int TotalPostsForTag(string tagSlug);
Objects.Tag Tag(string tagSlug);
IList<Objects.Post> PostsForSearch(string search, int pageNo, int pageSize);
int TotalPostsForSearch(string search);
Objects.Post Post(int year, int month, string titleSlug);
IList<Objects.Category> Categories();
IList<Objects.Tag> Tags();
IList<Objects.Post> Posts(int pageNo, int pageSize, string sortColumn, bool sortByAscending);
void AddPost(Objects.Post post);
}
C'è quindi un file .cs associato con l'implementazione di questa interfaccia.
Come implementeresti un'architettura simile per un progetto molto più ampio? Ad esempio, il progetto che ho al lavoro è composto da 25 controller, ciascuno con un elenco minimo, aggiungere, modificare, visualizzare, eliminare e contare. Ciò porterebbe a un'interfaccia con oltre 150 funzioni.
Questo tipo di architettura è ancora adatto a progetti più grandi e, in caso affermativo, come lo struttureresti per evitare di avere un singolo file che implementa più di 150 funzioni?