2013-04-10 5 views
0

В моей компании наши сервисные реализации в основном просто передают вызов бизнес-уровню, который выполняет фактическую обработку. Так, например, если у нас есть контракт на обслуживание, который выглядит следующим образом:Динамическое создание динамической реализации

public interface IService 
{ 
    void ServiceMethod1(string a, object b); 
    int ServiceMethod2(int a, int b); 
} 

Наш сервис может выглядеть так же, как это:

public class Service : IService 
{ 
    private ServiceBL _serviceBL; 

    public Service() 
    { 
     _serviceBL = new ServiceBL(); 
    } 

    public void ServiceMethod1(string a, object b) 
    { 
     _serviceBL.ServiceMethod1(a, b); 
    } 

    public int ServiceMethod2(int a, int b) 
    { 
     return _serviceBL.ServiceMethod2(a, b); 
    } 
} 

Поскольку это становится довольно повторяющийся, мне интересно, если есть некоторый базовый класс, который я могу сделать, будет испускать сами методы обслуживания на основе контракта. Я бы ожидать, что код может быть выглядеть примерно так:

public abstract class MagicServiceBase<T> 
{ 
    protected dynamic InterfaceImplementor { get; } 

    public MagicServiceBase() 
    { 
     // Magic that makes the methods defined in T real. 
    } 
} 

public class Service : MagicServiceBase<IService>, IService 
{ 
    protected override dynamic InterfaceImplementor 
    { 
     get 
     { 
      return new ServiceBL(); 
     } 
    } 
} 

Есть ли способ, чтобы создать это, или я просто пытаюсь быть слишком ленив для разумности?

+0

Я думаю, что уровни обслуживания и бизнеса звучат как синонимы. Тот или иной не нужен. – duffymo

+0

@duffymo: Я, как правило, хорошо разбираюсь в том, чтобы отделить реализацию вашего сервисного контракта от реальной бизнес-логики. – zimdanen

+0

Вы ничего не отделили; звучит как проход. Я не вижу никаких транзакций или чего-либо еще, чтобы отличить ваш автоматически сгенерированный сервисный уровень. Зачем генерировать бессмысленный код? У меня есть интерфейсные сервисы, но я даю им что-то значимое. Я делаю их владельцами и оркестрами подразделений. – duffymo

ответ

0

Вы должны взглянуть на Agatha (http://davybrion.github.io/Agatha/) Это структура, которая устраняет необходимость такой установки для вашего обслуживания.

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

Отличный каркас для достижения чистого сервиса wcf. Вместо того, чтобы вызывать методы yourService.Methods, вы действительно будете отправлять свой запрос и получать ответы.

+0

Читайте об этом сейчас. – zimdanen

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