Куда относится код, который добавляет / редактирует модель?Модели или Контроллеры - PullRequest
0 голосов
/ 24 декабря 2010

Я использую инфраструктуру MVC (Zend Framework) с ORM (Doctrine 2).На первый взгляд ответом кажутся модели.Но, подумав, интересно, должно ли это быть в контроллере.Я ссылаюсь на такие функции, как

static function addProduct($name, $desc, $quantity, $price) {
    $product = new Product();
    $product->name = $name;
    $product->desc = $desc;
    $product->quantity = $quantity;
    $product->price = $price;
    $em->persist($product);
    $em->flush();
}

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

$product->setName($name);
$em->flush();

Но тогда, так как мне все равно нужен Entity Manager $em в моем контроллере, это будет похоже на код базы данных вконтроллеры уже?Значит ли это, что я делаю это неправильно?Или, может быть, я могу просто сделать что-то вроде

$product = new Product();
$product->setName($name);
$product->setDesc($desc);
$product->setQuantity($quantity);
$product->setPrice($price);
$em->persist($product);
$em->flush();

В моем контроллере?

Ответы [ 2 ]

2 голосов
/ 24 декабря 2010

Нет, я так не думаю, просто вы работаете в тяжелых контроллерах и легких моделях, но это сделает ваш код не пригодным для повторного использования, и вы собираетесь писать один и тот же код много раз в одном контроллере* и именно поэтому я люблю тяжелые модели и легкий контроллер

0 голосов
/ 24 декабря 2010

Вам не хватает сервисного слоя. Контроллер - это просто агент для управления объектами (моделями) и переменными. По моему мнению, классы моделей просто должны быть самопредставляющими моделями и не знать менеджера сущностей.

Я думаю, вам нужно создать промежуточный слой обслуживания. При сохранении / изменении модели контроллер вызывает объект службы для этого. Он просто говорит «изменить объект $ id с данными $ data», и сервисный уровень выполняет это действие. Результат (успех / неудача) передается обратно контроллеру для обработки этого результата.

...