Совет потребности для большого уровня доступа к данным .NET

Объекты никогда не должны находиться в недопустимом состоянии.

К сожалению, так много в структуре ORM требуют конструкторов с нулевым аргументом для всех классов сущностей, используя сеттеры для заполнения переменных-членов. В этих случаях очень трудно узнать, какие сеттеры должны быть вызваны для создания допустимого объекта.

MyClass c = new MyClass(); // Object in invalid state. Doesn't have an ID.
c.setId(12345); // Now object is valid.

По моему мнению, должно быть невозможно , чтобы объект когда-либо оказывался в недопустимом состоянии, и API класса должен активно применять свои инварианты класса после каждого вызова метода.

Конструкторы и методы-мутаторы должны атомарно переводить объект из одного допустимого состояния в другое. Это намного лучше:

MyClass c = new MyClass(12345); // Object starts out valid. Stays valid.

Как потребитель некоторой библиотеки, очень сложно отследить, все ли правильные установщики были вызваны, прежде чем пытаться использовать объект, так как документация обычно не дает подсказки о контракте класса.

7
задан Ting 20 February 2013 в 02:08
поделиться

3 ответа

Если ваше руководство готово заплатить за коммерческий ORM, вам следует рассмотреть этот вариант.

Одно ограничение, которое у вас может быть (в настоящее время) с NHibernate (если только вы не Если вы хотите использовать Alpha-код из проекта NHibernateContrib), в настоящее время вы не можете позволить себе роскошь использовать механизм LINQ / IQueryable для запроса с использованием все более знакомого синтаксиса LINQ. У вас по-прежнему будут очень гибкие механизмы критериев и HQl, это просто зависит от того, хотите ли вы начать инвестировать в то, чтобы делать все «в стиле LINQ» или нет?

Судя по моим исследованиям, у вас есть довольно много вариантов (все поддерживающие Запрос LINQ):

Raw Entity Framework (есть коммерческие партнеры, которые также добавляют инструменты и функции поверх него. )

Lightspeed кажется своего рода LINQ-to- [множеством баз данных] с хорошей поддержкой времени разработки.

Telerik OpenAccess похож на Lightspeed.

IdeaBlade DevForce - это построен поверх EntityFrmework, но добавляет некоторые функции удобства использования. Если вы не используете SQL Server, использование IdeaBlade ТАКЖЕ потребует приобретения поставщика ORACLE-EF у отдельного поставщика, такого как DevArt или DataDirect.

LLBLGen Pro Хороший набор функций и активная разработка.

DevArt также предлагает хорошие инструменты для доступа к данным и поставщиков LINQ для конкретных поставщиков.

Если вы не используете SQL Server, то использование IdeaBlade ТАКЖЕ потребует приобретения поставщика ORACLE-EF у отдельного поставщика, такого как DevArt или DataDirect.

LLBLGen Pro Хороший набор функций и активная разработка.

DevArt также предлагает хорошие инструменты для доступа к данным и поставщиков LINQ для конкретных поставщиков.

Если вы не используете SQL Server, то использование IdeaBlade ТАКЖЕ потребует приобретения поставщика ORACLE-EF у отдельного поставщика, такого как DevArt или DataDirect.

LLBLGen Pro Хороший набор функций и активная разработка.

DevArt также предлагает хорошие инструменты для доступа к данным и поставщиков LINQ для конкретных поставщиков.

[ОБНОВЛЕНИЕ] Готовая к работе поддержка LINQ теперь доступна в NHibernate!

6
ответ дан 6 December 2019 в 23:12
поделиться

Я использовал Entity Framework в своих последних двух проектах, у них было одинаковое количество таблиц. У нас это хорошо сработало. Мы разделили таблицы на несколько моделей Entity Framework, макс. Ок. 80 столов в одной модели.

1
ответ дан 6 December 2019 в 23:12
поделиться

Почему вы не спросите об этом у руководства?

Сколько решений для доступа к данным было создано и уничтожено Microsoft выключена в то время, когда были вокруг Hibernate / NHibernate?

  • ADO
  • ADO.NET
  • Строго типизированные наборы данных
  • LINQ2SQL
  • Entity Framework
  • Entity Framework V2

В это время Hibernate / NHibernate становятся все более зрелыми. Он никуда не денется.

4
ответ дан 6 December 2019 в 23:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: