2016-04-21 2 views
1

Я использую шаблон MVC в проекте PHP CodeIgniter, и мне интересно, как лучше всего создавать методы моделей, чтобы обеспечить читаемость кода и масштабируемость.PHP-модели: один или несколько сеттеров по действию базы данных?

Одним словом, лучше ли это сделать? :

public function set_account_state($new_state) { 
    // UPDATE a database record state to $new_state [0, 1 or 2] 
} 

Или это? :

public function reject_account() { 
    // UPDATE a database record state to 0 
} 

public function accept_account() { 
    // UPDATE a database record state to 1 
} 

public function pending_account() { 
    // UPDATE a database record state to 2 
} 

Или, может быть, другой способ?
Кроме того, есть ли хорошая практика для обозначения функций в таких случаях?

ответ

3
function set_account_state($state) 

Это лучше, если у вас есть только одна задача, а именно - изменение состояния. Но если в будущем вам придется выполнять разные задачи перед изменением состояния учетной записи, вам понадобятся три разных метода. Вы все еще можете использовать этот оригинальный метод для изменения состояния учетной записи и вызова ее из трех методов.

Именование функций должно включать глагол с существительными, чтобы сделать его более ясным. Функция pending_account() не так понятна, функция keep_account_pending() - это лучший способ назвать ее.

+0

Я согласен с этим ответом. Управление государственными счетами находится в одном месте, как и должно быть. Допустимые значения для '$ state' могут обслуживаться константами, тем самым улучшая читаемость и понимание того, какие значения аргументов должны быть/должны быть. Это не означает, что вы не можете или не должны создавать частные или защищенные «вспомогательные» функции в классе для обработки каждого конкретного состояния. Но публичный интерфейс должен быть одной функцией. – DFriend

2

На мой взгляд, второй способ - лучший способ.

Использование имен, указывающих, что сделает этот метод, может улучшить читаемость кода.

Поскольку ваш код становится больше, легко забыть, какое количество представляет состояние. Этого не происходит с именами, потому что метод с именем reject_account() указывает, что учетная запись будет отклонена лучше, чем число, переданное как аргумент функции.

Также, когда другие люди работают над вашим кодом, им будет легче понять, что происходит, когда вызывается метод. Сказав это, лучше понять, что учетная запись клиента принимается, когда вы видите метод, называемый accept_account(), тогда, когда вы видите set_account_state(1).

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