Лучшая опция ORM из ASP.NET MVC к MySQL

Переключатели являются запахом кода при использовании в чистом коде OO. Это не означает, что они неправы по определению, просто что необходимо думать дважды об использовании их. Будьте дополнительны осторожный.

Мое определение переключателя здесь также включает if-then-else операторы, которые могут легко быть переписаны как операторы переключения.

Переключатели могут быть знаком, что Вы не определяете поведение близко к данным, на которые оно воздействует и не использует в своих интересах полиморфизм подтипа, например.

При использовании языка OO, Вы не вынуждены программировать в OO путь. Таким образом, если Вы принимаете решение использовать более функциональный или основанный на объектах стиль программирования (например, использование DTOs, которые только содержат данные, но никакое поведение, в противоположность более богатым моделям предметной области) нет ничего неправильно с использованием переключателей.

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

int dbValue = ...;

switch (dbValue)
{
  case 0: return new DogBehaviour();
  case 1: return new CatBehaviour();
  ...
  default: throw new IllegalArgumentException("cannot convert into behaviour:" + dbValue);  
}

РЕДАКТИРОВАНИЕ после чтения некоторых ответов.

Customer.isInvestable: большой, полиморфизм. Но теперь Вы связываете эту логику с клиентом, и Вам нужен подкласс для каждого типа клиента только для реализации различного поведения. В прошлый раз, когда я проверил, это не то, как наследование должно использоваться. Вы хотели бы, чтобы тип клиента был свойством Customer или имел функцию, которая может решить тип клиента.

Двойная отправка: полиморфизм дважды. Но Ваш класс посетителя является чрезвычайно все еще большим переключателем, и он имеет некоторые из тех же проблем, как объяснено выше.

Кроме того, следование примеру OP, полиморфизм должен быть на категории клиента, не на Customer самой.

Включение значения прекрасно: хорошо, но операторы переключения в большинстве случаев используются, чтобы протестировать на сингле int, char, enum... оценить, в противоположность if-then-else, где диапазоны и более экзотические условия могут быть протестированы. Но если мы диспетчеризируем на этом единственном значении, и это не в краю нашей модели OO, как объяснено выше, затем кажется, что переключатели часто используются для диспетчеризации на типе, а не на значении. Или: если Вы можете не , заменяют условную логику if-then-else переключателем, то Вы, вероятно, в порядке, еще Вы, вероятно, нет. Поэтому я думаю, что переключатели в ООП являются запахами кода, и оператор

, Включающий тип, является плохим стилем ООП, включение значения прекрасно.

самостоятельно упрощен.

И вернуться к начальному вопросу: switch не плохо, это - просто не всегда очень OO. Вы не должны использовать OO для решения проблемы. Если Вы действительно используете ООП, то переключатели - что-то, что необходимо уделить дополнительному вниманию.

5
задан DaveRandom 25 February 2013 в 20:08
поделиться

7 ответов

LLBLGen . Текущая версия 2.6 потрясающая. Конструктор действительно прост в использовании, поддерживает наследование сущностей, преобразователи типов (которые также можно использовать для преодоления разрыва между различными типами в СУБД), проверку, аудит, авторизацию и многое другое. Однако, что наиболее важно, их документация великолепна, а их форум поддержки очень отзывчив. Ведущий разработчик (который также участвует в stackoverflow) также отвечает на вопросы пользователей. Я не могу сказать достаточно об этом инструменте, попробуйте. Это того стоит.

Следующая версия, вероятно, вытеснит все остальное из игры. Помимо возможности генерировать их традиционные данные позже, вы сможете генерировать файлы сопоставления nHibernate, структуру сущностей и linq2sql. http://www.llblgen.com/tinyforum/Messages.aspx?ThreadID=12811 http://www.llblgen.com/tinyforum/Messages.aspx?ThreadID=14659

5
ответ дан 18 December 2019 в 11:58
поделиться

Взгляните на Telerik OpenAccess ORM . Он бесплатен для любых бесплатных платформ баз данных или баз данных с открытым исходным кодом (в вашем случае MySQL) и обеспечивает удобный и простой в использовании графический интерфейс. Не говоря уже о том, что у Telerik есть отличные форумы поддержки и огромная библиотека обучающих видео .

OpenAccess предлагает поддержку LINQ, POCO, прямое и обратное отображение, расширенное кэширование, ленивую и агрессивную загрузку, нет отражения, среднее доверие и многое другое. Я использую его ежедневно (для доступа к данным MS Sql и Oracle) и считаю его отличным решением для корпоративных сценариев и для моих личных проектов.

1
ответ дан 18 December 2019 в 11:58
поделиться

Nhibernate довольно зрелый и кажется более легким по сравнению с Entity framework.

3
ответ дан 18 December 2019 в 11:58
поделиться

Entity Framework работает в MySQL для большинства задач. Вы будете замечать проблемы здесь и там, но есть вероятность, что все они решимы.

1
ответ дан 18 December 2019 в 11:58
поделиться

Самым большим недостатком Entity Framework является отсутствие встроенной отложенной загрузки. Я использовал NHibernate и Entity Framework - лично я предпочитаю богатство NHibernate, но Entity Framework довольно быстро и легко запускается и не так плох, как иногда бывает репутация.

1
ответ дан 18 December 2019 в 11:58
поделиться

Попробуйте DbLinq .

Это не полный порт Linq to SQL, но он выполняет основные функции.

Я еще не использовал его, но теперь есть поддержка Linq в nHibernate ( проверьте ссылку ).

1
ответ дан 18 December 2019 в 11:58
поделиться

Have a look at Mindscape LightSpeed. It includes LINQ querying and a Visual Studio designer that works with MySQL natively. You can update your database or sync changes from your database directly from within the LightSpeed designer also.

Mindscape also publish an open source repository of helpers for asp.net MVC which includes things they have built up to make development with LightSpeed and MVC easier (for example, you'll likely end up wanting a custom ModelBinder for whatever underlying model objects you use - Mindscape provide one that is richer than the default model binder).

There is a free version available to play with:

Mindscape LightSpeed

One of the guys at Mindscape has also written a fairly deep set of blog posts about building up an ASP.NET MVC solution using LightSpeed (although it's probably helpful no matter what you're using :-)

ASP.NET MVC & LightSpeed Blogs Posts

3
ответ дан 18 December 2019 в 11:58
поделиться
Другие вопросы по тегам:

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