我遇到了一般的 OOP 问题,找不到正确的方式来表达我的问题。
我想创建一个类,为我提供一个我可以写入一次的对象,将其保存到存储中,然后无法更改属性。 (例如:发票信息 - 一旦写入存储,这应该是不可变的)。并非所有信息都立即可用,在对象的生命周期中,信息会被添加。
我想避免的是在尝试编写时从 setter 中飞出异常,因为感觉就像您提供了一份您不打算保留的契约(Contract)。
以下是我到目前为止考虑过的一些想法:
- 在构造函数中传递任何写入信息。如果数据已经存在,构造函数将抛出异常。
- 在继承树中创建多个类,每个类代表处于其生命周期某个阶段的实体,并在需要时使用适当的 setter 。为所有读取操作添加一个集体接口(interface)。
- 默默地丢弃任何不适当的写入。
我对这些的看法: 1. 使构造函数高度不稳定,通常是个坏主意。 2.复杂性爆炸,并没有完全解决问题(你可以在同一个请求中连续调用setter两次) 3. 简单,但与异常(exception)情况相同的问题;这对您的客户来说是一个很大的欺骗。
(仅供引用:我目前正在使用 PHP5 - 尽管我怀疑这是一个普遍问题)
最佳答案
有趣的问题。我认为你最好的选择是#1,但我不确定我会在构造函数中这样做。这样客户端代码就可以选择它想对异常做什么(抑制它们,处理它们,将它们传递给调用者等等)。如果你不喜欢异常,你可以将写入移动到 write()
方法,如果写入成功则返回 true
和 false
否则。
关于php - 如何创建一次写入属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4502595/