模型类属性应该是私有还是公共?

时间:2013-11-15 09:12:51

标签: java php oop model

我长期以来一直怀疑这个问题。

我的Model类应该具有私有还是公共属性? (下面的代码是用PHP编写的,但问题一般适用于任何语言)

class Xyz extends Model {

    public function __call() {

    }

    public $description;

    public $title;
}

在上面的示例中,我有公共属性$ description和$ title。我应该私有吗?

我更新我的模型如下

$x = new Xyz();
$x->title('Hello');
$x->description('Blah blah');
$x->save();

我可以使用魔术方法__call更新并获取它们。那么为什么我们需要让它们公开呢?我可以把它们变成私人的。但是当我看到所有框架都将模型属性保持公开时。

有什么想法吗?

更新

在答案中,每个人都在说跟随封装并使用私有方法。好但是没有人能解释为什么有些PHP框架公开了模型属性?应该有一些原因,不是吗?

4 个答案:

答案 0 :(得分:2)

根据OOP,我们需要遵循封装。请设置您的属性private并拥有public访问者和变更者。但是,这取决于你的访问者和mutator也可以有其他修饰符。但是,属性应始终为private

答案 1 :(得分:1)

类字段应始终为私有字段。这些领域的吸气剂和制定者应该是公开的。除了标准之外,以这种方式使用它也是很好的,这样你就可以控制你想要的客户端类想要设置的私有字段的值。

例如,如果要将对象持久保存到数据库,并且声明一列不为null,并且您不确定您的客户端类是否真的返回非null值,则可以处理null检查setter内部,以便您将要持久保存到db的值不包含空字段,就像数据库表所需要的那样。

答案 2 :(得分:0)

您必须在模型类中将所有属性设为private,如果必须封装其值,则必须使用适当的getters and setters来获取和设置其值。

答案 3 :(得分:0)

根据OOP封装原则,字段应始终是私有的。现在的问题是getter和setter访问器方法。

吸气剂通常可以安全地公开。唯一的缺点是你必须保持版本之间的向后兼容性,因为这将是该类公共合同的一部分。因此,如果该字段是实现的一部分而不是接口,那么您可能希望保护它。

至于设定者,更好的问题是如果要创建一个或不。如果你想保持你的类不可变(或至少它的某些部分)具有它的所有优点和缺点,那么你根本就不会创建一个setter。