php - 如何创建一次写入属性?

标签 php oop design-patterns

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

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

我想避免的是在尝试编写时从 setter 中飞出异常,因为感觉就像您提供了一份您不打算保留的契约(Contract)。

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

  1. 在构造函数中传递任何写入信息。如果数据已经存在,构造函数将抛出异常。
  2. 在继承树中创建多个类,每个类代表处于其生命周期某个阶段的实体,并在需要时使用适当的 setter 。为所有读取操作添加一个集体接口(interface)。
  3. 默默地丢弃任何不适当的写入。

我对这些的看法: 1. 使构造函数高度不稳定,通常是个坏主意。 2.复杂性爆炸,并没有完全解决问题(你可以在同一个请求中连续调用setter两次) 3. 简单,但与异常(exception)情况相同的问题;这对您的客户来说是一个很大的欺骗。

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

最佳答案

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

关于php - 如何创建一次写入属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4502595/

相关文章:

.net - 如何使用静态成员创建.NET接口(interface)?

Java 程序设计布局建议?

php - 我需要编写相同的 mySQL 查询两次

php - 谷歌地图 - 获取 Php 数组中的点,到 map 上的点

java - 房间/节点导航和管理连接

java - 解释 OOP 中的封装

php - 如何获取GET请求体

php - is_array for MySQL Select Statement with PHP

c++ - 如何在具有相同父类的两个类之间共享代码?

bash - 如何在bash中用逗号分隔grep结果?