软件的MVC分层设计模式

来源:互联网 发布:君临天下重生几率算法 编辑:程序博客网 时间:2024/04/28 11:03

在软件的开发过程中要建立许多文件,如果不对他们进行分门别类,或者他们的命名不够望文知义的话,那么随着软件规模的扩大,凌乱的文件组织形式将使软件的维护变得十分艰难。

因此,在开发软件的过程中必须要有合理的文件组织模式。


在我开发小软件iTips的过程中,我根据自己的设计思路对各种文件进行划分。由于在此讨论的是设计模式,所以不详细介绍iTips的功能及其实现。整个软件的大致设计思路是:该软件分成6个模块,所以一开始我分别做了对应的6个Demo,包括01_Desktop(登陆界面),02_ClassTable(课表模块),03_TaskManager(任务提醒管理),04_SaveData(保存数据),05_MainView(主界面)和06_AppSettings(程序设置),另外还有图片声音资源,Delegate,Frameworks等。

首先将软件划分为若干个模块,再分别建立文件夹对文件进行分层,这是一开始我的设计模式。如下:


但是由于各个模块之间存在一定的相互联系,而且将一大堆的文件放入同一个模块对应的文件夹而不进行细分使得文件的逻辑组织更加混乱,如下面的ClassTable模块对应的文件夹:

这样一来,若程序运行出错,那么在跟踪bug的过程便会非常麻烦,难以快速准确地定位错误。同时开发团队中的其他合作伙伴也无法看懂这些文件对应的功能。这种设计模式无疑存在非常多的缺陷。

因此我依照卢老师建议的MVC分层设计模式重新对文件结构进行整理和划分。

任何程序都可以划分为基本的Model,View,Controller三个模块,其中Model负责对数据模型进行计算处理,View负责向用户提供一个友好的界面,Controller负责对用户的操作作出响应。另外还有一个显得有点另类的Delegate模块,Delegate独立于MVC三种模块之外,但同时又是联系三者的桥梁,所以可以将其单独放在一个Delegate文件夹中。

将一些与程序有关的资源文件如媒体文件等放到Source的文件夹中,又譬如将一些程序中常用的一些JSON网址写到一个头文件中使其独立出来。这样可以分离资源和程序部分,同时又可以直接引用资源文件中的信息。例如在头文件中用预定义的方法将一个被反复使用的网址www.baidu.com替换为baidu,这样在其他文件引用时就显得较为简便。对于一些要使用大量网址和反复引用一个网址的情况这种方法尤其适用。

MVC设计模式分层后的效果如下:


具体的方法是:首先将delegate放到Delegate模块中,然后将xib文件或一个storyboard放到View模块中,接着把各个View对应的ViewController放到Controller模块中,再把一些媒体文件或资源文件独立到Source模块中,剩下的与数据处理相关的基本上都是属于Model模块。

初步分好MVC模块后,再根据各个文件的职能在文件夹中进行细化划分,使其各司其职。基本上就完成了MVC文件分层。


MVC设计模式的最大好处就是文件逻辑结构清晰,便于查找错误,同时更便于程序的阅读者理解该软件各个模块的功能。


顺带说一下关于文件命名的一些禁忌,尽管Xcode向开发者提供了一个前缀名,如MVC分层前的文件中均带有GUO前缀,这种模式是为了标注程序的开发者信息,但是文件的注释中已经含有这些基本信息,所以这种前缀命名方式就显得有点累赘和多余,同时对阅读者造成不便,所以尽量不要使用前缀,默认即可。

文件的命名应该尽量做到望文知义,不要使用中文拼音,另外应该避免使用Table1ViewController和Table2ViewController这种命名方式,因为文件的功能不明确。

原创粉丝点击