跨平台最佳MVC模型到控制器的消息传递方法(C#,Objective-C ++)

3
计划重写一个复杂、UI密集的应用程序,使其模型尽可能跨平台。我已经做了一些研究和阅读,理论上讲很有道理,但在模型以某种跨平台的方式向控制器发送消息方面,我没有看到最佳实践方法是什么。
例如,通过控制器调用模型的API来更改模型。但是,模型随后需要通知客户端其数据已发生更改,因此它需要将其广播回控制器——控制器需要通知视图。
但是,针对使用C#或Objective-C++编写的控制器的消息传递方法会有所不同,对吗?是否应该使用信号连接控制器,然后控制器使用特定于平台的消息通信与视图进行通信?
是否有标准的轻量级模板可以设置这些平台无关的模型操作的最佳实践?

“但是对于使用C#或Objective-C ++编写的控制器来说,消息传递方法将会有所不同,对吗?” 此外,Cocoa/Objective-C的MVC模式实际上与其他平台所称的MVC略有不同,因此您可能也会在那里遇到一些困难。” - bames53
那么,对于Model来说,什么是最佳实践方法呢? 有函数通知Controller模型发生了更改,然后让每个平台相关的Controller实现处理100%的所有MVC消息? - SMGreenfield
2个回答

1

我正在尝试启动一个做类似事情的项目。我计划使用boost::signals2作为回调机制。它使用标准C函数作为回调,因此它应该可以与任何语言一起使用。您可以在C++中编写所有模型,并通过signals2回调通知控制器更改。

当然,这限制了您对模型的C风格接口,但据我所知,如果您想要跨平台工作,那就是唯一的方法。

祝你好运!


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等。如果您选择这条路,可以使用内置的本地信号系统和控制器设计。


如果我们可能会使用各种UI工具包(如QT),加上Mac OS / IOS / Android / .net,创建一个跨平台的消息传递层是否有意义,并且该层是否应该驻留在模型中?模型是否需要跟踪哪些控制器对哪些数据感兴趣 - 还是这些信息由中央控制器处理? - SMGreenfield

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接