如果我不想公开我的对象的状态,但我仍然需要显示它(用HTML,XML或JSON来说),我将如何在MVC环境中进行此操作。 有一个导出方法导出一个愚蠢的不可变对象(如果你愿意的话,是一个“数据类”)是否有意义。 如何添加与界面对话的渲染方法呢? 有没有其他方法解决这个问题?
答案 0 :(得分:1)
渲染方法最接近未暴露状态。另一种方法(Smarty用户熟知)是提供视图非对象数据结构以使用。
但值得一提的是,这些抽象和/或隐藏它们的界面解决的问题是什么?如果你要做所有这些工作,IMO你应该确保有一些工作可以帮助你。
答案 1 :(得分:0)
封装的重点是隐藏实现。其他对象确实需要了解“状态” - 有时对象的整个目的正在告诉这种状态。
例如,拥有一个Defined Finite Automata对象是没有用的,因为它没有getter,无论它是否处于最终状态。但是封装内部存储信息的方式肯定是有用的。
现在,getter和setter的目标是为对象状态的属性提供一个接口,这可能与它实际实现的方式无关。当然,大多数情况下,这些属性是对象中的字段,而getter和setter只是浅壳。另一方面,您可以自由更改内部实现,因为getter和setter将确保接口兼容性。
但是,如果这些属性与实际实现过于相关,而与对象的内容无关,那么您应该考虑删除这些getter和setter。
说了这么多,如果你需要向用户展示一些东西,那么这是其他对象需要了解的属性。出于多种原因,对象不应该关注如何显示自身。其中之一就是它不知道如何在不知道应用程序如何使用它的情况下呈现它,这将使IT对其他对象了解太多。