Я написал веб-приложение, которое имеет базовую c структуру следующим образом:
Контроллер -> ServiceLayer -> EF dbContext
Я не использую слой Repository между ServiceLayer и dbContext; Я просто вставляю EF dbContext прямо в ServiceLayer.
Сначала все было замечательно. ServiceLayer содержал следующее:
private readonly PeopleContext _dbContext
public ServiceClass(PeopleContext dbContext)
{
_dbContext = dbContext;
}
public List<People> GetPeopleWhoAreOld();
public List<People> GetPeopleWhoAreDead();
public People GetPeopleById(int Id);
public void SaveChanges(); //called if the above People is modified outside of this ServiceLayer
public List<People> GetPeopleWhoHaveChildren();
Затем он вырос до:
public List<People> GetPeopleWhoHaveChildrenAndAreDead();
public List<People> GetPeople(Expression<>predicate);//This allows custom LINQ predicates to be used
//many many more
Я нахожусь в точке, где есть тысячи строк кода, сотни этих методов, и я Держу пари, что некоторые из этих методов повторяются, так как я потерял счет того, что существует.
Я предпочитаю сохранять EF Models anemi c и не обрабатывать в них какие-либо бизнес-правила (по определенным c причинам эти правила и проверки могут быть сложными).
Я рассмотрел разбиение ServiceLayer на ServicePeople.cs
, ServiceChildren.cs
и т. д. c и внедрение только необходимых сервисов. Это может помочь разделить классы на более мелкие классы, но я не уверен, что поступлю неправильно.
Какие существуют лучшие подходы к разработке ServiceLayer, которые легче поддерживать, тестировать и поддерживать указать c логи c для извлечения или обновления объектов в одном месте?