2013-09-27 55 views
0

什麼是最好的?使用接收一些參數並處理它的低級方法。 或者在對象中有一個高級接口,它完全按照它的名字說什麼?擁有高級接口有多好?

例如:

低級別:

<?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。但它的使用使得代碼非常流暢地閱讀,我們可以爲每種方法做不同的實現。

您認爲如何?

謝謝。

回答

1

低級(細粒度)方法更具可重用性。高級(粗粒度)方法更易於使用。我認爲越接近用戶界面層,更高級別的方法是首選,它可以隱藏實現細節,並且更容易閱讀,正如你所提到的。

1

在泛型API框架中使用您所謂的「低級」。一種旨在用於不同領域的許多其他項目的庫。例如:Symfony,Zend Framework。

在域模型中使用您稱之爲「高級」的內容。旨在解決特定問題的項目。但不要稱之爲高層次的,而是說特定領域或使用無處不在的語言。 例如:phpBB3,Wordpress,您的網站使用自定義文本生成有趣的貓圖片。