Как и в случае большинства архитектурных проблем, здесь необходимо найти компромисс.
Для приложений, которые не предполагают использовать сервис-ориентированную архитектуру (например, автономный веб-сайт с резервной базой данных, единое внутреннее бизнес-приложение), гораздо лучше представить модель вашего домена на всех уровнях приложения. , Это гарантирует, что вы не нарушите принцип «СУХОЙ» («Не повторяйте себя»), и вам не придется много заниматься рефакторингом каждый раз, когда вы добавляете новое свойство в модель вашего домена. Вы также можете использовать такую среду, как NHibernate Validator, чтобы определить всю свою проверку один раз, и использовать эту проверку как для уровня данных, так и для веб-уровня.
Для более крупных приложений, которые содержат много отдельных служб (например, большие наборы внутренних бизнес-приложений), желательно отделить ORM от интерфейса службы. Это позволит вам вносить изменения в модели доступа к данным без изменения интерфейса службы (и наоборот), что чрезвычайно важно, когда многие другие службы зависят от стабильности вашего интерфейса.
Однако описанная вами ситуация (использование методов для изменения определенных свойств), по-видимому, не соответствует ни одному из этих сценариев: как правило, плохая идея следовать описанному шаблону, так как отслеживание путей выполнения и рефакторинг сложно (и может привести к спагетти-коду). Единственное возможное использование, о котором я могу подумать, - это если ваши модели данных очень большие (5 тыс. Блобов XML и т. Д.), И отправка их через уровень обслуживания будет генерировать большие объемы трафика. (Примечание: объекты C # намного меньше 5k при правильной сериализации!)
Я бы порекомендовал передать всю модель доступа к данным на веб-слой.