Вопрос о дизайне: различные типы транзакций в системе - PullRequest
0 голосов
/ 27 июля 2010

В моем фреймворке у меня есть интерфейс ITransaction.
Он реализует некоторые основные операции, такие как Commit () и Rollback (), он используется для плоских файлов и других источников данных.
Однако NHibernate также имеет интерфейс ITransaction.
Это не то же самое, что мой интерфейс, поскольку есть некоторые специфичные для базы данных методы, но есть сходства.
Моя проблема в том, что я хочу, чтобы транзакция NHibernate рассматривалась как моя собственная транзакция, поэтому я смогу более легко переключать реализации между базой данных и плоскими файлами.
Как объединить оба интерфейса, чтобы NHibernate по-прежнему мог принимать мои объекты транзакций NHibernate, а моя инфраструктура могла принимать мои объекты транзакций NHibernate, поскольку они принадлежат MyFramework.ITransaction?

1 Ответ

1 голос
/ 27 июля 2010

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

MyFramework.ITransaction может унаследоватьиз NHIbernate.ITransaction, гарантируя, что все разработчики MyFramework.ITransaction также будут разработчиками, если NHibernate.ITransaction.

Наконец, вы можете реализовать шаблон адаптера с ITransactionWraper и двумя разработчиками (MyFrameworkTransactionWrapper и NHibernateTransactionWrapper).Весь ваш код будет записан в интерфейс ITransactionWrapper, а его разработчики будут делегировать вызовы правильной транзакции ITransaction.Как и в большинстве реализаций шаблонов адаптера, вы, вероятно, будете использовать шаблон Factory или AbstractFactory для создания правильной обертки во время выполнения, в зависимости от конфигурации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...