логика приложения

Вопросы об установке, настройке и работе самого фреймворка

Re: логика приложения

Сообщение pirrat » 28 ноя 2008, 17:11

написал так к тому что Я возможно не правильно интерпретирую это понятие.
для меня бизнес-логика - алгоритмы работы с данными, т.е. в архитектуре mvc работой с данными занимаются модели и по этому я модель причисляю к слою бизнес логики...
CI(3проекта) -> Kohana (5 проектов) -> Yii (0)
pirrat
 
Сообщения: 114
Зарегистрирован: 02 фев 2009, 21:09

Re: логика приложения

Сообщение wordwild » 28 ноя 2008, 17:43

То есть получение моделью параметров из контроллера, посылка запроса базе, получение ответа и возвращение данных контроллеру называется алгоритмом? Я правильно понял интерпретацию?
wordwild
 
Сообщения: 167
Зарегистрирован: 10 фев 2009, 21:58
Откуда: Ирпень

Re: логика приложения

Сообщение pirrat » 28 ноя 2008, 19:33

не совсем, точнее совсем нет.
Модель - объект который представляет какую то сущность( студент,курс,институт , новость, комментарий, категория, да что угодно ещё ).
Он может менять свое состояние( менять свои свойства внутри методов, по запросу контроллера или другого внешнего источника), возвращать свое состояние(коллекцию(массив) запрошенных свойств).

К примеру имеем объект(Модель) Студент, у него есть свойства "фио" , средний балл" и тд
И есть методы для установки всех свойств, для расчета этого среднего балла и др

ну вот небольшой пример,как я вижу,разделение "обязанностей" модели и контроллера :
Пример:
Пользователь подает запрос,на внесение новой оценки для Студента, и при этом он должен получить его средний балл

Код: Выделить всё
  class Student_model {
private $fio;
private $ball; //средний балл
private $summ_ball = 0; //сумма балов
private $count_ball = 0; //кол-во баллов
private $curse;

function __construct($student_id) {
  //устанавливаем свойства объекта(например из файла или бд)
 $this->$summ_ball = 100;
 $this->$count_ball = 20;
 $this->fio = 'Иванов В.В.';

}
 //пересчитываем средний балл, и записываем его в свойство
function setBall($ball) {
$this->summ_ball = $this->summ_ball+$ball;
$this->count_ball = $this->count_ball +1;
$this->ball = $this->summ_ball/$this->count_ball;
}
//возвращает свойство "средний балл"
function getBall() {
return $this->$ball;
}

function save() {
 //сохраняем объект, например записываем его свойтсва в базу
}
}

class Student_controller {
//запрос на изменение балла студента 
function StudentBall($student_id, $new_ball ) {
     
    try 
{  //проверяем валидность данных
    validation::student($student_id);
    validation::ball($new_ball);
     } catch (Exception $e)  {
         die('не верный формат данных');
     }    
//создаем объект Студент
$student = new Student_model($student_id);
//меняем состояние объекта Студент
$student->setBall($new_ball);
//сохраняем Состояние объекта
$student->save();
//выводим информацию
$view = new View('successBall');
$view->setVar('ball', $student->getBall());
}
}
 


Т.е. в данном случае алгоритм пересчета среднего балла(по существу свой-ва объекта Student) заложен в методе самого класса.

Я просто часто встречал, что говорили так: модель работает с бд, т.е. методы тупо возвращают массив данных полученных из БД , ну или устанавливают какие то значения в бд и все. В моем понимании совсем это не так, и модель совсем может не работать с БД, надеюсь как я себе представляю понятие модели понятно из того что я написал выше!
Последний раз редактировалось pirrat 28 ноя 2008, 22:35, всего редактировалось 3 раз(а).
CI(3проекта) -> Kohana (5 проектов) -> Yii (0)
pirrat
 
Сообщения: 114
Зарегистрирован: 02 фев 2009, 21:09

Re: логика приложения

Сообщение wordwild » 28 ноя 2008, 20:06

Теперь понятно. Только это не логика приложения и не бизнес-логика.
wordwild
 
Сообщения: 167
Зарегистрирован: 10 фев 2009, 21:58
Откуда: Ирпень

Re: логика приложения

Сообщение pirrat » 28 ноя 2008, 21:10

Видимо меня подвели мои знания английского когда я читал об понятие бизнес-логика =)
Ок, соглашусь с тем что не правильно интерпретирую понятия.

По вашему, такое представление модели?
CI(3проекта) -> Kohana (5 проектов) -> Yii (0)
pirrat
 
Сообщения: 114
Зарегистрирован: 02 фев 2009, 21:09

Re: логика приложения

Сообщение Pavel » 29 ноя 2008, 10:49

Свое изучение CI начал с видео урока на оф.сайте, урок называется: "Hello World! Introduction to CodeIgniter" в этом уроке явно видно, что контролер они используют исключительно для передачи информации во вьювер, а в модели он полностью получает данные из бд и формирует уже готовый результат вплодь до форматирование. а во вьювере использует <?= $result ?> и все. И потакому принципу начал делать сайты, может быть я не прав?
Pavel
 
Сообщения: 6
Зарегистрирован: 21 ноя 2008, 15:12

Re: логика приложения

Сообщение pirrat » 29 ноя 2008, 17:02

хелоу ворд он на то и существует чтоб дать понять начинающим примерное представление что и как работает...

по пунктам
в этом уроке явно видно, что контролер они используют исключительно для передачи информации во вьювер

а если почитать доки, то явно видно что по мимо передачи инфы во вьювер, в контроллере так же валидируются данные и много чего ещё...
при этом совершенно не обязательно контроллер должен вызывать вьювер, простейшая ситуация: допустим происходит аякс запрос к определенному методу контроллера, и метод в данном случае будет не вызвать какой то вьюв,а допустим отдавать json объект полученный из модели!

в модели он полностью получает данные из бд и формирует уже готовый результат вплодь до форматирование

опять же в примитивном случае конечно и так можно сделать, но во первых почему обязательно модель должна работать с бд?, нам же может потребоваться взять данные из файла, или вообще запросом к soap серверу или ещё как то...
во вторых модель по хорошему должна отдавать данные во внутреннем представлении системы(массивы,объекты и тд) при этом желательно в чистом виде!
Простой пример: одна модель работает с сущностью новость и по одному из запросов она отдает текст новости, в одном месте нам понадобится вывести этот текст полностью, а в другом обрезать её до 100 символов... так вот модель в данном случае будет отдавать чистые данные, а обрезать если понадобится текст мы будем во вьюв , так как это логика отображения, иначе нам понадобится либо создавать доп свойство в модели чтоб она отдавала текст в нужном виде, либо создавать доп метод...
CI(3проекта) -> Kohana (5 проектов) -> Yii (0)
pirrat
 
Сообщения: 114
Зарегистрирован: 02 фев 2009, 21:09

Re: логика приложения

Сообщение mutabor » 29 ноя 2008, 18:46

Есть очень простой и крайне эффективный способ понять зачем пихать логику в модели и какую логику и как туда пихать. Начните писать для приложения юнит тесты. И как только начнете сразу все встанет на свои места и мозги начнут работать немного иначе и взгляд на процесс разработки несколько изменится. Тут важно именно не почитать, что такое тестирование, а применить на практике. Никакие теоретические выкладки и объяснения тут не помогут - кроме бесконечных холиваров это ни к чему не приведет. Только практика.
mutabor
 
Сообщения: 1
Зарегистрирован: 29 ноя 2008, 18:39

Re: логика приложения

Сообщение taral » 29 ноя 2008, 20:31

Всем большое спасибо. Как на меня дискуссия стала очень информативной.
Хотелось бы поговорить еще вот про что.
Мы передаем модели данные.
Я использую 4 способа передачи данных модели:
Код: Выделить всё
   function initialize($params = array())
   {
      if (count($params) > 0)
      {
         foreach ($params as $key => $val)
         {
            if (isset($this->$key))
            {
               $this->$key = $val;
            }
         }
      }
   }

Использую когда с передаваемыми данными не нужно осуществлять никакие операции.
Код: Выделить всё
   function set_id($id)
   {
      $this->id = $id;
   }

   function set_name($name)
   {
      $this->name = $name;
   }

Если передаваемые данные более важные. И с ними осуществляются операции. Например передаю время. В методе выясняю пору года и праспаиваю переменной модели.
Код: Выделить всё
   function get_news($page)
   {
      //
   }

Если параметр важен только для конкретного метода. Например номер страници новостей. Если номер страници я использую в других методах, я вношу его примером номер 1. А если еще нужно перевести номер страници в новость с которой нужно начать показ использую пример 2.
Код: Выделить всё
   function append()
   {   
                $insert['a'] = $this->input->post('aaa');
                $insert['b'] = $this->input->post('bbb');
                $this->db->insert('ssdf', $insert);
   }

Ну с этим примером думаю все ясно.
Я бы хотел услышать критику. Поскольку если есть способы делать "лучше" бы хотел использовать их=)
Аватара пользователя
taral
 
Сообщения: 166
Зарегистрирован: 03 ноя 2008, 21:01

Пред.

Вернуться в Общие вопросы по фреймворку

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0