Ответ 1
Это в значительной степени на цель. Однако N-Tier немного сложнее, чем N-Layer, и его можно противопоставить, спросив: "Являются ли ваши слои на разных физических серверах?"
В зависимости от того, насколько сложным является ваш бизнес-уровень, вам может потребоваться отвлечь его дальше между уровнем Business и Service. Обычно эти два очень тесно связаны и живут на одном физическом сервере. Уровень обслуживания часто действует как фасад вашего BLL.
Если уровень презентации находится на одном сервере, то ваши приложения ASP.NET или WinForms могут взаимодействовать с BLL, не проходя через службы WCF.
Прочитайте Шаблоны и методы Microsoft - Руководство по архитектуре приложений.
Объекты вашего домена должны жить в собственной сборке, как правило, вашей модели домена. Согласно Руководства по дизайну Microsoft Framework, рекомендуется называть свои сборки проектов соответственно:
[О компании]. [ProductOrComponent]. [...]
Мне нравится этот формат межстрочного интервала и обычно используется:
[О компании]. [Product]. [Layer]. [Подуровень]. [...]
Вот пример решения, использующего папки решений для организации каждого проекта:
В этом примере у меня есть уровень BLL и Service. Уровень сервиса предоставляет фактическую реализацию в библиотеке WCF, в то время как в презентации фактически содержится веб-приложение WCF для размещения служб. Всегда полезно разделить реализацию от интерфейса.
Папка/Client можно игнорировать, я просто использую это как пример консольного приложения для тестирования. Любые клиентские приложения, которые потребляют ваш сервис, вероятно, должны иметь собственное решение или вы собираетесь управлять огромным решением.
Что касается вашего объекта данных, передаваемого по проводу... Я предполагаю, что вы имеете в виду классы из вашего ORM. (Модель домена). Вы правы, что обычно считается плохой практикой. Решение использует объекты передачи данных. Вы можете видеть на картинке, что у меня есть библиотека .Dto. Если вы можете использовать такие инструменты, как AutoMapper, но я все для этого, добавление DTO к вашему решению приносит ему дополнительную сложность и обслуживание. Я считаю, что Дино Эспозито написал хорошую статью по этому вопросу. Попробуем найти его для вас.
Надеюсь, что это поможет.
[EDIT]
Я должен отметить, что я не знаком с возможностями nHibernate. Могут быть лучшие решения для использования этой ORM. Я работал только с Entity Framework.
[ИЗМЕНИТЬ 2]
Отъезд Dino Esposito - Преимущества и недостатки объектов передачи данных