如何处理数据对象的多个视图?哪种设计模式可以接受?

时间:2010-12-21 17:51:11

标签: php oop design-patterns

我有一个人物。

class Person {
    private $name;

    ...
}

我需要能够改变它们在前端的显示方式(访问者有控制权)。例如,他们可以选择列表视图,网格视图,照片视图。

class PersonDisplay {
    public function displayList() {
        // Query database
        // Output html to display in list mode
    }

    public function displayPhoto() {
        // Query database
        // Output html to display in photo mode
    }
}

这是一种可以接受的方式来处理前端项目的呈现,还是我应该研究一个特定的设计模式来帮助我完成这项任务?有没有人有任何建议或想法,如果这可能会出错或者这可能会使维护成为一场噩梦?

Person对象只是一个与我正在使用的类似的例子。

2 个答案:

答案 0 :(得分:0)

我觉得很多人都会被“最佳实践浪潮”所淹没,在那里,精英程序员所说的话总是最好的。这是我的意见:

如果它有效且非常优雅,那就去吧。

只要您的解决方案不是“hackish”并且会随着您的应用程序使用量的增加而扩展,那么无论您想出什么都可以。

就最易维护的而言,你有两个根本不同的观点:网格和列表。如果你假设你每个都需要两个独立的HTML块,只要你没有上下复制代码,那就没关系了。如果您确实看到要复制大量代码,请在PersonDisplay中创建一个私有函数并将逻辑集中在那里。

坦率地说,看起来这段代码不会再增长太多,比如千行代码(最大值)。使用一些常识并不时地检查现实。如果您发现创建的函数太多,请合并一些函数。如果您正在编写重复的代码,请将该代码移到单独的函数中。你真的不能把这个搞砸了。

俗话说“不要为小东西出汗”。你可以不时地使用不完美的代码。

答案 1 :(得分:0)

看起来你想要(并且正在使用)的是Observer模式。 http://en.wikipedia.org/wiki/Observer_pattern#PHP

在此模式中,一个类包含您要存储的数据,另一个类包含您可以显示数据的不同方式的实现。