在开发大型软件产品时,需要考虑许多方面:整体架构、物理布局、对象生命周期管理、可维护性、性能、设计模式等。开发可以从一张白纸开始,逐一添加上述各个方面,也可以从一个模板开始,该模板解决了其中的一些项目。然而,这样的模板并不存在,现有的模板往往只关注一两个方面,而在其他方面则采取了捷径。
在本文中,将探索一个更完整的示例,并提供一个更健壮的框架,该框架可以适应进一步的需求。
大多数关于创建应用程序的讨论都从思考模型-视图-控制器(MVC)开始,但大多数原生应用程序项目仍然从MFC模板开始,该模板具有文档-视图“架构”。事情从那里开始走下坡路,过了一会儿,业务逻辑与表示层交织在一起,物理布局与MFC交织在一起。再加上几个外部库,就得到了一个庞大的单体代码库,构建时间不断增加,解决新功能或问题所需的努力越来越大。
顺便说一句,托管应用程序模板也好不到哪里去,但可以查看关于托管应用程序/WCF的另一篇文章。
已经识别出一些创新,以改进模型-视图-视图模型(MVVM)、模型-视图-表示(MVP)等,但似乎更重要的是改进MVC与构建应用程序所使用的平台/库的集成方式。此外,今天的应用程序很少只涉及一个平台,有些部分在桌面上运行,有些部分在后端(或其层次之一)上执行。因此,集成方法应该允许在多个平台上重用实际的模型和控制器实现。
视图的实现通常更依赖于表示/外观/可视化技术,因此尝试获取表示逻辑的相同实现通常不值得努力。但是,通过模型/控制器逻辑,重新实现视图(但请参见下面如何通过重用可视化构建块来简化该任务)变得简单得多。
让定义这个示例将涵盖的范围。提醒一下,想要涵盖一些相当复杂的东西,以免跳过重要方面。让做一些图形化的东西,使用OpenGL,更好的是,让使用一些更近期的东西——着色器。通常,应用程序不是从头开始构建的,所以让使用一些外部库,看看它是如何适应的:
Boost是一个流行的库,还有GLEW来帮助OpenGL。让考虑可维护性和物理布局:为相应的功能建立单独的模块,并允许构建单元测试,以及允许在其他项目中重用。
现在让选择实际的平台,并定义将独立于平台的部分。模型和控制器应该是独立于平台的。视图的渲染将是OpenGL,由于它是跨平台的,将保持渲染部分跨平台。
现在这个应用程序本身——将所有内容初始化并绑定在一起的粘合剂(注意,是绑定,没有太多其他东西)。
将实际设置两个:一个将使用MFC,另一个将是一个独立的http web服务器。为什么要选择MFC,因为很可能已经知道它的优缺点。为什么要针对一个独立的web服务器,显然,因为网络连接的框架非常有用。但这也是因为它与桌面MFC应用程序截然相反,所以应该展示方法的健壮性。
最后,文档将自动生成,(如果有时间的话)源代码分析和代码覆盖率。
有时最好先从甜点开始,在这种情况下,让看看快照:
使用OpenGL着色器的应用程序
Web服务器和Chrome浏览器
下面是一个使用web服务器的屏幕录像。注意,半径增加/减少,直到达到指定的限制。限制由控制器强制执行。
浏览器不支持视频标签。
下面是一个桌面集成的快照,相应的区域已经突出显示。注意以下关键区域:
模型和控制器没有依赖于粘合代码(MFC)。
粘合代码对模型、控制器的依赖最小。
只能通过控制器对模型进行修改(即,模型只能作为文档的常量检索)。
视图类只处理图形管线的初始化,并将其余的渲染委托给ModelRender类。
下面的两个图表显示了项目的物理布局,以下领域感兴趣:
模型和控制器没有依赖于粘合代码。这一点与前一节中的一点相似,但在物理结构层面上。
模型和控制器没有依赖于查看代码。
在粘合代码中,文档没有依赖于用于可视化的图形API(OpenGL)。
本文的示例针对的是OpenGL2.1和GLSL 1.20着色器。选择这个版本的OpenGL/GLSL主要是因为它可以在“普通的”硬件上执行(实际上,这将在裸机Intel嵌入式图形上运行,这在今天的笔记本电脑中很常见)。同时,这将涵盖以下重要方面:
varying float x; \r
varying float y; \r
void main() { \r
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; \r
gl_FrontColor = gl_Vertex; \r
x = gl_Vertex.x; \r
y = gl_Vertex.y; \r
} \r
单元测试和测试覆盖率
本节显示了单元测试报告的快照以及通过单元测试获得的覆盖率:
最后,最好的部分:上述所有内容都可以通过新的Visual Studio向导合理地重用。要安装,可以导航到Visual Studio Gallery,使用Visual Studio如下所示,或在顶部下载安装程序:
打开Visual Studio中的新项目对话框。
输入搜索词:“igor okulist”。
选择“Robust MVC”项,然后继续安装。
如果一切顺利,应该看到一个如下所示的对话框:
安装后,新项目对话框将有一个新的向导类别:
本文介绍了在现有应用程序开发框架中实现和集成模型-视图-控制器框架的关键点。该方法保持了最小的依赖性,并促进了跨平台开发。此外,相同的模型-视图-控制器实现与web服务器集成,允许通过web浏览器渲染相同的模型。
问:源代码在哪里?!
答:仍在准备中。书签,投票或发表评论以帮助优先考虑与其他爱好项目。顺便说一句,如果有制作Visual Studio 2010的C++向导的经验,请与联系。
下载向导安装程序并开始基于此框架制作新项目!
另请参阅