Это зависит от того, чего вы хотите достичь. Я могу сказать вам, что я делаю сам - у меня есть и DTO, и BO, сопоставленные в NHibernate, но DTO отображаются как неизменяемые, поэтому я не могу случайно обновить базу данных без использования BO.
Все запросы, доступные в WebServices, возвращают / принимают DTO.
При каждом обновлении из DTO я выполняю UnitOfWork, где загружаю BO, обновляю свойства из DTO и снова сохраняю его, если он все еще действителен.
На клиенте я создаю BO из DTO (AutoMapper, безусловно, является здесь правильным выбором) всякий раз, когда клиенту нужно его изменить. У BO есть ctor, который принимает все аргументы для его создания, аналогично тому, что сделал бы NHibernate.
Преимущества:
* Полный контроль над объемом данных, которые передаются по проводам (DTO, как правило, сглаживаются, поэтому при первом вызове отправляется только Id связанных классов).
* У меня не должно быть одинаковых свойств в обоих
* Я могу смешивать и сочетать ленивую загрузку, как я хочу
* Я могу использовать скалярные запросы и другие вычисляемые свойства в DTO, не создавая их в BO.
* У меня может быть несколько разных DTO на BO для разных сценариев.
Итак, я предполагаю, что это будет квалифицироваться как смешивание и сопоставление, но с четкими указаниями, где я делаю, что:
Надеюсь, это поможет.