Есть много способов сделать это, поэтому лучшее, что я могу сделать, это поделиться тем, что я делаю.
1) Создайте каждый контекст домена на основе функции. Например, у меня будет контекст для всех функций пользователя, один для всех функций клиента, один для функций заказа и т. Д. Это позволяет проводить чистую сегментацию BusinessLayer.
2) Создание пользовательских классов в веб-проекте, которые будут возвращаться вместо абстрактных представлений, созданных мастером. У меня лично есть проблема с возвращением имени моего БД, указанного в IQueryAble, в проект Silverlight, поскольку проект Silverlight можно рассматривать как слой пользовательского интерфейса. Это косвенно вызывает зависимость от DataLayer, чего мы не хотим. Да, это создает больше работы с добавлением дополнительных классов, но помогает обеспечить абстракцию для правильной трехслойной архитектуры.
3) Создайте пользовательские классы на уровне пользовательского интерфейса, которые переваривают возвращаемые данные из отображенных методов (из DataContext). Это помогает применять абстракцию.
Помните, конечная цель - сделать ваш код как можно более слабосвязанным. Это всегда требует дополнительного (и иногда избыточного) кодирования с вашей стороны, но конечный результат стоит усилий.
Вы также можете рассмотреть возможность создания библиотеки классов RIA; что позволяет вам абстрагироваться дальше. Это не самая простая реализация, но это шаг в правильном направлении при попытке облегчить взаимодействие между Silverlight и веб-проектами.