Связь между сущностями через уровень обслуживания - PullRequest
1 голос
/ 19 июня 2019

У меня есть проект с веб-уровнем в Asp.net MVC, затем Сервисный уровень для бизнес-логики и затем Уровень репозитория для доступа к данным. Я использую единицу для внедрения зависимости.

MVC -> Сервис -> Репозиторий -> EF

У меня есть служба Product, которая отвечает за операции с данными, относящимися к продукту, и одна из них - Service Order, которая отвечает за сохранение, обновление заказа. В некоторых сценариях я хочу получить доступ к данным продукта в службе заказов, для чего я внедрил экземпляр службы продуктов в службу заказов вместо того, чтобы обращаться к репозиторию продуктов непосредственно в службу заказов.

Здесь я хочу знать, что будет лучшим подходом, или я не должен получать доступ к данным продукта в сервис заказа? Одним из недостатков внедрения экземпляра продукта является то, что всякий раз, когда Unity хочет создать экземпляр службы Order, он должен создавать экземпляр службы Product.

Ответы [ 3 ]

0 голосов
/ 19 июня 2019

Может быть, вы можете использовать шаблон локатора службы.В сервисном локаторе вам не нужно вводить и обслуживать другой сервис.

https://www.geeksforgeeks.org/service-locator-pattern/

0 голосов
/ 19 июня 2019

Обычно в проектах MVC, которые я использовал, Сервисы обычно состоят из Репозиториев, но Сервисы также могут использовать другие Сервисы.Вы просто должны следить за круговыми зависимостями.В некоторых случаях я делил Службу, чтобы избежать циклических ссылок, потому что Служба стала слишком большой или приобрела более пары обязанностей в домене.Таким образом, ProductService может быть разделен на ProductCalculatorService и ProductSearchService, и только последний добавляется в OrderService, чтобы избежать циклической зависимости, но при этом поддерживать код DRY.

0 голосов
/ 19 июня 2019

Доступ к хранилищу Product непосредственно в службу Order - лучший подход.

Внедрение все большего числа зависимостей не кажется хорошей альтернативой, как вы сказали в вопросе. Несмотря на то, что вы используете DI-фреймворк, за него все же приходится платить.

OTOH, репозиторий является нижним уровнем для обслуживания. Одной службе обязательно должен быть разрешен доступ к любому репозиторию. Я не вижу каких-либо технических или шаблонных проблем с этим. Фактически это решает многие проблемы.

...