Должен ли я заполнить переменные-члены данными из базы данных в конструкторе - PullRequest
0 голосов
/ 24 марта 2011

Я создаю объект, используя данные из таблицы базы данных, передавая первичный ключ строки данных, которую я хочу использовать для создания объекта.

Должно ли заполнение переменных-членов этого объекта иметь место в конструкторе или другом методе, вызываемом конструктором, или где-то еще вообще?

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

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

Ответы [ 2 ]

2 голосов
/ 24 марта 2011

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

1 голос
/ 24 марта 2011

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

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

...