Как расширить существующую модель Ruby для поддержки персистентности - PullRequest
0 голосов
/ 07 июля 2011

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

Чтобы дать вам немного фона, мои объекты модели обычно просто создаются из файлов XML или JSON, но теперь мне нужно сохранить их в реляционной базе данных.

Существуют ли общие шаблоны для этой проблемы? Должен ли я написать новые объекты модели, которые поддерживают постоянство и отображение между моими устаревшими объектами и объектами новой модели, или я должен расширить существующие объекты для представления в базе данных?

Любые советы, подсказки и ссылки приветствуются.

1 Ответ

1 голос
/ 07 июля 2011

Я не уверен, что полностью понимаю ваш вопрос.Однако библиотеку DataMapper можно очень легко использовать для добавления постоянства к уже существующей объектной модели по факту по двум причинам:

  1. Она не зависит от наследования классов(как, например, ActiveRecord), но с наследованием миксина, и вы можете наследовать от любого количества миксинов, которое вам нравится, что означает, что вам не придется изменять дерево наследования вашей объектной модели, просто чтобы добавить в него DataMapper.
  2. Объектно-реляционное отображение объявлено явно в модели, а не выведено из хранилища данных.Это означает, что вы можете иметь очень сложные отображения между хранилищем данных и вашими моделями, в отличие от довольно простой таблицы 1: 1 == класс, строка == объект, столбец == отображение атрибута ActiveRecord.

Теперь, удастся ли вам сохранить постоянство аспекта полностью ортогональным, и, например, в отдельной жемчужине, это другой вопрос.Вы могли бы действительно хранить его в отдельной библиотеке, которая просто открывает все классы моделей и include DataMapper::Resource и объявляет все свойства.Это позволит вам по-прежнему развертывать свой драгоценный камень объектной модели без постоянства, но самоцвет персистентности, очевидно, будет довольно тесно связан с драгоценным камнем объектной модели.

...