Я только начинаю работать с .NET ORM, и до такой степени, что я даже не определился между Entity Framework и NHibernate.Но в обоих случаях я сталкиваюсь с проблемой, заключающейся в том, что они, похоже, хотят, чтобы я нарушил целостность моей предметной модели различными способами, особенно в отношении более тонких аспектов проектирования объектов C #.Это один из нескольких вопросов по этому вопросу.
Существует причина virtual
, не используемая по умолчанию для методов в C # .Объекты в моей доменной модели не готовы давать обещания о поведении подклассов, за исключением очень специфических случаев, когда я отмечаю их как таковые.Иными словами, для очень немногих методов в моих объектах домена целесообразно добавить ловушку для неуказанной новой функциональности.
И все же NHibernate хочет, чтобы я сделал все virtual
, а Entity Framework хочет, чтобы я сделал все сущностиссылки virtual
.Я понимаю, зачем им это нужно (для создания прокси-объектов), и я понимаю, что на самом деле это законное использование наследования, и virtual
--- они на самом деле подключаются к моим свойствам, чтобы добавить новую функциональность,Но меня радует, что я должен аннотировать свои классы модели предметной области чем-то, что целиком и полностью связано с постоянством, а вовсе не выражает их фактический контракт с разработчиками и потребителями.
В качестве меньшей проблемы, которую я понимаюЯ, вероятно, ничего не могу с этим поделать, часто бывает достаточно выразительно комментировать мои занятия с помощью sealed
по всем обычным причинам .Это немного менее утомительно, так как пропуск аннотации в объектах моего домена с целью сохранения постоянства кажется менее вредным, чем добавление одного.
Огорчает, что после нескольких лет чтения книг типа Эффективные C # или блоги, подобные тем, что пишут Эрик Липперт, которые дают отличный совет о том, как создавать выразительные и пуленепробиваемые объекты C #, необходимость использовать ORM заставляет меня выбросить большую часть этих знаний из окна.Я надеюсь, что кто-то здесь может указать, где я не прав, либо в моём понимании их возможностей, либо в моих мыслях о моделировании предметной области и роли ORM.