Выбор реализации сервиса на основе бизнес-правил

В приложении, над которым я работаю, у нас есть действия, которые запускаются при добавлении новой сущности в хранилище. Предполагается, что одно из новых действий будет использовать службу (например, уровень службы, а не веб-службу где-то в эфире) для выполнения некоторых манипуляций бизнес-правил при входе объекта.

Это все хорошо, но точная услуга, которая должна использоваться, будет варьироваться в зависимости от свойств объекта, которым мы манипулируем (в основном, в зависимости от того, к какому клиенту относится объект). Я хотел бы, чтобы действие было тесно связано со вкусом обслуживания, которое может потребоваться вызвать.

Я думаю о том, чтобы реализовать фабрику, которая будет принимать сущность и возвращать правильное обслуживание. Это кажется немного глупым, хотя. Есть ли лучший способ настроить это?

Я рассмотрел использование контейнера IoC для определения правильной реализации во время выполнения, но быстрое изучение пары (Ninject и Windsor), похоже, не указывает на то, что они хорошо подходят для такого рода операций.

3 ответа

Решение

Я думаю, что для этой итерации мы будем сохранять ее простотой и использовать фабрику для выбора правильного интерфейса (то есть решение, которое я считал "грязным" в оригинальном посте). Спасибо всем за отзывы!

Вы подходите к этому неправильно. Вы должны использовать события для этого:

// your repository event
public class ItemCreated<T>
{
}

Обработчики:

public class DoSomething : ISubscribeOn<ItemCreated<User>>
{
    public class DoSomething(ISomeService)
    {}
}

Обратите внимание, что не сам сервис, а посредник подписывается на событие. Это делает вещи менее разъединенными.

Все это встроено в мой контейнер IoC: http://www.codeproject.com/Articles/440665/Having-fun-with-Griffin-Container

Прокрутите вниз до событий домена.

Я бы порекомендовал вам внимательно взглянуть на MEF (Managed Extensibility Framework). Это обеспечивает очень независимую слабую связь, которая близко (если не точно) соответствует вашим требованиям.

Другие вопросы по тегам