Что лучше? Работайте с низкоуровневыми методами, получая некоторые аргументы и работая с ним. Или у вас есть интерфейс высокого уровня в объектах, которые точно соответствуют его имени?Насколько хорошо иметь интерфейсы высокого уровня?
например .:
Низкий уровень:
<?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
. Но его использование делает код очень гладким для чтения, и мы можем делать разные реализации для каждого метода.
Как вы думаете?
Спасибо.