我想编写一个C ++应用程序框架,它将完全视图不可知。理想情况下,我希望能够使用以下任何一种作为"前端"
我知道像web toolkit(wt)等的开发,但我想避免这些,因为至少有下列原因之一:
他们使用cgi / fastcgi方法(使用Apache时)
AFAIK,他们强加了一个"前端"你的框架 - 例如,我不能使用CakePHP,Symfony,Django等来创建网页,只有#34;小部件"在页面绑定到服务器端C ++应用程序。我希望可以自由使用我想要的任何网络框架,因此我可以从许多流行的和已建立的模板框架中受益(例如Smarty等)。
我认为MVC模式的某些变体(不确定哪种变体)在这种情况下可以很好地工作。
这是我打算继续下去的方式:
视图(前端)和插件之间的通信使用以下任一方式完成:
我。 QT前端的事件
II。 Web前端的AJAX / PUSH机制(也许在这里可以使用backbone.js?)
我上面描述的模式是否有名称 - 并且(在我开始编码之前),我应该注意哪些(如果有的话)存在任何问题/性能问题(网络延迟除外)?
答案 0 :(得分:1)
从它的声音来看,它是一个MVC,插件在控制器和视图之间实现Bridge。我无法找到一个MVC的变体,它特别有一个桥梁作为设计的参与者;但是,它们都没有排除协作或实现MVC的桥梁或其他模式。
实现这一点的困难可能来自桥梁抽象。可能很难:
A
的错误代码仅对实现A
有意义,而实现B
的错误代码类似但在不同条件下发生,那么错误将如何通过抽象而不会失去太多意义?A
支持异步读取,而实现B
仅支持同步读取,则需要在抽象层中完成一些工作以考虑线程。另外,考虑利用其他模式来帮助解耦。例如,如果需要通过抽象层传递具体类型Foo
,并且实现A
将其转换为Foo_A
,而实现将其转换为Foo_B
,然后考虑让插件提供Abstract Factory。 Foo
将成为Foo_A
和Foo_B
的抽象基类,插件将提供工厂来创建实现Foo
的对象,允许控制器分配确切的类型该插件期待。