高级接口有多好?

时间:2013-09-27 01:15:43

标签: oop domain-driven-design object-oriented-analysis

什么是最好的?使用接收一些参数并处理它的低级方法。 或者在对象中有一个高级接口,它的名字是什么?

例如:

低电平:

<?php

class Html {
    public function renderSelect($name, $options) {
        //
    }
}

class Repository {
    public function lists($repositoryName, $keyColumn, $valueColumn) {
        //
    }
}

# usage

$html->renderSelect('campaign_id', $repository->lists('campaigns', 'id', 'name'));
$html->renderSelect('account_id', $repository->lists('accounts', 'id', 'company'));

高级别:

<?php

class Html {
    public function renderSelect($name, $options) {
        //
    }

    public function renderCampaignsSelect() {
        return $this->renderSelect('campaign_id', $repository->listsCampaigns());
    }

    public function renderAccountsSelect() {
        return $this->renderSelect('account_id', $repository->listsAccounts());
    }
}

class Repository {
    public function lists($repositoryName, $keyColumn, $valueColumn) {
        //
    }

    public function listsCampaigns() {
        return $this->lists('campaigns', 'id', 'name');
    }

    public function listsAccounts() {
        return $this->lists('accounts', 'id', 'company');
    }
}

# usage

$html->renderCampaignsSelect();
$html->renderAccountsSelect();

值得注意的是,随着应用程序的扩展,高级选项将会增加,如果出现更多实体,则需要更多方法,例如:添加的赞助商将拥有renderSponsorsSelectlistsSponsors。但它的使用使代码非常流畅,我们可以为每种方法做不同的实现。

您怎么看?

感谢。

2 个答案:

答案 0 :(得分:1)

低级(细粒度)方法更可重用。高级(粗粒度)方法更易于使用。我认为越接近用户界面层,越多的高级方法越受欢迎,它可以隐藏实现细节,并且更容易阅读,如您所述。

答案 1 :(得分:1)

在通用API框架中使用您所谓的“低级”。一种设计用于不同领域的许多其他项目的库。 示例:Symfony,Zend Framework。

在域模型中使用您称之为“高级”的内容。旨在解决特定问题的项目。但不是把它称为高级别,而是说特定于域或使用无处不在的语言。 示例:phpBB3,Wordpress,您的网站生成带有自定义文本的猫的有趣图片。