Для бизнес-уровня я бы порекомендовал WCF (поскольку все пользовательские интерфейсы - .NET, это дает вам наибольшую гибкость). Вы можете сделать это одним из двух способов:
- Библиотека классов WCF (по сути, DLL WCF)
- Библиотека классов WCF или приложение, которое располагается поверх старомодной библиотеки DLL. Это позволит вам использовать бизнес-логику непосредственно в приложении, но я думаю, что # 1 - лучший путь.
Вы также можете сделать нечто подобное для уровня доступа к данным или просто реализовать уровень доступа к данным в виде библиотеки DLL, на которую напрямую ссылается бизнес-уровень (без промежуточной WCF / веб-службы). Однако использование WCF для доступа к уровню данных дает некоторую гибкость в том, что вам не нужно физически размещать бизнес-уровень и уровень данных.
Вы также, скорее всего, обнаружите, что некоторые классы могут использоваться несколькими слоями во время вашего проектирования и разработки. Обычно я помещаю их в отдельную сборку и ссылаюсь на них по мере необходимости на разных уровнях, чтобы не допустить повторной записи одного и того же кода.