3

计划重写一个复杂的、UI 繁重的应用程序,使其模型尽可能合理地跨平台。我所做的研究/阅读在概念上是有意义的,但就模型以某种跨平台方法向控制器发送消息而言,我没有看到最佳实践方法需要什么。

例如,通过控制器调用模型的 API 来更改模型。但是模型随后负责通知客户端其数据发生了变化,因此它需要将其广播回控制器——控制器需要通知视图。

但是对于用 C# 或 Objective-C++ 编写的控制器,消息传递方法会有所不同,对吧?是否会使用信号连接到控制器,该控制器将使用特定于平台的消息与视图通信?

是否有标准的轻量级模板可以为独立于平台的模型操作设置这些最佳实践?

4

2 回答 2

1

将统一控制器与本机(iOS、MFC、HTML、...)视图一起使用是相当困难的。

我个人为我的应用程序创建了一个完整且无头的 API。我公开了这个 API 来操作模型(内部)和视图(外部)。

这种方法利用集中统一的“主”控制器(我的 API)。这个组件不需要严格的 MVC。每个平台都有一个单独的(子)控制器,用于连接您的内部 API 和平台原生视图。

这是一种分层的方法。就消息传递机制而言,C++ 回调(Boost Function & Bind)对于简单的任务来说已经足够好了。@Rotsiser_Mho 推荐的 Boost Signals 更加稳健。

C++ 对于您的核心来说是一个不错的选择,因为它几乎可以与任何平台混合使用。甚至 Android 也允许您将本机代码与 NDK 链接。

如果视图太复杂(大量自定义可视化等),您可能需要使用跨平台 UI 工具包,例如 WX、QT、GTK、Cairo、OpenGL、Swing 等。如果您走这条路,您可以使用内置的原生信号系统和控制器设计。

于 2012-08-15T07:11:40.053 回答
1

我正在尝试启动一个做同样事情的项目。我打算使用 boost::signals2 作为回调机制。它使用标准 C 函数进行回调,因此它几乎可以与任何语言一起使用。您可以用 C++ 编写所有模型,并通过信号2 回调通知控制器更改。

当然,这将您限制在与模型之间的 C 风格界面,但据我所知,如果您希望它跨平台工作,这是唯一的方法。

祝你好运!

于 2012-08-15T03:41:34.787 回答