Логика модели и логика сервисного уровня - PullRequest
4 голосов
/ 23 февраля 2012

Недавно я обнаружил, что я кодирую несколько слоев приложения для достижения чего-то очень простого.

Например,

$domain = new Application_Model_Domain(); 
$table = $domain->getMapper()->getDbTable();
$row = $table->find($id)->current();
$row->delete();

Все это можно легко сделатьв методе delete() в моем слое обслуживания.Тем не менее, я перенес эту функциональность в картограф модели:

# service layer
$domain = new Application_Model_Domain();
$domain->getMapper()->delete($id);

# mapper
function delete($id) {
  $table = $this->getDbTable();
  $row = $table->find($id)->current();
  $row->delete();  
}

Какой подход вы считаете наиболее подходящим?

Ответы [ 3 ]

1 голос
/ 23 февраля 2012

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

0 голосов
/ 23 февраля 2012

В общем, лучше иметь отдельный слой для доступа к данным.Это хорошо известный шаблон, называемый Уровень доступа к данным (DAO).Потому что, если задуматься, доступ к данным на самом деле не относится ни к модели, ни к уровням обслуживания.Уровень обслуживания может затем использовать уровень DAO.

0 голосов
/ 23 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...