FluentNHibernate Unit of Work / Шаблон хранилища Вопросы Вопросы
Я думаю, что я в тупике здесь. У меня есть приложение, которое я построил с нуля, используя FluentNHibernate (ORM) / SQLite (файл db). Я решил реализовать шаблон "Единица работы и дизайн хранилища". Я нахожусь в точке, где мне нужно подумать об окончательной игре, которая запустится как приложение Windows WPF (с использованием MVVM) и в конечном итоге будет реализовывать веб-сервисы / ASP.Net как пользовательский интерфейс.
Сейчас я уже создал доменные объекты (сущности) для ORM. И теперь я не знаю, как мне использовать это вне ORM. Вопросы об этом включают в себя:
- Должен ли я использовать объекты сущностей ORM непосредственно в качестве моделей в MVVM? Если да, я должен поместить бизнес-логику (например, определенные значения должны быть положительными и быть больше, чем другое свойство) в этих объектах сущности? Это, безусловно, более простой подход, и я склоняюсь прямо сейчас. Однако, будут ли ошибки, которые испортили бы этот план?
- Если ответ выше - "нет", могу ли я тогда создать новый набор классов для реализации бизнес-логики и использовать их в качестве моделей в MVVM? Как бы я справился с переходом между объектами модели и объектами сущности? Я думаю, что реализация конвертера типов будет хорошо работать здесь.
1 ответ
Чтобы ответить на первую часть вашего вопроса, да, ваша бизнес-логика и проверка должны идти в ваших организациях. Смысл NHibernate в том, чтобы позволить вам создавать свои сущности так, чтобы они оставались невежественными. Это означает, что вы должны, когда это возможно, проектировать свои сущности так, как если бы вы не заботились о постоянстве. Это не совсем выполнимо, как вы скоро узнаете (вам нужно будет сделать ваши свойства виртуальными, чтобы поддерживать отложенную загрузку, и если вы хотите использовать NHibernate Validator, вы будете украшать свои свойства с атрибутами проверки), но по большей части NHibernate делает хорошую работу, чтобы держаться подальше от вашего пути.
Что касается использования ваших сущностей в качестве моделей, вы получите смешанные отзывы на это. В идеале вы должны создать отдельные классы модели представления и сопоставить их от сущностей с моделью представления, чтобы ваши представления имели доступ только к минимуму необходимой информации. Это также имеет большое значение для предотвращения проблем доступа N+1. Тем не менее, это часто является огромной болью. Конечно, есть такие инструменты, как AutoMapper, которые облегчат перенос свойств вашей сущности в модель представления.