ASP.NET MVC - одна бизнес-служба должна вызывать другую службу - PullRequest
1 голос
/ 11 февраля 2011

У меня есть служба RefData (бизнес-служба), которая загружает все ссылочные данные из БД и кеширует в памяти (Custom Cache Server).Многие из моих контроллеров вызывают эту услугу всякий раз, когда им нужны эти данные.

У меня также есть служба ценообразования (бизнес-служба), которая подключается к внешнему веб-сервису для получения цены на продукт. Как только он получает все цены, ему необходимо получить некоторые данные контента из БД и объединить их с ответом о ценах, прежде чем он передаст окончательныйответ на контроллеры.Теперь большинство этих подпрограмм данных уже представлены сервисом RefData.Я не хочу писать дубликаты методов в моей службе ценообразования для получения тех же данных, которые предоставляются и кэшируются службой Ref Data Service.Также я не могу переместить эти подпрограммы в Pricing Service, потому что мои контроллеры также нуждаются в этих данных, и они не принадлежат в Pricing Service ...

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

Я использую ASP.NET MVC 2 и Unity в качестве IOC.Буду признателен за ваши предложения о том, какой подход мне выбрать.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2011

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

0 голосов
/ 11 февраля 2011

В начале своего приложения я регистрирую все свои сервисы в своем контейнере IOC. Когда нужно позвонить другому, я просто решаю, что мне нужно, и звоню.

Возможно, я что-то упускаю из твоего вопроса?

В Global.asax.cs:

        var authorizationRepository = new AuthorizationRepository(session);
        IoC.Container.RegisterInstance<IAuthorizationRepository>(authorizationRepository);
        var permissionBuilderService = new PermissionsBuilderService(session, authorizationRepository);
        IoC.Container.RegisterInstance<IPermissionsBuilderService>(permissionBuilderService);

Когда мне нужна услуга:

        var repository = IoC.Container.Resolve<IAuthorizationRepository>();
        repository.DoSomething();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...