|
1 / 1 / 0
Регистрация: 20.07.2012
Сообщений: 9
|
|
Как построить связи между объектами23.01.2013, 12:10. Показов 2454. Ответов 5
Метки нет (Все метки)
Всем привет!
Для меня до сих пор загадка как правильно построить связи между объектами, т.е. логику приложения. Например, имеется архитектура MVC или подобная, понятно как строить модель/представление, их надо сделать максимально инкапсулированными, и тут нам приходят на помощь паттены построения объектов: фабрика, DI и т.д. . И так у нас построена вся инфраструктура приложения, запускается стартовый контроллер, когда нажали кнопку старт (win app) или зашли по URL - создаются объекты, вызываются методы и все ок. Дальше мы расширяем задачу: надо (допустим у нас игра и есть 4 юнита и консоль), когда третий юнит остановится вывести сообщение "третий юнит не может стоять". Понятно, что к моменту остановки в программе имеется 4 объекта юнитов и 1 консоль, и можно внести следующие изменения: 1. Напрямую из класса юнита, метода остановки, обратится к классу консоли. 2. Напрямую из класса юнита, метода остановки, обратится к классу контроллера и в нем проверить условия, и вызвать консоль. 3. В классе юнита, в методе остановки, вызвать событие, допустим unit:stop, делегировать его на контроллер, а из контроллера так же как и в п.2 4. Использовать паттены типа цепочка, наблюдатель и т.д. Пункт 4 не учитываю, так как это, по сути, повторение п.1-3. П. 1-2 захламляют код, и устанавливают сильные связи, и вообще прямые сообщения типа модель-модель, это, мне кажется, что то не то. Остается событийное программирование, но тут нужен глобальный диспетчер объектов .. все же мне кажется это неплохой вариант: модели дают всю бизнес-логику, view - отображение, а контроллеры - связи между объектами, логично что контроллеры вызываются в ответ на события, внутренние, либо внешние. Т.е. получается только один приемлемый вариант установки связей между моделями? Извиняюсь, что получилось много текста и воды, но по другому не смог. Если кто что может посоветовать - буду очень благодарен.
0
|
|
| 23.01.2013, 12:10 | |
|
Ответы с готовыми решениями:
5
Как правильно создать связи между равноправными объектами? Описание предметной области не дает возможности выявить связи между объектами БД Как создать связь между объектами? |
| 25.01.2013, 13:23 | ||||||
|
Необязательно событием, можно и через интерфейсный класс. С точки зрения юнита это примерно так
1
|
||||||
|
1 / 1 / 0
Регистрация: 20.07.2012
Сообщений: 9
|
||||||
| 25.01.2013, 21:26 [ТС] | ||||||
|
А вам не кажется, что это не очень практично писать внешнюю логику по отношению к объекту в его методе, т.е. можно сделать так:
0
|
||||||
| 26.01.2013, 08:34 | ||
|
Можно навесить контроллер, тогда unit::stop возвращает bool, а контроллер уже решает. Ну это определяется резонами полезности контроллера, просто так его заводить нет оснований.
1
|
||
|
1 / 1 / 0
Регистрация: 20.07.2012
Сообщений: 9
|
|
| 26.01.2013, 16:54 [ТС] | |
|
Теперь проясняется: в любом случаи надо из метода уведомлять систему о том что метод совершен. Это можно делать по-разному: событиями, через интерфейс ..
Я так понимаю, лучше делать, чтобы метод напрямую никаких команд не отдавал: либо события, либо интерфейс через DI, либо еще что то
0
|
|
| 26.01.2013, 16:54 | |
|
Помогаю со студенческими работами здесь
6
Как убрать промежуток между объектами? Как уменьшить расстояние между несколькими объектами?
Как проверить дистанцию между игроком и объектами? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|