Как я мог бы подойти к этому, может потребоваться внести некоторые изменения в архитектуру, но я бы посоветовал вам обратиться к своему API-интерфейсу WCF, чтобы вернуть ViewModels вместо сущностей.
Для начала подумайте о проблемах с пропускной способностью (которые могут возникнуть при размещении WCF в Azure или в облаке). Если ваша ViewModel использует только несколько определенных свойств, зачем тратить пропускную способность, возвращая другие данные? В сценариях с высоким трафиком это может привести к трате трафика, что может привести к затратам. Например, если в вашем представлении отображаются только пользователь и его вопросы, нет причин отправлять по электронной почте его электронную почту, ответы, количество баллов и т. Д.
Еще одна проблема, о которой стоит задуматься, это стремление к загрузке. Имея, что служба WCF возвращает ViewModel, вы знаете, что у вас есть все данные (даже если они относятся к связанным объектам), необходимые для представления за одну поездку к службе WCF. Вам не нужно получать WCFUserEntity
, а затем запрашивать у WCF WCFDocumentEntities
, которые связаны с этим конкретным пользователем.
Наконец, если ваш WCF API построен на ViewModels, у вас НАМНОГО более ясное понимание вовлеченных бизнес-процессов. Вы знаете, что этот конкретный запрос (и представление в системе) даст вам эту конкретную информацию, и если вам нужна другая информация для другого представления, то вы знаете, что это совершенно другой бизнес-запрос, имеющий другие бизнес-требования. Используя переполнение стека в качестве примера, легко увидеть, что этот бизнес-процесс запрашивает текущего пользователя со своими связанными вопросами, в то время как этот бизнес-процесс запрашивает текущего пользователя со связанными ответами.
Использование ViewModels в вашем API поиска WCF означает, что ваши внешние слои не обязательно знают, откуда поступили данные, они просто знают, что они вызвали бизнес-процесс и получили необходимые данные. Насколько он знает уровень данных, подключенный к базе данных напрямую, а не к WCF.
Изменить:
После перечитывания это выглядит как ваш третий вариант. Большинство исследований в сети не говорят об этом варианте, и я не знаю почему, но после некоторых схожих разочарований, которые у вас возникли (плюс другие, перечисленные в этом посте), я выбрал свой бизнес-уровень. Это имеет больше смысла и фактически (имхо) проще в управлении.