Привет всем. Я сталкиваюсь со странной схемой проектирования с использованием модели хранилища и сервиса. Приложение состоит из ASP.NET MVC, WCF и некоторых служб Windows. Мои репозитории используют LINQ DataContext. По мере развития моего приложения я обнаруживаю, что везде передаю ссылки на сервис IWhwhatService. Например, у меня есть IAccountService, который определяет такие методы, как ChangePlan (учетная запись, план плана).
Теперь кажется, что IAccountService - лучшее место для использования этого метода, так как мы обслуживаем учетные записи здесь. Однако метод ChangePlan должен знать несколько вещей, прежде чем он сможет реально изменить план. Он должен знать текущее использование пользователя, список доступных планов, экземпляр интерфейса службы электронной торговли для выставления счетов и т. Д.
Я думал, что метод ChangePlan принимает все необходимые службы в интерфейсе IAccountService. Но требование этих других сервисов является вопросом реализации и не должно быть частью определения интерфейса.
Итак, теперь я создаю огромный конструктор для AccountService, использующий экземпляр IAccountRepository, IPlanService, IUsageService, IEcommerceService и IValidationDictionary. Это не совсем правильно.
Теперь возьмите этот сценарий. Очевидно, что IAccountService содержит простой метод для получения учетной записи пользователя по идентификатору: Account Get (int id) Есть несколько раз, когда мне просто нужно вызвать только этот метод. Итак, я иду, чтобы создать свой AccountService, и он хочет, чтобы экземпляры всех этих других служб (особенно IValidationDictionary, мне не нужна проверка для этого). Опять же, это чувствует себя неправильно. Я мог бы передать null, но это только потому, что я знаю, что реализация не использует их только для этого метода.
Кроме того, чтобы не создавать экземпляры служб везде, где они мне нужны, я создал статический класс с именем ServiceFactory, в котором есть статические методы, CreateAccountService, CreatePlanService и т. Д. Я вызываю эти методы во всем приложении. Кажется, все в порядке, но я не могу избавиться от ощущения, что это неправильно.
Где мое отключение здесь? У кого-нибудь есть предложения?
Спасибо.
Andrew