Мне действительно нужен ORM?

Мы собираемся начать разработку на веб-сайте ASP.Net MVC 2 среднего размера. Для типичной страницы мы захватываем данные и подбрасываем их на веб-странице, т.е. нет большой предварительной обработки данных, прежде чем они будут отправлены в UI.

Мы теперь принимаем решение, использовать ли ORM и если да, который. Мы смотрели на EF2 иначе EF4 (Платформа Объекта ASP.NET в VS 2010) как одна возможность.

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

Я должен упомянуть, что бюджет является проблемой об этом проекте, а также скоростью выполнения. Мы боремся за простоту где угодно, мы можем, и для хранения бюджета меньшим, расписание короче и производительность быстро.

Мы еще не полностью решили это, но в настоящее время не склоняемся ни к какому ORM. Мы согласимся ни с каким подходом ORM, или действительно ли ORM стоит того?

8
задан alchemical 30 April 2010 в 07:28
поделиться

6 ответов

Если вы не собираетесь практиковать полномасштабное объектно-ориентированное программирование (я имею в виду, что вы должны иметь очень глубокое понимание ООП, а не только возможность выпалить принципы и названия паттернов) тогда НЕТ, не стоит переходить на ORM.

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

Если стиль программирования вашей команды / организации всегда склонялся к сохранению бизнес-логики в БД (например, хранимых процедур) или придерживался более или менее функционального / процедурного / статического подхода при написании объектов и методов, откажитесь от ORM и придерживайтесь ADO.NET.

4
ответ дан 5 December 2019 в 15:21
поделиться

ORM-инструмент не является обязательным!

Совет Джона разумен, но я думаю, что использование DataTables не идеально.

Если вы используете инструмент ORM, объектная модель намного проще, чем полномасштабная модель предметной области ОО. Более того, Linq2Sql и Subsonic, например, являются простыми в использовании. Возможность очень быстрого изменения кода при изменении базы данных.

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

5
ответ дан 5 December 2019 в 15:21
поделиться

Я согласен с советом Джо Р. - что касается скорости внесения изменений, а также скорости начальной разработки, LINQ-to-SQL или дозвуковой режим помогут вам быстро приступить к работе.

Если ваше приложение действительно настолько простое, и это просто прямые исходящие данные / данные в прямом отображении в таблицы, рассматривали ли вы динамические данные ASP.net ?

Я бы также укажите на хорошую статью об этом Скотта Гатри.

0
ответ дан 5 December 2019 в 15:21
поделиться

Похоже, что вам нужно только показывать данные и не делать CRUD.

Я обнаружил, что ORM - не лучший способ для отображения списков, состоящих из данных из различных таблиц. В итоге вы загружаете большие графы объектов только для того, чтобы получить одно нужное поле.

SQL-выражение намного лучше справляется с этой задачей. Я бы все же возвращал списки сильно типизированных объектов из DAL. Так у вас будет больше шансов получить ошибку при компиляции, когда изменение в DAL не отражается в других слоях.

1
ответ дан 5 December 2019 в 15:21
поделиться

Это во многом зависит от того, насколько вы знакомы с ORM.

Я лично считаю, что NHibernate, который является королем ORM в мире .NET, обеспечивает более быструю разработку, поскольку после настройки вы можете практически забыть о том, как вы получаете данные из базы данных.

Тем не менее, он требует крутого обучения, особенно если вы пытаетесь делать все не халтурным способом (а это необходимо), так что если у вашей команды нет опыта в этой области, а время поджимает, то, вероятно, он не подойдет.

Linq2SQL слишком прост. Не знаю насчет Subsonic, но если вы собираетесь использовать ORM, это может быть хорошим балансом между быстрой разработкой и получением чего-то слишком мощного и сложного.

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

0
ответ дан 5 December 2019 в 15:21
поделиться

Если у вас уже есть хранимые процедуры, которые вам нужны, то, вероятно, не так уж много пользы от ORM. Если же нет, то мой опыт показывает, что работа с Linq to Entites намного быстрее, чем с традиционными хранимыми процедурами/сильно типизированными наборами данных, при условии, что вы умеете работать с запросами Linq.

Если вы не беспокоитесь об отображении на объектную модель, то Linq to SQL еще проще в использовании. Вам, конечно, не нужно использовать полную ОО-модель, чтобы воспользоваться преимуществами производительности.

Я не согласен с замечанием Малкольма о необходимости возвращения графов, если ORM поддерживает Linq, вы можете использовать проекцию для возврата плоского результата с только нужными вам данными с дополнительным преимуществом - запрос обычно проще, чем соответствующий SQL, поскольку вы можете использовать отношения, а не соединения.

Перейдя на эту технологию и освоившись с ней, я не вижу практически ни одной веской причины не использовать ее, все они поддерживают возврат к хранимым процедурам SQL, если вам это действительно необходимо. Однако придется пройти определенный путь обучения, и в данном случае это может сделать его нецелесообразным.

1
ответ дан 5 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

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