2

如果我不想公开我的对象的状态,但我仍然需要显示它(比如说在 HTML、XML 或 JSON 中),我将如何在 MVC 环境中执行此操作。有一个导出方法来导出一个简化的不可变对象(如果你愿意的话,一个“数据类”)是否有意义。添加与接口对话的渲染方法怎么样?有没有其他方法可以解决这个问题?

4

2 回答 2

1

render 方法最接近不暴露状态。另一种方法(Smarty 用户熟知)是提供视图非对象数据结构以供使用。

不过,值得一问的是,这些抽象和/或它们所服务的接口隐藏正在解决什么问题?如果你要做所有这些工作,IMO 你应该确保有一些工作可以为你节省。

于 2009-07-26T14:27:22.903 回答
0

封装的重点是隐藏实现。有其他对象确实需要知道的“状态”——有时一个对象的全部目的就是告诉这种状态。

例如,如果定义的有限自动机对象没有获取器来判断它是否处于最终状态,那将是毫无用处的。但是封装这些信息是如何在内部存储的肯定是有用的。

现在,getter 和 setter 的目标是为对象的状态属性提供接口,这可能与它的实际实现方式无关。当然,大多数时候这些属性是对象中的字段,而 getter 和 setter 只是浅壳。另一方面,您可以自由更改内部实现,因为 getter 和 setter 将确保接口兼容性。

但是,如果这些属性与实际实现过于相关,而与对象的含义无关,那么您应该考虑删除此类 getter 和 setter。

说了这么多,如果您需要向用户显示某些内容,那么这是其他对象需要了解的属性。出于多种原因,一个对象不应该关心如何显示自己。其中之一是它无法在不知道应用程序如何使用它的情况下知道它应该如何呈现,这会使 IT 对其他对象了解太多。

于 2009-07-26T14:38:28.063 回答