Если я вас правильно понимаю, вы вынуждены использовать стороннее промежуточное ПО - но с этим нелегко иметь дело?
Я никогда не использовал NHibernate, поэтому не могу за это говорить.
Звучит так, будто вы хотите добавить новый "слой обслуживания" (если не хватает лучшего термина) сверху, с которым легче иметь дело; шаблон фасада приходит на ум (хотя он часто используется для объединения различных и разнородных интерфейсов под единой связной точкой интеграции).
По сути, вы хотите определить хороший чистый наборинтерфейсов / сервисов (на новом уровне сервисов);этот новый слой будет затем выполнять всю тяжелую работу по взаимодействию с промежуточным программным обеспечением - или напрямую с базой данных, если у вас есть такая возможность.
Я бы также предложил превратить этот новый слой в пару подразделов.: вы не хотите создавать новый слой, тесно связанный с промежуточным программным обеспечением (или базой данных) - используйте Внедрение зависимостей , чтобы изолировать внешний фасад от конкретной реализации и поддерживать слабая связь .Таким образом, если промежуточное ПО исчезнет, вы не окажете непосредственного влияния на потребителей нового уровня обслуживания, который вы создали.
И наконец, помните о Принципе разделения интерфейса (ISP)проектирование новых внешних служб.
Бесплатный хостинг изображений http://www.freeimagehosting.net/uploads/89e5a8a47a.jpg ( Изображение в полном размере здесь )