Ветерок: почему наследование от Breeze.Sharp.BaseEntity?
Мы начали рассматривать возможность использования BreezeSharp, поскольку у нас есть служба ODATA WebAPI, которую мы хотели бы повторно использовать с сайтом ASP.NET (без использования javascript, только чистый C#).
К сожалению, мы только что заметили, что, согласно документации, все наши модельные объекты теперь должны наследоваться от Breeze.Sharp.BaseEntity. Это не пойдет нам на пользу, так как это будет означать зависимость от Breeze в нашей бизнес-модели. Мы бы предпочли сохранить эту зависимость только от службы WebAPI.
Есть ли в любом случае, мы могли бы избежать этого? Наличие прокси-классов на стороне клиента, например, когда они не наследуются от BaseEntity?
Есть мысли по этому поводу?
2 ответа
Если я правильно понимаю, ваша единственная проблема в том, что вы не хотите обращаться к библиотекам breeze # в вашей модели сервера. Очевидно, у вас нет проблем с тесной связью ваших клиентских и серверных классов сущностей в том смысле, что они имеют одинаковые свойства и, возможно, общие методы. Я не осуждаю; Я просто пытаюсь подтвердить ваши архитектурные решения.
Вы рассматривали частичные занятия?
Вы определяете частичный класс без ветерка в своем проекте бизнес-модели на стороне сервера и связываетесь с этим источником класса в своем проекте клиентской модели..., где вы сохраняете частичный класс-компаньон с клиентской функциональностью. Этот файл частичного класса клиента определяет базовый класс breeze #.
Пока вы это делаете, вы можете отделить логику только для сервера в частичных файлах классов, которые находятся в вашем серверном проекте, но не в вашем клиентском проекте.
Подобные ссылки на исходные файлы стали еще проще с VS теперь, когда Microsoft продвигает их в своем видении "Универсальных приложений".
Требование Breeze.Sharp.BaseEntity сугубо на стороне клиента, и причина этого заключается в том, чтобы предоставить все функции сохранения, навигации, исправления ключей, отслеживания изменений и уведомлений, а также другие услуги, которые делают клиент Breeze таким простым в использовании.
Существует интерфейс IEntity, который реализует Breeze.Sharp.BaseEntity, и вы можете реализовать его вместо использования Breeze.Sharp.BaseEntity, однако это очень нетривиальная задача. Мы подумываем о том, чтобы предложить какое-то руководство по этому вопросу позднее, если наше сообщество в целом сочтет это желательным.
Мы также планируем выпустить реализацию IEntity для AOP, которая может быть внедрена непосредственно поверх объектов модели POCO, но для этого, вероятно, потребуется PostSharp, а также могут возникнуть проблемы при работе на некоторых клиентских платформах (Xamarin для Android/IOS). Никаких временных рамок для этого пока мы не получим представление о спросе.
Текущая реализация, с другой стороны, очень уважительно относится к объектам вашей модели, к вашей модели добавлено только одно свойство EntityAspect, а также несколько событий.
В прошлом мы пробовали чистый подход POCO на многих других платформах и библиотеках приложений и обнаружили, что недостатки перевешивают минимальную стоимость базового класса, особенно если учесть, что мы хотим, чтобы эта библиотека работала в любом клиенте.NET, включая Xamarin. /Моно.