Слой сервиса Repository стал очень большим - совет по рефакторингу? - PullRequest
0 голосов
/ 12 апреля 2020

Я написал веб-приложение, которое имеет базовую 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 для извлечения или обновления объектов в одном месте?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...