2013-09-27 4 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(); 

Примечательно вариант высокого уровня будет расти по мере приложений чешуи, если больше предприятий приходит , потребуются дополнительные методы, например: добавленный спонсор будет иметь renderSponsorsSelect и listsSponsors. Но его использование делает код очень гладким для чтения, и мы можем делать разные реализации для каждого метода.

Как вы думаете?

Спасибо.

ответ

1

Низкоуровневые (мелкозернистые) методы являются более многоразовыми. Более простые методы более грубой гранулярности более просты в использовании. Я думаю, что чем ближе к уровню пользовательского интерфейса предпочтение отдается более высокоуровневым методам, тем оно может скрывать детали реализации и их легче читать по мере того, как вы оцениваете.

1

Используйте то, что вы называете «низкоуровневым» в общем API, фреймворках. Это своего рода библиотеки, предназначенные для использования во многих других проектах в разных областях. Примеры: Symfony, Zend Framework.

Используйте то, что вы называете «высокоуровневым» в моделях домена. Проекты, предназначенные для решения конкретной проблемы. Но вместо того, чтобы называть его высокоуровневым, скажем, для домена или для использования вездесущего языка. Примеры: phpBB3, Wordpress, ваш сайт, генерирующий смешные картинки с кошками с настроенным текстом.

Смежные вопросы