#c_sharp #entity_framework #инспекция_кода
public interface IOperationService
{
IEnumerable GetItems(int operationId);
}
public class OperationService: IOperationService
{
public IEnumerable GetItems(int operationId)
{
var items = getItems(operationId);
//дальнейшие действия по преобразованию
//OperationItem в OperationItemViewModel
}
private IEnumerable getItems(int operatonId)
{
return _context.Set().Where(x=>x.OperationId==OperationId)
.Include(x=>x.File)
.ToList();
}
}
где
OperationItem - класс доменной модели;
OperationItemViewModel - вью модель
Весь этот код у меня находится в сервисном слое.
Мне потребовалост добавить новый сервис IAssemblyService в котором на текущий момент
будет только один метод: IEnumerable GetAssemblies(int operationId)
а проблема заключается в том что для этого мне необходимо получить список итемов входящих
в указанную операцию и для этого мне необходимо иметь доступ к методу getItems() из
OperationService. Хочется избежать дублирования и оставить интерфейс чистым. Подскажите
как лучше всего это реализовать?
UPD: можно попрбовать сделать так:
public IEnumerable GetAssemblies(int operationId)
{
var items = (OperationService)_operationService).getItems(operationId);
//дальнейшие действия
}
но я не уверен в правильности данного способа
Ответы
Ответ 1
Шаблон репозиторий вообще один из самых проблемых (раз, два, три...). Как у витязя на распутье у вас есть три пути: Вызывать из одного репозитория другой. Но это превратит код в паутину. Отнаследоваться. Это приведет к огромным God-object'ам. Поменять архитектуру приложения. На давно существующем проекте крайне рискованная операция. Как видите все варианты достаточно негативные: «Направо пойдёшь – коня потеряешь, себя спасёшь; налево пойдёшь – себя потеряешь, коня спасёшь; прямо пойдёшь – и себя и коня потеряешь». Пожалуй, я бы в итоге порекомендовал текущие приложения не менять -- но читать больше про архитектуры приложений. Domain Driven, Data Driven, CQRS. Сложно рекомендовать книги и статьи, не зная, что ваш текущий уровень, но попробую: http://blog.byndyu.ru/2014/07/command-and-query-responsibility.html https://habrahabr.ru/post/313110/ https://habrahabr.ru/post/259829/ https://habrahabr.ru/post/158277/
Комментариев нет:
Отправить комментарий