Я начинаю новый проект, и недавно я нашел проект активизации замкового проекта, который выглядит как БОЛЬШОЕ решение, но в то же время он выглядит как нечто реальное нетрадиционное. Мне было интересно, это чувство приходит от изучения чего-то нового (и я должен просто привыкнуть к нему) или это действительно плохая практика?Является ли ActiveRecord плохой практикой?
ответ
ActiveRecord - это шаблон дизайна, впервые названный Мартином Фаулером в Шаблоны корпоративных прикладных архитектур. Он довольно распространен и широко используется в популярном Ruby framework Rails.
Это контрастирует с более обычным стилем развития в мире .Net, который должен использовать DAO, и это, возможно, объясняет, почему вам неловко.
Предложение: прочитайте исходный код для некоторых приложений Ruby on Rails, которые похожи на ваши собственные проекты, и оцените, как вам нравится стиль дизайна, который является результатом интенсивного использования ActiveRecord.
Это неплохое решение, но оно имеет свои недостатки.
В шаблонах архитектуры корпоративных приложений Мартин Фаулер описывает несколько способов проектирования приложений, построенных на базе базы данных. Эти методы отличаются тем, как приложение отделено от базы данных. Он также описывает, что более развязка делает более сложные приложения возможными. Active Record описывается как способ разработки более простых приложений, но для приложений с более сложным поведением вам нужна модель домена, которая не зависит от базы данных и что-то вроде объектно-реляционного сопоставителя между ними.
ActiveRecord очень хорошо работает в Ruby, но его легко переносить на все языки. Центральным подвигом AR является метафора table = class, row = instance. Это выглядит довольно элегантно в Ruby, потому что классы также являются объектами. В других языках классы обычно представляют собой особый тип конструкции, и тогда вам нужно пройти всевозможные обручи, чтобы они работали, как должным образом. Это устраняет некоторые естественные ощущения, которые он имеет в Ruby.
Нет, это не плохая практика. Даже в .NET это довольно хорошо зарекомендовавший себя шаблон. SubSonic (http://subsonicproject.com) и LINQ to SQL также используют шаблон.
Реализации шаблона, такие как Subsonic, отлично подходят для быстрого и легкого создания уровня доступа к данным, который управляет CRUD для вашего приложения.
Это не значит, что это хорошее решение для всех систем. Для больших сложных систем вы, вероятно, хотите иметь меньшую связь с хранилищем данных.
Смесь объекта домена с уровнем обслуживания является самой большой плохой практикой (если вы видите это как плохую практику). Вы в конечном итоге вызываете user.Save(), что означает, что если вы хотите изменить ORM, вы полагаетесь на этот шаблон. В 2 альтернативы слой ака набора классов фасадных выполнять свои операции CRUD, или поместить это внутри объекта домена, как что-то вроде
User.Service.Save(user);
Если вы используете .NET, то ActiveRecord, очевидно, на основе ActiveRecord, Coolstorage, Subsonic и few others.
Часть того, что мне показалось странным в использовании ActiveRecord, должно было наследовать от ActiveRecordBase<T>
и иметь все эти методы сохранения на вашем объекте (Save
и т. Д.).
Но, оказывается, вам не обязательно! Вместо того, чтобы, скажем:
[ActiveRecord]
class Customer : ActiveRecordBase<Customer> { }
Вы можете просто
[ActiveRecord]
class Customer : inherit from whatever you want { }
, а затем использовать ActiveRecordMediator<Customer>
. Он имеет в основном те же статические методы, что и у ActiveRecordBase<T>
, но таким образом вам не нужно загромождать вашу объектную модель ими. Если вам не нужны различные защищенные вызовы событий метода в ActiveRecordBase<T>
, это упростит ситуацию.
Я думаю, что ActiveRecord не имеет ничего общего с Замком, и поэтому ответы на этот вопрос Does the ActiveRecord pattern follow/encourage the SOLID design principles? могут быть более информативными для многих.
- 1. Является ли это плохой практикой?
- 2. Является ли CORS плохой практикой?
- 3. Является ли [var = modify (var)] плохой практикой?
- 4. Является ли несколько HttpAsyncClient считаться плохой практикой?
- 5. Является ли это плохой практикой базы данных?
- 6. Является ли это плохой практикой MVVM?
- 7. Является ли такой метод bool плохой практикой?
- 8. Является ли дескриптор заголовка typedef плохой практикой?
- 9. Является ли это плохой практикой кодирования?
- 10. Является ли циклическая ссылка плохой практикой?
- 11. Является ли плохой практикой использование созависимых классов?
- 12. Является ли это плохой практикой для droppable?
- 13. Являются ли фреймы «плохой практикой»?
- 14. Почему переменная общедоступная видимость является плохой практикой
- 15. Является ли #include <../header.h> плохой практикой в C++?
- 16. Является ли это плохой практикой Javascript, которую я здесь делаю?
- 17. Является ли несколько кнопок отправки на HTML-форме плохой практикой?
- 18. Является ли многозначный параметр хранимой процедуры просто плохой практикой?
- 19. Является ли плохой практикой для создания стиля, например, кнопки?
- 20. Является ли плохой практикой иметь несколько классов в одном файле?
- 21. Является ли ссылка и изменение Game1 плохой практикой?
- 22. Является ли хранение моделей сущностей Framework плохой практикой?
- 23. Является ли это плохой практикой программирования в Android?
- 24. Является ли плохой практикой кодирования для связывания модифицированных модулей?
- 25. Является ли плохой практикой для приложения читать собственный журнал?
- 26. Является ли плохой практикой определять параметры класса через массив?
- 27. Является ли NonShared DbContext в MVC плохой практикой?
- 28. Является ли это плохой практикой для теневых переменных обратного вызова?
- 29. Является ли typedef внутри тела функции плохой практикой программирования?
- 30. Является ли именование переменных после их типа плохой практикой?
Я был бы признателен, если бы вы могли использовать некоторые примеры, в которых использование активной записи является плохим решением. – Orentet