Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Внесите, пожалуйста, ясность в MCV. (http://www.flasher.ru/forum/showthread.php?t=157015)

Tr1te 30.05.2011 14:13

Внесите, пожалуйста, ясность в MCV.
 
По MCV: Есть контроллер (С1), есть у него модель (M1). В С1 я создаю другой объект который тоже состоит из контроллера (С2) и модели (М2), и таких объектов может быть много в С1. Мне нужно в М1 делать расчеты которые связанны со всеми объектами принадлежащие С1, а значит нужны нужны ссылки на них и при чем не конкретно на них, а на модели этих объектов (М2-Мn).

1) Правильно ли хранить ссылки на модели дочерних объектов С1 в М1?
2) Если нет то как мне обращаться к моделям дочерних объектов из M1, ведь мне нужно использовать их для расчетов.

Jewelz 30.05.2011 14:27

1) правильно, ветвление модели (у тигера почитай)

пояни вот эту фразу: "В С1 я создаю другой объект который тоже состоит из контроллера (С2) и модели (М2)"

incvizitor 30.05.2011 14:30

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

gloomyBrain 30.05.2011 14:37

Цитата:

Правильно ли хранить ссылки на модели дочерних объектов С1 в М1?
А зачем? Всегда можно сделать контрллеру публичный геттер на его модель, и тогда у Вас всегда будет ссылка на модель, если есть ссылка на контроллер.

Tr1te 30.05.2011 14:51

Цитата:

Сообщение от incvizitor (Сообщение 999799)
1 - Модель предстваляет собой паттерн компоновщик.
2 - У базового контроллера есть ссылка на на модель.
3 - У всех контроллеров есть сслыка на базовый, через него можно получить и ссылку на базу данных (модель).

Во...... вот так делать правильно. Тобишь чтобы мне что-то посчитать в базовой моделе, мне нужно чтобы базовый контроллер обратился к каждому дочернему контроллеру, а тот в свою очередь обратился к модели под объекта, взял нужные данные, вернул базовому контроллеру, и когда собрал все данные с под объектов отправил в базовую модель чтобы та что-то там посчитала. И изменила данные внутри себя.

Вот лично мне кажется что это чесать левое ухо правой ногой. По этому ищу решения попроще. Если посоветуйте, будет вообще замечательно.

Добавлено через 15 минут
Цитата:

Сообщение от gloomyBrain (Сообщение 999800)
А зачем? Всегда можно сделать контрллеру публичный геттер на его модель, и тогда у Вас всегда будет ссылка на модель, если есть ссылка на контроллер.

Вот это интересный вариант, только Громадный. :) Спасибо.

incvizitor 30.05.2011 16:48

Да, сори, забыл написать что модель public. То есть из либого контроллера можно достучатся до либого элемента данных добавленых в основную модель.

Dukobpa3 30.05.2011 18:31

Ну я конечно хз что там автор планирует, но можно примерно так всё решить:

1. C1 содержит в себе М1.
2. М1 состоит из нескольких маленьких моделей SM1-SMn(SmallModel) (ну массив дочерних моделей или как-то так)
3. С1 имеет ссылки на все Дочерние контроллеры. Так же С1 подписывается на их Ивенты.
4. если надо что-то поменять по инициативе Дочернего контроллера он просто диспатчит событие (на которое подписан С1) "Контроллер поменяй модель"
5. ...
6. PROFIT

//******
З.Ы. Я бы тут диспатчил не Event а DataEvent - так как ДатаИвент может в своем теле содержать еще и строку кроме самого типа. Таким образом грамотно продумав систему сообщений можно обойтись без создания своего класса ивента.

Добавлено через 1 минуту
Публичный геттер на модель я хз. Чтоб геттером воспользоваться надо ссылку иметь, а чтоб дочерние контроллеры на родтеля ссылку имели - это уже не ок. Так что в попу публичный геттер на модель.

Tr1te 30.05.2011 20:36

Dukobpa3, хм... интересный вариант, но мне непонятно кто создает SmallModels.

Например С1 создал подобъект c2 и по идеи м2 должен создавать с2, но у него нету ссылки на М1. И как правильно создавать м2 в М1?

Dukobpa3 30.05.2011 20:37

Цитата:

Dukobpa3, хм... интересный вариант, но мне непонятно кто создает SmallModels.
Ты вообще весь вариант не понял:) Еще раз прочти.

Цитата:

м2 должен создавать с2, но у него нету ссылки на М1
Правильно, но он может задиспатчить событие в главный контроллер с просьбой создать и выдать ссылку.

Добавлено через 2 минуты
Главный контроллер видит такое событие с такой просьбой, обновляет главную модель, создает в ней меаленькую модель и пихает ссылку на эту маленькую модель в маленький контроллер.

Это как один из вариантов. Можно же не давать ссылку на маленькую модель в маленький контроллер, а менять всю модель большим контроллером исключительно по событиям_просьбам от маленьких контроллеров.

Как еще один вариант - главный контроллер изначально создает модель с ее дочерними моделями. Потом создает пачку контроллеров, потом в эти контроллеры передает ссылки для маленьких моделей.

Добавлено через 3 минуты
Всё зависит от требований всего приложения или текущего модуля. В любом случае передавать ссылку народителя в дите - плохой вариант.

Добавлено через 5 минут
В большинстве случаев при такой структуре можно обойтись без маленьких контроллеров. А оперировать исключительно одним большим контроллером в котором будет большая модель и большая вью. Большая модель будет в себе содержать кучу маленьких моделек, а большая вью будет в себе содержать кучу маленьких вьюшек которые будут связаны с маленькими модельками. А рулить всем будет один большой контроллер.

dimarik 30.05.2011 20:45

Ну ладно, я пошел жарить попкорн


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

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