
Кирилл
26.05.2016
06:53:35

Oleg
26.05.2016
06:53:40
не подменяй понятия - модель это и данные в том числе

Кирилл
26.05.2016
06:54:35
не могу уловить суть вашего спора, вот и уточняю)

Google

Andrey
26.05.2016
06:55:32
)))
именно модель

Oleg
26.05.2016
06:58:08
именно модель
да вообще че она в MVC то забыла
проблема в том что ты считаешь моделью одну строчку из таблицы тобишь один экземпляр класса
но этот один экземпляр класса может иметь внутри сто тыщь массивов и что он из за этого моделью не может быть?

Andrey
26.05.2016
07:00:32
мда
ты мне утверждал что массив является моделью

Oleg
26.05.2016
07:02:22
ты мне утверждал что массив является моделью
так давай развивать
класс содержит один массив - модель?
зачем делать класс если можно обезличенный массив гонять?
от того что я массив не обернул я не могу его моделью назвать? где логика

Andrey
26.05.2016
07:04:40
тут ты прав, логики нет заворачивать массив в класс. с этим никто и не спорит
и он от этого моделью не станет

Oleg
26.05.2016
07:06:09
смысл в том что модель это в первую очередь данные - а вот как ты их носишь это твое дело - хочешь в классе хочешь в массиве, пакете или чемодане - дело твое - но то что ты принес в контроллер - это и есть модель

Кирилл
26.05.2016
07:08:08
Ну например, есть таблица в базе данных Article. Есть у нас и модель соответсвующая Article со всеми аттрибутами и прочим.
Есть и ArticleController.
В самой модели, методов будет немного, они будут обращаться к б.д. и вытягивать то, что просит метод. А вот все манипуляции над моделями будут производиться именно в контроллере.
А во вьюшке же могут быть только экземпляры модели. (уже обработанные в котроллере). Т.е. не "тусуются" модели и там и там:) Во вьюшке - экземпляры, а контроллер создает эти самые экземпляры

Andrey
26.05.2016
07:08:24
"модель это в первую очередь данные" интересно...я думал модель что-то достает из бд, и что-то передает из контроллера...а она оказывается себя по рукам пускает

Google

Oleg
26.05.2016
07:09:40

Andrey
26.05.2016
07:10:29
репозиторий...весь чтоли?

Кирилл
26.05.2016
07:10:58
своими сравнениями вы меня пугаете

Oleg
26.05.2016
07:12:00
так вижу недопонимание - модель в базу не ходит - она наполняется данными с помощью например ORM

Andrey
26.05.2016
07:12:41
что такое orm ?

Oleg
26.05.2016
07:13:19
технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных».

Кирилл
26.05.2016
07:14:51
напрямую не ходит, естесственно. Класс-модель описывает параметры, которые должен/может содержать экземпляр этой самой модели

Oleg
26.05.2016
07:14:59
Object-Relational Mapping - не слышал? или ты думал что это и есть модель))

Кирилл
26.05.2016
07:23:11
Какая еще модель "пришедшая"?)
куда пришедшая?) в контроллер?)

Oleg
26.05.2016
07:23:44

Andrey
26.05.2016
07:24:18
видимо я что-то упустил...или не догоняю...про orm я конечно слышал, и не считаю ее моделью...
даже не знаю правильно ли я пишу код...вот пример реализации...
модель постов:
namespace app\models;
use Core\Model;
class Posts extends Model
{
protected $table = 'posts';
}
абстрактная модель точнее подключение orm :
namespace Core;
abstract class Model
{
protected $table = '';
public function __construct()
{
$conf = parse_ini_file('app/config/config.conf');
\ORM::configure(array(
'connection_string' => '' . $conf['driver'] . ':host=' . $conf['host'] . ';dbname=' . $conf['name'] . '',
'username' => $conf['username'],
'password' => $conf['password']
));
\ORM::configure('driver_options', array(\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
}
public function get($id)
{
return \ORM::for_table($this->table)->find_one($id);
}
public function getAll()
{
return \ORM::for_table($this->table)->find_many();
}
}


Кирилл
26.05.2016
07:24:47
не существовало модели пока контроллер её не создал, нет никакой "пришедшей". Было только описание будущей модели)

Andrey
26.05.2016
07:25:48
контроллер
namespace App\Controllers;
use app\models\Posts;
use Core\View;
class MainController
{
public function indexAction()
{
$posts = new Posts();
$view = View::init();
echo $view->render('pages/posts/all.twig', [
'title' => 'Блог',
'posts' => $posts->getAll()
]);
}
}

Кирилл
26.05.2016
07:25:50
контроллер создал экземпляр модели, чтобы понятнее было

Andrey
26.05.2016
07:26:23
вид:
{% block content %}
{% for post in posts %}
<h2 class="blog-post-title"><a href="/post/{{ post.id }}">{{ post.title }}</a></h2>
<p class="blog-post-meta">{{ post.date | date }}</p>
{{ post.content[:150] }}
{% endfor %}
{% endblock %}

Кирилл
26.05.2016
07:27:00
ну и чего не так в твоем коде то?:)

Andrey
26.05.2016
07:27:13
хз, может я не прав...мне Олег крышу свернул

Google

Oleg
26.05.2016
07:28:31
Основой паттерна является отделение модели данных приложения, его логики и представления данных друг от друга. Таким образом, следуя правилу «разделяй и властвуй», удается строить стройное программное обеспечение, в котором, во-первых, модель не зависит от представления и логики, а во-вторых, пользовательский интерфейс надежно отделен от управляющей логики.

Кирилл
26.05.2016
07:29:51
Да все норм:) Самое главное в MVC это разделять между собой логику модели, контроллера и вьюшки. Модель - описывает будущий экземпляр модели. Контроллер - создает этот самый экземпляр, обрабатывает и возвращает во вьюшку. Вьюшка только использует полученные данные

Oleg
26.05.2016
07:30:07
где тут сказано что модель это не массив? модели данных приложения довольно расплывчатое понятие - это может быть как все данные из базы или одна буква - и в обоих случаях это модель
и именно модель приходит в контороллер
точнее контроллер ее вызывает и она приходит))

Andrey
26.05.2016
07:31:26
class Model
{
public function get_data()
{
bla bla bla
}
}
да это модель и в нее кидаешь массив)

Oleg
26.05.2016
07:32:44

Andrey
26.05.2016
07:33:26
точнее в массив данных
и обозвал этот массив данных моделью

Oleg
26.05.2016
07:34:35

Oleg
26.05.2016
07:35:45
модель данных приложения - Это что? мои данные лежат в массиве например

Andrey
26.05.2016
07:36:21
class Model_Portfolio extends Model
{
public function get_data()
{
return array(
array(
'Year' => '2012',
'Site' => 'http://DunkelBeer.ru',
'Description' => 'Промо-сайт темного пива Dunkel от немецкого производителя Löwenbraü выпускаемого в России пивоваренной компанией "CАН ИнБев".'
),
array(
'Year' => '2012',
'Site' => 'http://ZopoMobile.ru',
'Description' => 'Русскоязычный каталог китайских телефонов компании Zopo на базе Android OS и аксессуаров к ним.'
),
// todo
);
}
}

Oleg
26.05.2016
07:36:24
или мои данные это и есть массив

Andrey
26.05.2016
07:36:41
это что?

Oleg
26.05.2016
07:39:13
это что?
вот ты странный - у тебя же не возникает спора что массив это не array - хотя называются по разному
показал мне самописный класс у которого имя Модель - что это доказывает? что модель должна только так выглядеть?

Кирилл
26.05.2016
07:39:41

Andrey
26.05.2016
07:40:06
идем дальше

Google

Andrey
26.05.2016
07:40:11
class Controller_Portfolio extends Controller
{
function __construct()
{
$this->model = new Model_Portfolio();
$this->view = new View();
}
function action_index()
{
$data = $this->model->get_data();
$this->view->generate('portfolio_view.php', 'template_view.php', $data);
}
}

Кирилл
26.05.2016
07:40:34
а вот
а вот new - и создает экземпляр модели. т.е. $model1 = new Article($id1); $model1->body = "lol"; $model2 = new Articke($id2); $model2->body = "ololo";

Oleg
26.05.2016
07:43:13
идем дальше
я же не против того что из базы данные идут в контроллер а из него во вьюшку
вижу и ты не против
ты против того чтоб эти данные назвать моделью
я интересуюсь почему?

Кирилл
26.05.2016
07:43:58
потому что эти данные не являются экземпляром какой-либо модели

Oleg
26.05.2016
07:44:02
точнее в зависимости от того как эти данные выглядят - то они модель а то и нет - в общем мутно

Andrey
26.05.2016
07:44:22
модель забирает данные из бд, как она может быть данными?

Кирилл
26.05.2016
07:44:28
нет какой мути:) Все предельно прозрачно:)

Oleg
26.05.2016
07:45:10

Admin
ERROR: S client not available

Oleg
26.05.2016
07:45:48
а мы их маппим в модель

Кирилл
26.05.2016
07:46:30
мужики, надоели уже, чес слово. На одном месте толчетесь

Andrey
26.05.2016
07:47:44
Кирилл, спасибо, всё разьяснил, пойду я работать

Кирилл
26.05.2016
07:48:58
И я пойду) Времени чот много тут оставил) Пиши, коль чего

Oleg
26.05.2016
09:24:03
ну и выдержка из википедии как раз про трактовку модели как средство доступа к базе
Начинающие программисты (особенно в веб-программировании, где аббревиатура MVC стала популярна) очень часто трактуют архитектурную модель MVC как пассивную модель MVC. В этом случае модель выступает исключительно совокупностью функций для доступа к данным, а контроллер содержит бизнес-логику. В результате код моделей по факту является средством получения данных из СУБД, а контроллер представляет собой типичный модуль, наполненный бизнес-логикой, или скрипт в терминологии веб-программирования. В результате такого понимания MVC разработчики стали писать код, который Pádraic Brady, известный в кругах сообщества Zend Framework, охарактеризовал как ТТУК — «Толстые тупые уродливые контроллеры» (Fat Stupid Ugly Controllers)


Кирилл
26.05.2016
10:06:38

Oleg
26.05.2016
10:08:54

Maxim
26.05.2016
10:09:39
Ребята, вклинюсь в дисскусиию. Так а где размещать бизнес-логику? Если контроллер - это чисто валидатор данных с вьюхи?

Google

Maxim
26.05.2016
10:10:10
Получается тогда надо вводить 4-ю сущность

Oleg
26.05.2016
10:11:15

Maxim
26.05.2016
10:11:51
первая модель - это объектный маппинг на БД?

Oleg
26.05.2016
10:14:12
а вообще она и счас такая же но из-за чего все спорят про толсые модели или контроллеры - что немогут понять что лучше
model <> (logic <> controller <> viewmodel) <> view
или
(model <> logic) <> (controller <> viewmodel) <> view

Maxim
26.05.2016
10:49:09
Кирилл уже печатает минут 15


Кирилл
26.05.2016
10:50:05
не нужно смотреть на паттерн с точки зрения какойто конкретной реализации - есть мнение что модель это очень большая штука включающая в себя и базу данных и бизнес логику - и создавать экземпляр этого монстра каждый раз не дешевое удовольствие
Всё зависит от конкретного проекта - монстр там будет или нет. А для чего тогда создавать модель, пусть даже и "монстра", если не вызывать её?)
Понятно что модель ни в коем случаем не должна ограничиваться просто описанием набора параметров, которые будут присутствовать в ней. Контроллер, по хорошему - это, "распределитель", который направит куда нужно, исходя из GET запроса, например, вызовет нужный метод модели. Логика модели - только в модели. Контроллеру - "контроллировать" модель (вот такая тафталогия). Женщинам - цветы, детям - мороженое и не перепутай.
Всё правильно вы, Олег, говорите за исключением одной очень серьезной вещи - массив - это никак не модель ;) Есть класс описывающий модель, содержащий в себе все её методы. Есть экземпляр модели, который вы создали через контроллер и, например, целиком направили во вьюшку. Как было он экземпляром модели, так и остался, т.е. вызов во вьюшке $model->getName(); сработает. А вот если вы контроллером передали во вьюшку не модель, а массив данных $data = ["name" => "Lolo", "fake" => true], то кроме этих данных у вас ничего больше и нет.
да работаю параллельно:)
запятых то запятых наставил) Благо что в программировании это не требуется)


Oleg
26.05.2016
10:53:25
Всё зависит от конкретного проекта - монстр там будет или нет. А для чего тогда создавать модель, пусть даже и "монстра", если не вызывать её?)
Понятно что модель ни в коем случаем не должна ограничиваться просто описанием набора параметров, которые будут присутствовать в ней. Контроллер, по хорошему - это, "распределитель", который направит куда нужно, исходя из GET запроса, например, вызовет нужный метод модели. Логика модели - только в модели. Контроллеру - "контроллировать" модель (вот такая тафталогия). Женщинам - цветы, детям - мороженое и не перепутай.
Всё правильно вы, Олег, говорите за исключением одной очень серьезной вещи - массив - это никак не модель ;) Есть класс описывающий модель, содержащий в себе все её методы. Есть экземпляр модели, который вы создали через контроллер и, например, целиком направили во вьюшку. Как было он экземпляром модели, так и остался, т.е. вызов во вьюшке $model->getName(); сработает. А вот если вы контроллером передали во вьюшку не модель, а массив данных $data = ["name" => "Lolo", "fake" => true], то кроме этих данных у вас ничего больше и нет.
все зависит от конкретного проекта? но в любом случае массив не может быть моделью? странно звучит


Владислав
26.05.2016
10:54:11
Добрый день)

Кирилл
26.05.2016
10:54:28
это я про монстра же) Размер модели будет зависеть от проекта. Глупо даже аксиому такую пояснять:)
Доброго дня)

Oleg
26.05.2016
10:55:11

Кирилл
26.05.2016
10:55:23
надеюсь это шутка
где вы описываете модель?

Oleg
26.05.2016
10:56:19

Кирилл
26.05.2016
11:00:29
ну так чего? Где модель то описываете? Не так:
class Article extends model {
/*code*/
}
?)

Oleg
26.05.2016
11:02:01

Andrey
26.05.2016
11:03:07
Олег, у вас свой я.п. ?

Кирилл
26.05.2016
11:05:00

Oleg
26.05.2016
11:05:47
Олег, у вас свой я.п. ?
да причем тут язык вообще? паттерн что описан на конкретном языке и в нем сказано что массив моделью не может быть? я вот немогу понять почему class qqq{$id=1;} может быть моделью а [id=>1] уже все не может - откуда это все берется - где это описано?