#c_sharp #entity_framework #инспекция_кода
public interface IOperationService { IEnumerableGetItems(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/
Комментариев нет:
Отправить комментарий