|
|
|
| Хотел бы спросить у опытных программеров, как правильнее организовать код.
Есть MVC.
Задача сохранение комментария к публикации, обновление количества комментариев у поста, и обновление количества комментариев у пользователя.
и вот задача, как правильно сделать:
<?php
//КОНТРОЛЛЕР
//Сохранение комментария
public function savecomments(){
$data = $dummy->getData();
$model=$this->getModel('Blogs');
if ($model->saveComments($data)){
$model->updateUserCommentsCount($userId);
$model->updatePostCommentsCount($postId);
}else{
}
}
?>
|
либо
<?php
//КОНТРОЛЛЕР
//Сохранение комментария
public function savecomments(){
$data = $dummy->getData();
$model=$this->getModel('Blogs');
if ($model->saveComments($data)){
}else{
}
}
//МОДЕЛЬ
public function saveComments($data) {
//Cохраняем комментарий
// много кода
//обновляем комменты у юзера
$this->updateUserCommentsCount($user->id);
//обновляем комменты у публикации
$this->updatePostCommentsCount($postId);
}
?>
|
Первый удобнее с точки зрения читабельности, но огромный минус - можно забыть заапдейтить информацию
Во втором не забудешь обновить инфу, но как-то мусорка получается и тестировать будет не удобно.
Еще думаю над 3им вариантом - 3и метода в модели Сохранение коммента, апдейт юзера, апдейт поста. и вызывать 4ый метод, в котором будет происходить простая агрегация всех 3х методов. | |
|
|
|
|
|
|
|
для: speedsoft
(14.10.2012 в 14:42)
| | Наверное, я не понял задачу, но я бы не стал писать отдельные методы на обновления числа комментариев юзера и поста. Я бы сделал так: просто постил коммент, а уже при выводе комментов считал количество комментов поста и количество комментов пользователя. Это бы освободило базу данных от лишних записей, в которых хранятся данные о количествах. Но это только мое мнение.
<?
class Posts {
private $model;
function __construct() {
$this->model = new Model();
}
public function SavePosts($data){
$this->model->save($data);
}
public function GetComments($postId){
$comments = $this->model->GetComments($postId);
//можно просто вывести count($comments), чтобы узнать кол-во комментариев
//например, этот метод возвращает массив юзеров и количество их постов
$usersCount = $this->model->GetCountCommentsUsers();
$data['comments'] = $comments;
$data['usersCount'] = $usersCount;
$this->view->comments($data);
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Enter
(14.10.2012 в 21:36)
| | не, это не вариант однозначно, т.к. ради экономии пары МБ в будущем (2байта на запись) я потрачу огромные ресурсы сервера на постоянное тягание количества комментариев у поста/юзера.
пока решил остановиться на 3ем варианте с агрегированием вызова 3х методов в одном. и из контроллера вызывать этот метод. | |
|
|
|
|
|
|
|
для: speedsoft
(14.10.2012 в 21:41)
| | Ну, тоже верно. | |
|
|
|
|
|
|
|
для: speedsoft
(14.10.2012 в 14:42)
| | Правильно будет получать счёчтики запросом с COUNT, а потом прикрутить поверх этого кеш :).
Если хочется правильно это делать и хранить несколько счётчиков, то оптимально будет иметь несколько моделей (Comment, User, Post) и с контроллера управлять ими всеми. Модель сама по себе - это кусок данных. В лучшем случае модель может знать о зависимостях, но в другие модели лезть не должна. | |
|
|
|