Можно ли принять использование O / RM, такого как NHibernate или Entity Framework, и абстрагировать его таким образом, чтобы его можно было заменить в случае возникновения ситуации, которую O / RM не может обработать.
Кажется заманчивым создание службы с короткими методами, внутри которых создается сеанс, который используется для получения / переноса сущностей, а затем используется для сохранения всех грязных объектов.
Я бы рассмотрел шаблон репозитория, чтобы операция службы запрашивала у репозитория сущности, а сеанс O / RM был встроен в репозиторий. Но что вы делаете с сохранением связанных сущностей, и метод Update (T entity) сбрасывает изменения немедленно. Это кажется простым и в целом неудовлетворительным.
То, к чему я сейчас склоняюсь, - это один класс-оболочка O / RM, который предоставляет интерфейс с общими методами, такими как «StartSession», «EndSession», «AbandonSession», «GetById (object id)» и т. Д.
По крайней мере, это позволило бы подделать OR / M при тестировании, что является еще одной моей большой проблемой.
Полагаю, я говорю, что не хочу тесно переплетать бизнес-логику и код доступа к данным O / RM, потому что переключение на другое O / RM может привести к замене большей части этого кода.
Что люди делают в реальном мире?