Совместное использование кода в шаблоне Unit of Work

Это общий вопрос. Я разрабатываю систему, используя шаблон Unit of Work. Существуют ли какие-либо установленные шаблоны, которые определяют, как разделить логику между несколькими единицами работы с помощью модульного тестирования?

Вот более конкретный сценарий:

Существует заказ на покупку, который

UnitOfWork1 -> отправляет ЗП на утверждение

UnitOfWork2 -> одобряет или отклоняет заказ на покупку и отправляет его отправителю

Обе единицы работы имеют один и тот же код, например:

ShareLogic1 -> Пользователь должен иметь доступ к PO

SharedLogic2 -> Записать последнее действие в PO

Какие шаблоны я могу использовать, когда такая логика может быть разделена между несколькими единицами работы. Хотя наследование может решить проблему в этом случае, я не хочу использовать наследование, поскольку оно подходит не во всех случаях.


person Anish    schedule 23.12.2011    source источник
comment
Этот шаблон называется методами. Метод — это многократно используемый фрагмент кода.   -  person Alex Burtsev    schedule 23.12.2011
comment
Это не то, о чем я спрашивал. Существует ли шаблон для совместного использования логики между несколькими единицами работы? Общий код должен быть мокабелен. Легко сбросить код в кучу вспомогательных классов, но это не то, что я искал. Лучшее решение, которое я смог придумать, состоит в том, чтобы иметь фабрику бизнес-логики, классы которой предназначены для конкретной логики, требуемой единицей работы. Я не уверен, что это лучший шаблон. Я почти уверен, что это распространенный сценарий, и я хотел знать, как другие решают эту проблему.   -  person Anish    schedule 23.12.2011
comment
Я думаю, вы неправильно поняли шаблон UnitOfWork, UOF — это SCOPE, в котором ряд операций можно считать атомарным (простыми словами), класс .NET TransactionScope — это пример UOC для доступа к данным. Так что это ОБЛАСТЬ. Из того, что вы написали, похоже, что вы поняли UOC как некий элемент WorkFlow.   -  person Alex Burtsev    schedule 23.12.2011
comment
Либо у тебя бардак в голове, либо я тебя не так понял. Если это первый случай, попробуйте взглянуть на примеры приложений Domain Driven Design. stackoverflow.com/questions/540130/   -  person Alex Burtsev    schedule 23.12.2011
comment
Я понимаю шаблон UnitOfWork. Я думаю, вы неправильно поняли мой вопрос. Если вы не понимаете вопроса, пожалуйста, не комментируйте.   -  person Anish    schedule 23.12.2011


Ответы (1)


Поместите эту логику в класс и разрешите обеим единицам работы иметь к ней доступ. Оба примера принадлежат классу PurchaseOrderRepository. Используя инверсию управления, вы можете издеваться над этим.

person Ivo    schedule 23.12.2011