Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Статьи (http://www.flasher.ru/forum/forumdisplay.php?f=101)
-   -   Хорошее MVC (http://www.flasher.ru/forum/showthread.php?t=138349)

Котяра 27.04.2010 17:53

Цитата:

Сообщение от dimarik (Сообщение 901843)
Откуда такая ненависть к абстракции? В продукте лучше не упоминать о "concrete product" всуе. Здесь подойдет какой-нибудь Event.COMPLETE, вместо ХУМАНМОДЕЛ.МЕРТВ.

Я уж молчу о нововведении "addUpdateFieldListener". Чем EventDispatcher не угодил? Не следует множить сущее без необходимости.

Код AS3:

addUpdateFieldListener (ИМЯ_ПОЛЯ_МОДЕЛИ, слушатель);

вместо
Код AS3:

addEventListener (ИМЯ_СОБЫТИЯ_ИЗМЕНЕНИЯ_ПОЛЯ_МОДЕЛИ, слушатель);

поэтому и
Код AS3:

HumanModelField.IS_DEAD=="isDead".

Никакого "умножения сущностей" нет - есть элементарнейшая лень, которая - двигатель прогресса. :) Да - не по-человечески, не по ООПовски, но код читабельный и понятный.
Появились мысли сделать систему на сигналах, а не на событиях - там наверное получится покрасивее..

Psycho Tiger 12.06.2010 00:08

Вот кстати созрели новые вопросы:

1) Взглянул на схему etc. Не понял, почему бабблинг идёт по дате, и уходит в контроллер. С чего контроллеру то нужны события даты (это модель так обозвана, или это ерунда из базы данных?)

2) Всё чаще код в контроллерах у меня сокращается, и в модели появляются много методов, таких как addLine() и на них похожих. В итоге, по идее контроллер должен заниматься такой ерундой, как подготовить что нибудь и добавить в модель, а у меня модель сама подготавливает что ей надо (не в ущерб гибкости, конечно) и добавляет в себя. Насколько это плохо?

Котяра 12.06.2010 01:29

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

etc 12.06.2010 10:21

1) Дата только хранит данные. Контроллер потенциально может слушать модель, т. к. он не единственный контроллер, который может её изменять.

2) Если речь идёт только о том, чтобы добавить некие данные на основе входящих аргументов, то это вполне неплохо. Если же модель начинает содержать логику, в результате которой изменяются другие составляющие модели (вроде списывания денег с персонажа при добавлении предмета) — то это не её обязанность.

Psycho Tiger 12.06.2010 12:24

1) Ну дата тогда получается что это модель? Модель тоже только хранит данные. Ну и оповещает об изменении.

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

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

etc 12.06.2010 15:44

1) Да, дата — это модель;

2) В таком варианте такие методы вполне себе оправданы и должны быть у модели, а не у контроллера.

Psycho Tiger 13.06.2010 17:16

Понятно, спасибо.

Psycho Tiger 03.09.2010 16:53

Собственно, меня долгое время смущало вот это:
Цитата:

5) Отображает вьювер, изменяет контроллер. И у того и другого есть ссылки на базу.
1) Имеется ввиду модель или реальная база данных? Когда я спрашивал я имел ввиду внешнюю БД, например, сервер.

2) Как будет грамотнее: заставить модель получить информацию с базы (и периодически её обновлять, например сделать в ней сокет, а при поступлении байтов просить контроллер что-то сделать) или заставить это делать контроллер, периодически записывая результаты в модель?

etc 03.09.2010 18:14

1) Нет, это иерархическая модель;

2) Можно написать отдельный контроллер модели, который работает с соединением и помещает приходящие данные в модель.

Psycho Tiger 03.09.2010 18:26

2) То есть одна модель на 2 контроллера (один работает с сервером, другой уже берёт данные и обрабатывает их)? Понятно, спасибо.


Часовой пояс GMT +4, время: 21:52.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.