Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Правильный код
 
 автор: speedsoft   (14.10.2012 в 14:42)   письмо автору
 
 

Хотел бы спросить у опытных программеров, как правильнее организовать код.
Есть 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х методов.

  Ответить  
 
 автор: Enter   (14.10.2012 в 21:36)   письмо автору
 
   для: 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);
    }

}
?>

  Ответить  
 
 автор: speedsoft   (14.10.2012 в 21:41)   письмо автору
 
   для: Enter   (14.10.2012 в 21:36)
 

не, это не вариант однозначно, т.к. ради экономии пары МБ в будущем (2байта на запись) я потрачу огромные ресурсы сервера на постоянное тягание количества комментариев у поста/юзера.

пока решил остановиться на 3ем варианте с агрегированием вызова 3х методов в одном. и из контроллера вызывать этот метод.

  Ответить  
 
 автор: Enter   (14.10.2012 в 21:55)   письмо автору
 
   для: speedsoft   (14.10.2012 в 21:41)
 

Ну, тоже верно.

  Ответить  
 
 автор: AndDriga   (20.10.2012 в 21:59)   письмо автору
 
   для: speedsoft   (14.10.2012 в 14:42)
 

Правильно будет получать счёчтики запросом с COUNT, а потом прикрутить поверх этого кеш :).

Если хочется правильно это делать и хранить несколько счётчиков, то оптимально будет иметь несколько моделей (Comment, User, Post) и с контроллера управлять ими всеми. Модель сама по себе - это кусок данных. В лучшем случае модель может знать о зависимостях, но в другие модели лезть не должна.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования