完全与视图层无关的应用程序体系结构
Application architecture that is COMPLETELY view layer agnostic
我想编写一个C++应用程序框架,该框架将完全与视图无关。理想情况下,我希望能够使用以下任一项作为"前端"
- Qt
- Web前端
我知道网络工具包(wt)等的发展,但我想避免这些,因为至少有以下一个原因:
-
他们使用cgi/fastcgi方法(当使用Apache时)
-
AFAIK,他们给你强加了一个"前端"框架——例如,我不能使用CakePHP、Symfony、Django等来创建网页,并且在页面中只有绑定到服务器端C++应用程序的"小部件"。我希望可以自由使用我想要的任何web框架,这样我就可以从许多流行和成熟的模板框架中受益(例如Smarty等)。
我认为MVC模式的一些变体(不确定哪种变体)在这种情况下可以很好地工作。
我打算这样做:
- 模型和控制器层用C语言实现++
- 一个插件位于控制器和视图之间
- 该视图使用QT或第三方web框架实现
-
视图(前端)和插件之间的通信使用以下任一方法完成:
i。QT前端的事件
ii。用于web前端的AJAX/PUSH机制(也许backbone.js可以在这里使用?)
我上面描述的模式有名字吗?(在我开始编码之前),我应该注意什么(如果有的话)问题(除了网络延迟)?
听起来,它是一个MVC,插件实现了控制器和视图之间的桥梁。我找不到MVC的一个变体,它专门有一个桥梁作为设计的参与者;然而,它们都不排除桥接或其他模式协作或实现MVC。
实现这一点的困难可能来自于桥接抽象。可能很难:
- 防止实现细节影响抽象。例如,如果实现
A
的错误代码只对实现A
有意义,而实现B
的错误代码相似但发生在不同的条件下,那么错误将如何在不失去太多意义的情况下通过抽象 - 考虑实现之间的行为差异。这通常需要对被抽象的实现有一个坚实的理解,以便能够满足抽象的先决条件和后决条件。例如,如果实现
A
支持异步读取,而实现B
只支持同步读取,那么需要在抽象层中做一些工作来考虑线程 - 在去耦和性能之间找到一个可接受的折衷方案。这将是一种平衡行为。一如既往,尽量避免过早进行优化。通常情况下,为了性能考虑引入一点耦合比解耦高性能代码更容易
此外,考虑利用其他模式来帮助解耦。例如,如果具体类型Foo
需要通过抽象层,并且实现A
将其转换为Foo_A
,而实现将其转换成Foo_B
,那么考虑让插件提供抽象工厂。Foo
将成为Foo_A
和Foo_B
的抽象基类,插件将提供一个工厂来创建实现Foo
的对象,从而允许控制器分配插件所期望的确切类型。
相关文章:
- 将数组/对象/结构列表从C#库中传递给C MFC应用程序
- 是在同一体系结构上运行的静态编译的纯标准C 程序可移植
- 嵌入式设备中传感器应用程序设计体系结构
- 将C 结构传递到C#应用程序
- 将C结构包装在WPF应用程序中
- OpenCV格式化程序类和Mat对象的cout产生链接器错误:体系结构x86_64的未定义符号:libopencv_co
- 使用 Qt 的简单线程 gui 应用程序的结构是什么?
- C++:使用 API 的应用程序体系结构
- 将结构的列表从C#应用程序传递到C++DLL
- 如何为搜索应用程序找到正确的数据结构
- 在C++效率结构中创建日历应用程序
- 在Android应用程序(Java和XML)中使用C++结构
- 完全与视图层无关的应用程序体系结构
- 如何使用 gnu c++ 程序获取共享对象文件(.so 文件)的体系结构
- 标识应用程序的体系结构
- 构建应用程序时出错:体系结构 armv7 的未定义符号
- 适用于应用程序级集合的适当体系结构
- 我什么时候需要一个无锁的数据结构来跨音频应用程序中的线程读取/写入数据
- 编译Qt应用程序时出现体系结构x86_64的重复符号错误
- 初始化两个不同应用程序的cpp文件共享的headerfile中的数组结构