2012-07-03 1 views
3

Планирование перезаписи сложного приложения с интерфейсом UI, чтобы его модель была настолько кросс-платформенной, насколько это возможно. Исследование/чтение, которое я сделал, имеет смысл концептуально, но с точки зрения модели, отправляющей сообщения контроллеру в каком-то кросс-платформенном подходе, я не вижу того, что повлечет за собой передовой подход.Кросс-платформенный подход к обмену сообщениями от MVC от модели к контроллеру (C#, Objective-C++)

Например, модель изменена с помощью контроллера, вызывающего API-интерфейс модели. Но затем Модель отвечает за информирование клиентов о своих данных о том, что произошли изменения, поэтому необходимо передать их обратно Контроллеру, который должен сообщить о представлении.

Но методы обмена сообщениями будут отличаться для контроллера, написанного на C# или Objective-C++, правильно? Используете ли вы сигнал для подключения к контроллеру, который будет использовать связь сообщений с конкретной платформой с View (s)?

Есть ли стандартный, легкий шаблон, который устанавливает эти лучшие практики для не зависящих от платформы операций модели?

+0

«Но методы обмена сообщениями будут отличаться для контроллера, написанного на C# или Objective-C++, верно?» Не только это, но шаблон MVC для Cocoa/Objective-C на самом деле несколько отличается от того, что другие платформы называют MVC, так что вы можете найти и некоторые трудности там. – bames53

+0

Итак, каков был бы подход к лучшей практике для модели? Имеют ли функции, которые уведомляют Контроллер о том, что произошла смена модели, а затем разрешить каждой реализации, зависящей от платформы, выполнять 100% всех сообщений MVC? – SMGreenfield

ответ

1

Я пытаюсь запустить проект, который делает то же самое. Я планировал использовать boost :: сигналы2 как механизм обратного вызова. Он использует стандартные функции C для обратных вызовов, поэтому он должен работать практически с любым языком. Вы можете написать все свои модели на C++ и сообщить контроллерам об изменениях через обратные вызовы signal2.

Конечно, это ограничивает интерфейс C-стиля к вашим моделям, но насколько я знаю, это единственный способ пойти, если вы хотите, чтобы он работал на разных платформах.

Удачи вам!

1

Довольно сложно использовать унифицированные контроллеры наряду с собственными (iOS, MFC, HTML, ...) видами.

Я лично создаю полный и безголовый API для своего приложения. Именно этот API я подвергаюсь манипулированию моделью (внутренней) и представлением (внешним).

В этом подходе используется централизованный «главный» контроллер & (мой API). Этот компонент не нуждается в, чтобы быть строго MVC. Каждая платформа имеет отдельный (дополнительный) контроллер, который объединяет ваш внутренний API и внешний вид платформы.

Это многоуровневый подход. Что касается механизма обмена сообщениями, обратные вызовы C++ (функция Boost & Bind) работают достаточно хорошо для простых задач. Сигналы усиления, как рекомендовано @Rotsiser_Mho, являются более надежными.

C++ - отличный вариант для вашего ядра, поскольку его можно смешивать практически с любой платформой. Даже Android позволит вам связать собственный код с NDK.

Если представление слишком сложное (большое количество пользовательской визуализации &), вы можете использовать кросс-платформу U.I. инструментарий, такой как WX, QT, GTK, Cairo, OpenGL, Swing и т. д. Если вы идете по этому маршруту, вы можете использовать встроенную собственную систему сигнализации и дизайн контроллера.

+0

Если мы можем использовать различные инструментальные средства UI (например, QT), а также Mac OS/IOS/Android/.net, было бы целесообразно создать межплатформенный уровень обмена сообщениями и будет ли он находиться в модели? Могла ли модель отслеживать, какие контроллеры были заинтересованы в том, какие данные - или эта информация обрабатывается внутри центрального контроллера? – SMGreenfield