【问题标题】:PHP Design PatternPHP 设计模式
【发布时间】:2010-01-13 20:17:54
【问题描述】:

我有一个执行数据库操作并返回结果(数组,真,假)的类。我有另一个类,它通过在其构造函数中使用这个类来创建 JSON 字符串。 我们可以说这个类是一个适配器吗?或者只是包装器或...

Class Db
{
    public function getRows($params)
    {
        //...
    }
}


Class DbAdapter
{
    private $_dbh;
    public function __construct($dbh)
    {
        $this->_dbh = $dbh;
    }

    public function getJson()
    {
        return '{"key": "foo", "key2": ' . json_encode($this->_dbh->getRows($params)) . '}';
    }
}

谢谢

【问题讨论】:

    标签: php design-patterns oop


    【解决方案1】:

    我说它更多的是装饰器...http://en.wikipedia.org/wiki/Decorator_pattern

    【讨论】:

    • 其实一开始我以为是装饰器。但据我了解,装饰者应该向现有对象添加新的方法/技能。因此我无法决定。
    • 好吧,薄的是 IMO,这不应该直接应用于您的 DB 类,无论它是适配器还是装饰器,除非它只是一种返回格式(又名 DB::ASSOC、DB::JSON、DB: :OBJ 等)。否则,它的正确位置实际上是直接在对从getRow 返回的数组中的数据进行建模的类上或包装此类模型对象的装饰器上。
    【解决方案2】:

    发件人:http://www.fluffycat.com/PHP-Design-Patterns/Adapter/

    如果你想使用一个没有你需要的确切方法的类,并且你不能改变原来的类,适配器会很有帮助。适配器可以把你在原始类中可以访问的方法,改编成你需要的方法。

    如果您打算添加方法来补充另一个类,我会说您的代码有资格作为适配器。

    【讨论】:

    • 这是我不打算在另一个类中使用 DbAdapter 的问题。我们还能说它是一个适配器吗?
    【解决方案3】:

    我认为您不能选择一种模式并说这就是这里使用的模式。这是我在您的示例中看到的模式的小列表。欢迎发表评论。

    Delegation 因为DBAdapter 类将获取实际行的任务委托给 DB 类。

    Decorator 因为DBAdapter 类用附加功能装饰了 DB 类 - 以 JSON 形式输出输出。

    Adapter/Wrapper 如果您认为它允许其他客户端访问您的仅理解 JSON 或 XML 或其他格式的数据库行。

    但如果我们必须选择一个,我会说适配器。它以 PHP 数据结构的形式获取数据并将其转换为 JSON 表示形式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-25
      • 2012-01-07
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多