2013-12-05 2 views
3

У меня есть проект MVC, который имеет две службы: OrganisationService и AgreementService, моя проблема в том, что некоторые из организаций принадлежат к группе/родительской структуре, когда это так, мне нужно получить все соглашения, которые принадлежат к любой из организаций группы.Внедрение услуги в другую службу

У меня уже есть метод в моем OrganisationService, который может возвращать список всех идентификаторов для организаций, в структуре:

IEnumerable<int> GetRelatedOrganisationIds(int id) 

Я мог бы создать метод в Agreement или который принимает результат этого, но потом Мне нужно будет ввести обе службы в контроллер и вызвать их по очереди, например

GetAgreementsByOrganisationIdList(IEnumerable<int> organisationIdList) 

Это нормально впрыснуть OrganisationService в Agreement или так, что он может сделать саму работу? Например, следующий метод будет называть GetRelatedOrganisationIds внутренне:

GetAgreementsByOrganisationId(int id) 

Другая причина, я хотел бы, чтобы ввести его в Agreement или в том, что я не должен был бы помнить, чтобы проверить, если организация была в группе/родительских отношений и смотреть каждый раз, когда я хотел получить список соглашений.

Я также подумал о создании группы OrganisationGroupParentInformationProvider и, вместо этого, вместо этого применил соглашение AgreementService, возможно, я потратил слишком много времени на размышления об этом ... как бы вы это сделали?

ответ

3

Да, было бы хорошо ввести одну службу в конструктор другого. Тем не менее, вы можете захотеть создать интерфейс для OrganisationService и вместо этого использовать свой подход к Соглашению.

Другим подходом было бы создание новой службы с зависимостями как от соглашений, так и от OrganisationService, и эта новая служба несет ответственность. Разумеется, новая услуга будет введена в ваш контроллер.

Для руководства подумайте, будет ли все это в рамках Соглашения ServiceService нарушать принцип единой ответственности и/или принцип разделения интерфейса. Если да, сделайте новую услугу.

2

Можно ли ввести службу OrganisationService в соглашение-сервис, чтобы он мог самостоятельно выполнить эту работу?

Это не будет вводить его. Это будет зависеть от него. Независимо от того, я бы сказал, что у вас есть это лучшая архитектура, потому что это более проверяемо. Имея услугу соглашения, позвоните в службу организаций по своему усмотрению, это, безусловно, менее проверяемо, потому что где-то вы должны будете до ввести экземпляр службы организации.

Смежные вопросы