Переключение на ORM - PullRequest
       25

Переключение на ORM

2 голосов
/ 22 августа 2008

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

Действительно ли это звучит правдоподобно с вашим опытом?
Возможно ли это или даже хорошая идея для поэтапного внедрения?
Каковы недостатки ORM?

Ответы [ 7 ]

3 голосов
/ 22 августа 2008

Я настоятельно рекомендую получить копию книги Майкла Фезера Эффективная работа с устаревшим кодом (под «Унаследованным кодом» «Перья» означает любую систему, которая не охвачена модульными тестами) Он полон хороших идей, которые должны помочь вам в рефакторинге и внедрении лучших практик.

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

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

Редактировать: исправлено имя автора

2 голосов
/ 22 августа 2008

Книга "Robert C Martin", написанная Майклом Фезерсом (в наши дни "Дядя Боб", кажется, является торговой маркой!), Обязательна.

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

Но это не проблема. Рефакторинг - это изменение дизайна без изменения функций (надеюсь, я не слишком сильно повредил смысл), чтобы вы могли работать гораздо шире.

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

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

Я бы также подумал о том, чтобы посмотреть на Рефакторинг Мартина Фаулера , который, очевидно, является окончательной работой над процессом.

1 голос
/ 22 августа 2008

Я работаю над большим приложением ASP.net, где мы недавно начали использовать NHibernate. Мы переместили большое количество доменных объектов, которые мы сохраняли вручную, на Sql Server вместо этого в NHibernate. Это немного упростило вещи и значительно облегчило их изменение со временем. Мы рады, что внесли изменения и используем NHibernate, где это уместно для многих наших новых работ.

0 голосов
/ 22 августа 2008

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

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

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

0 голосов
/ 22 августа 2008

Я серьезно думаю, что введение ORM в унаследованное приложение требует проблем (и может быть таким же, как полное переписывание).

Кроме этого, ORM - отличный способ, и его обязательно следует рассмотреть.

0 голосов
/ 22 августа 2008

Я слышал, что TypeMock часто используется для рефакторинга устаревшего кода.

0 голосов
/ 22 августа 2008

Правило рефакторинга таково. Проведите юнит-тесты.

Так что, возможно, сначала вы должны провести несколько юнит-тестов, по крайней мере, для основных / основных вещей.

ORM должен быть рассчитан на уменьшение кода шаблона. Время / трудность против ROI, чтобы быть предприимчивым, зависит от вас, чтобы оценить:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...