@ridermansb - Поскольку вы упомянули AutoMapper, я предполагаю, что ваше сопоставление происходит на сервере. Вы хотите, чтобы ваш серверный API открывал «ViewModels» (в этом случае вы могли бы называть их DTO), а не объекты модели предметной области. Иногда ваши ViewModels точно отражают объекты вашего домена; иногда нет.
Ваш клиент видит только то, что предоставляет ваш API. Если это клиент BreezeJS, вы, скорее всего, будете рассматривать ViewModels как объекты на стороне клиента. Они являются сущностями Breeze в том смысле, что вы ожидаете, что Breeze будет запрашивать, кэшировать, отслеживать изменения и проверять их. BreezeJS не знает, соответствуют ли эти «сущности» DTO на стороне сервера или бизнес-объектам на стороне сервера.
Конечно, если вы используете DTO/ViewModels, код вашего сервера отвечает за перевод между формой DTO и формой объекта домена. Предположительно, эта логика лежит где-то между уровнем API на стороне сервера и уровнем домена.
Если вы выбрали эту архитектуру, вы решили иметь дело с двунаправленной трансляцией между ViewModels и объектами предметной области и приняли все связанные с этим сложности и хлопоты. У меня нет слов совета для вас на этот счет.
Итак, позвольте мне перефразировать и сузить ваш вопрос: «Как я могу получить метаданные, описывающие объектную модель, предоставляемую моим серверным API?»
Мой любимый способ (при условии, что сервер .NET) — позволить EF сделать это за меня. Я создаю DbContext, который ссылается НЕ на мои классы модели предметной области, а скорее на мои классы ViewModel/DTO. Конечно, эти классы на самом деле не будут отображаться в реальной базе данных. Без проблем; они не должны. Вы никогда не будете использовать этот DbContext для доступа к данным. Вы будете использовать его только для создания метаданных. Вы используете EF в качестве инструмента для создания метаданных во время разработки... и все. Это эффективный ремонтопригодный подход.
Я надеюсь продемонстрировать эту технику "в ближайшее время", но я был сильно занят в последнее время, так что не обещаю.
Кроме того, вы можете написать метаданные вручную, как описано здесь.
person
Ward
schedule
09.07.2013