如何创建一次写入属性?

时间:2010-12-21 18:25:19

标签: php oop design-patterns

我遇到了一般的OOP问题,无法找到正确的方法来表达我的问题。

我想创建一个类,它为我提供了一个我可以写入一次的对象,将其保存到存储中,然后无法更改属性。 (例如:发票信息 - 一旦写入存储,这应该是不可变的)。并非所有信息都可以立即获得,在对象的生命周期中,信息会被添加。

我想避免的是在尝试写作时出现异常情况,因为感觉就像是在提供一份你不打算保留的合约。

以下是我到目前为止所考虑的一些想法:

  1. 传入构造函数中的任何写入信息。如果数据已存在,构造函数将抛出异常。
  2. 在继承树中创建多个类,每个类在其生命周期的某个阶段表示实体,并在需要时使用适当的setter。为所有读取操作添加一个集合接口。
  3. 默默地丢弃任何不适当的写作。
  4. 我对这些的看法: 1.使构造函数高度不稳定,通常是个坏主意。 2.爆炸的复杂性,并没有完全解决问题(你可以在同一个请求中连续两次调用setter) 3.容易,但与例外情况相同;这对你的客户来说是一个很大的欺骗。

    (仅供参考:我目前正在使用PHP5工作 - 尽管我怀疑这是一个普遍的问题)

1 个答案:

答案 0 :(得分:1)

有趣的问题。我认为你最好的选择是#1,但我不确定我是否会在构造函数中做到这一点。这样,客户端代码可以选择它想要对异常做什么(抑制它们,处理它们,将它们传递给调用者等等)。如果您不喜欢异常,则可以将写入移至write()方法,如果写入成功则返回true,否则返回false