У меня есть опыт работы с MVC (Flex и Rails), и мне нравятся идеи разделения кода, возможности повторного использования, инкапсуляции и т. д. Это упрощает быстрое создание вещей и повторное использование компонентов в других проектах. Однако было очень сложно придерживаться принципов MVC при создании сложных, управляемых состоянием, асинхронных, анимированных приложений.
Я пытаюсь создать анимированные переходы между много вложенных представлений в приложении, и это заставило меня задуматься о том, вводил ли я себя в заблуждение... Можете ли вы применить принципы MVC к принципам искусственного интеллекта (деревья поведения, иерархические конечные автоматы, вложенные состояния) , как Игры? Хорошо ли сочетаются эти две дисциплины?
Очень легко заставить представления/графику игнорировать что-либо вне себя, когда все статично, например, в системе HTML CMS или чем-то еще. Но когда вы начинаете добавлять сложные переходы, управляемые состоянием, кажется, что все должны знать обо всем остальном, и MVC почти мешает. Что вы думаете?
Обновлять:
Пример. Ну прямо сейчас я работаю над веб-сайтом в Flex. Я пришел к выводу, что для правильной анимации каждого вложенного элемента в приложении я должен думать о них как об агентах ИИ. Таким образом, у каждого «представления» есть собственное дерево поведения. То есть он выполняет действие (показывает и скрывает себя) в зависимости от контекста (какие выбранные данные и т. д.). Для этого мне нужна штука типа ViewController, я называю ее Presenter. Итак, у меня есть представление (графика, выложенная в MXML), презентатор (определяющий анимацию и действия, которые представление может выполнять в зависимости от состояния и вложенных состояний приложения) и модель представления для представления данных в представлении ( через ведущего). У меня также есть модели для объектов значений и контроллеры для обработки URL-адресов и вызовов базы данных и т. д. ... все обычные статические/html-подобные материалы MVC.
Некоторое время я пытался выяснить, как структурировать этих «агентов», чтобы они могли реагировать на окружающий их контекст (что выбрано и т. д.). Казалось, что все должно быть в курсе всего остального. А потом я прочитал о Path/Navigation Table/List для игр и сразу же подумал, что у них есть централизованно хранимая таблица всех заранее рассчитанных действий, которые может предпринять каждый агент. Так что мне стало интересно, как они на самом деле структурируют свой код.
Все, что связано с 3D-видеоиграми, является большим секретом, и многое из того, что я вижу, делается с помощью графического пользовательского интерфейса/редактора, например, определения деревьев поведения. Поэтому мне интересно, используют ли они какой-то MVC для структурирования того, как их агенты реагируют на среду, и как они сохраняют модульность и инкапсуляцию своего кода.