我应该使用构造函数中的数据库中的数据填充成员变量

时间:2011-03-24 19:42:02

标签: orm activerecord constructor anemic-domain-model

我正在使用数据库表中的数据构建一个对象,方法是传递我想用来构造对象的数据行的主键。

此对象的成员变量的总体是否应该在构造函数或构造函数或其他地方调用的另一个方法中发生?

如何在rails ActiveRecord和其他ORM中完成这项工作,我怀疑框架为每个字段调用了一组setter,但我真的不想要一个复杂的框架来完成所有这些,所以最好的做法是什么扮演我自己的简单机制?

注意:请记住,我不想创建大量无法管理自己状态的贫血数据模型。

2 个答案:

答案 0 :(得分:2)

许多语言和框架遵循的安全规则是永远不要在构造函数中执行危险的事情(读取:可能抛出异常的操作),因为您通常无法抛出这些异常或以其他方式优雅地响应它们。我的建议是在类之外执行数据库操作,然后使用自定义构造函数来提取对象中所需的字段。在该构造函数中,您将设置(通过简单赋值)您的内部成员。

答案 1 :(得分:1)

我没有将管理持久性置于贫血类别中。它属于一个单独的持久层。我不会把它放在构造函数中。

我认为当对象只关心状态并且没有嵌入商业智能来操纵它时会导致贫血症。更多地考虑到这一点;不要担心持久性。