Помогите улучшить UnitOfWork-Interface

Я изо всех сил стараюсь добиться своего рода UnitOfWork против сохранения данных в datacontext. Без лишних объяснений я хотел бы сделать возможным выполнение двух запросов в одном и том же использовании.

Возьми это,

using (IDataUnitOfWork uow = new Data.SomeContext.Core())
{
  CustomerRepo repo = new CustomerRepo(uow);
  Data.Entities.Customer c = repo.GetCustomerById(191);
  ...
  c.name = c.name.Replace("_", "");
  //c.name = c.name + "_";
  //uow.Save();
}

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

using (IDataUnitOfWork uow = new Provider.TheProviderContext())
{
  CustomerRepo repo = new CustomerRepo(uow);
  Data.Entities.Customer c = repo.GetCustomerById(191);
  ...
  c.name = c.name.Replace("_", "");
  //c.name = c.name + "_";
  //uow.Save();
}

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

using (IDataUnitOfWork uow = new Data.SomeContext.Core())
{
  ...
  if (anything == true) 
    using (IDataUnitOfWork uow = new Provider.TheProviderContext())
    {
      ...
    }
}

Это выглядит как хороший и понятный способ работы (потому что вся информация уже известна второму «использующему». Поправьте меня, если я здесь полностью ошибаюсь, потому что у меня пока только это на планировании. Но было бы ЕЩЕ ЛУЧШЕ, если бы я мог позвонить

using (IDataUnitOfWork uow = new BothProviders())

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


person Independent    schedule 16.03.2011    source источник
comment
возможный дубликат stackoverflow.com/questions/5171779/dependency-injection   -  person k3b    schedule 16.03.2011
comment
зависит от того, чего вы хотите достичь. Имейте в виду, что единица работы делает всю операцию атомарной. Если вы хотите унифицировать провайдеров, рассмотрите шаблон адаптера   -  person Robert    schedule 16.03.2011
comment
Роберт, en.wikipedia.org/wiki/Adapter_pattern Спасибо за комментарий. Я прочитаю это (и многое другое). Это может быть ответом на эту тему,   -  person Independent    schedule 16.03.2011
comment
@ Роберт, я буду рад, если ты оставишь свой комментарий в качестве ответа. Это, конечно, хорошо, если вы хотите указать более точное описание шаблона адаптера (для этого сценария), но это не нужно. Ёру, наверное, совершенно прав, что я стараюсь использовать груши, когда нужны яблоки.   -  person Independent    schedule 16.03.2011


Ответы (1)


зависит от того, чего вы хотите достичь. Имейте в виду, что единица работы делает всю операцию атомарной. Если вы хотите унифицировать провайдеров, рассмотрите шаблон адаптера

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

person Robert    schedule 16.03.2011