LINUX.ORG.RU

Про MVC и таймер

 , ,


0

1

Здравствуйте. Один мой друг пишет таймер в браузере. И у него когнитивный диссонанс от не понимания сути шаблона MVC. Пожалуйста объясните ему

Есть M, V и С. И есть объект timer, который содержит текущее состояние (сколько секунд осталось, сколько задано, и т д). Еще timer бросает события «second_tick» (секунда тикнула) и «timeout»

Поскольку M на самом деле предметная область (domain), в дальнейшем буду звать ее D, чтоб не путаться

Логика в том, что пока таймер тикает, на экране отображается один V (отсчет времени). При наступлении же «timeout», V сменяется на другой (окно выбора времени для нового таймера)

Вопрос. Чему объект timer должен принадлежать? D или C?

Если таймер в D, значит D может менять состояние и самостоятельно. И C должен подписаться на эти изменения, выполнить логику и сменить V. Что вроде бы не совсем канонично (в статьях пишут, что C - единственный источник изменений для D)

Если таймер в C, то получается что самая мякотка, ядро приложения (таймер) не на своем месте (не в D)

★★★★★

Последнее исправление: makoven (всего исправлений: 6)

MVC в браузере не нужен.

Изолированный внутри одного компонента таймер — вид. Между компонентами — redux-saga, например.

x3al ★★★★★
()

Если таймер в D, значит D может менять состояние и самостоятельно. И C должен подписаться на эти изменения, выполнить логику и сменить V. Что вроде бы не совсем канонично (в статьях пишут, что C - единственный источник изменений для D)

Контроллер должен реагировать на события, которыми в данном случае являются тики часов. Источник тиков должен быть не в модели, а в изолированном компоненте (объекте).

При наступлении же «timeout»

Таймаут должен определяться не таймером. Контроллер должен передать модели, что произошёл тик таймера (обновить модель) и запорсить у модели, достигнут ли таймаут.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

УмнО. Ни за что бы не додумался до такого выверта. Спасибо

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

Я ни слова про react не сказал, если что. Сага — это просто самый очевидный способ выразить модель-с-сайдэффектами.

x3al ★★★★★
()

Поскольку M на самом деле предметная область (domain), в дальнейшем буду звать ее D
ядро приложения (таймер) не на своем месте (не в D)

А зачем модели (обычно, данным со свойствами) ТИКАТЬ????

Shadow ★★★★★
()
Ответ на: комментарий от Shadow

Потомучто модель не только данные, а предметная область. По-сути, програма без интерфейса

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

По-сути, програма без интерфейса

Стесняюсь спросить, зачем тогда нужен контроллер.
И да, тогда если модель тикает, то интерфейс с этим тиканьем, видимо, никак не связан.

Shadow ★★★★★
()
Ответ на: комментарий от Shadow

Наверное я не правильно понимаю MVC. Точнее друг, друг не понимает )

makoven ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.