现在的位置: 首页 > 综合 > 正文

软件架构设计之导读

2013年12月05日 ⁄ 综合 ⁄ 共 3039字 ⁄ 字号 评论关闭

一:前言

我在大二的时候的开始接触C++,这是我学的第一门编程语言,而更巧合的事情,那一学期我在一家公司跟着该公司聘请的外教学习VC,大家可想而知会有什么样的后果——老板及教师都说我什么都不懂,天,我刚接触C++唉。这样就开始我混沌的C++及VC学习之路。因为要在公司里跟着学习VC,因此那段时间,在学校里经常捧着厚厚的《VC++经典入门》来回的啃着,为写出一个窗口程序而兴奋不已(当然你不用编写一行代码也可产生一个窗口程序,不过那个可是我在Console下敲代码写出来的)。这下我在同学心里的地位一下高了很多,他们还不知道什么叫窗口程序,只会在Console下输出“Hello,
Word”,不过这确实是我写的第一个程序(暂且叫它为程序吧)。大二下学期开始,我就准备专转本考试了,那是我的计算机知识只停留在C++的基础,其他计算机方面一窍不通,但那时同学仍认为我是计算机牛人,因为我们是学电子的吧,而且他们对计算机没兴趣只是觉得它高深莫测。那一学期我考上了本科,但在选专业的时候没有选择计算机,仍然选了电子(这算是一大遗憾吧),因为那时我还在一家公司实习着,这是一家电子公司,因此在报考时就考虑了这一点,同时也觉得电子和计算机走的很近,如果对此有兴趣也可以去学习。进入了本科却没有调动我学习编程及计算机知识的情绪,厄尔有兴趣了就会去看看相关的书籍,但从来没有精过,没有恒心吧,同时我也承认,有时我也很懒。大三下学期开始,我做了一个更疯狂的决定,决定去考研,然后去考计算机专业。做这个决定由几个原因,这是我同其他人所没有透露过的:之前说过,在上学时一直在一家电子公司实习,那时我发现我对电子没有兴趣(当然电子也没学好),而对软件编程充满兴趣,我的编程知识在班上是最牛的,这让我有点小得意,当然认为我应该走上编程之路——不能辜负他们的期望,呵呵。那时就让我很困惑,毕业后很是否应该到这家公司上班,所以我选择考研,拖一拖,也要增进计算机的知识。还有一个原因,是的增进计算机知识,大家都知道做软件,光会一个编程语言是不够的,而计算机考研里有,计算机组成原理,操作系统,数据结构,数据库等课程,我想去学这些东西,所以我选择了考研。现在我觉得当初不应该选择考研,而专心去研究这些东西。当然结果我没考上研究生,因为我太懒散了,根本就不是考研的料,不过也学习了很多计算机的知识,至少这一点还是没有很多遗憾的。有幸的事毕业后在这家电子公司还是做了软件的任务(因为这事还和老板闹了一些不愉快,老板期望我去学电子的),不过9个月之后我还是离职了(发生这事还是让老板很生气,很伤心),因为我太想做软件了,我想全心全意做软件,不想去做电子,后来就无赖得罪老板了,这是我一直过意不去的事情。换了一家公司(当然是一家专门从事软件行业的公司了),我负责客户端的开发。大概半年后我接触了一本书,我认为这是一本对我影响极大,并将会产生长远影响的书——《Modern
C++ Design》。它让我接触到了很多以前从没有接触过的东西:设计模式,泛型编程,模板元编程,等等,突然感觉自己是多么的落后。刚开始看的时候虽然我一点也没看懂,只是觉得它高深莫测,前卫,能量强大。接着我开始研究之路,而我们公司的软件,可以说毫无架构可言,甚至连第三方库几乎都没有用到,智能指针只是自己内部实现了一个超级简单的(那个能力太弱了)。这时我就开始策划我的架构之路,对,没错,我想去设计一套软件框架,方便我以后的各种项目开发,至于这是否非常有用,或者对于商业价值来说,也许现在我说,没有用,你完全可以用很多第三方库。也许我只是对这些很好奇,想深入的研究这些类库,看他们是如果实作的,而且自己去实现出来更有成就感。

注意:开始软件设计之前先说明一些东东,很多东西,也许你会在一些第三方类库中看到,是的,我是研究这些类库,按照他们的思路(或许去做一些变通),然后按照自己的理解去实现出来。在这过程中,我可能会反复的修改代码及文档,会有很多考虑不到的地方(因为我不是把第三方类库的源代码照抄过来)。对于这些遇到的很多问题望大家都都指正。同时我更希望大家积极的讨论如何设计的更好。望我们是为设计而疯狂。

二:设计模块

首先我要说下,我要设计的软件的各大模块:
Utility:这就相当于第三方类库的功能,里面会有很多东西,例如:内存分配器,智能指针,文件操作,日志,等等。都是从各种第三方类库中学习而来的。其命名空间为:UTIL
Language:语言包模块,包含多种语言信息,支持动态语言包切换。其命名空间为:LAG
DataBase:所有类的定义均放在该模块中,更有点类似于数据库的概念,它是一个仓储。其命名空间为:DB
DataHandle:所有的逻辑操作模块,对DataBase模块中类对象的逻辑操作放在该模块中。其命名空间为:DH
DataAccess:数据访问模块,将对象数据写入文件,数据库,或则与其他软件数据交互的模块。其命名空间为:DA
DataArith:算法模块:这个模块我不做任何事情,因为我还不知道我该做什么样的软件。其命名空间为ARITH
DataGUI:界面接口模块:这个模块不是要实现软件界面,而是与软件界面的数据接口模块。其命名空间为DGUI
Test:测试模块,当然是测试以上各模块的所有功能,这里面会包含单元测试功能,因此单元测试我不会放在Utility模块中。
DataCOM:COM,大家应该知道这个模块是做什么的了,与其他编程语言交互的模块。其命名空间为DC
NHTApp:这就是软件界面了,这个界面使用Qt实现的(跨平台的蛮),当架构均完成后大家会看到一个蛮像样的应用程序,再次申明并不是做一个有何商业价值,或者某领域功能的软件。
还有个文件夹:Common。里面会定义本架构通用的东西,比如类型定义,等等。

把以后要用到的类型定义贴到这里来吧,以后不再有任何说明哦。

#include <string>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>

typedef short		HT_SHORT;
typedef unsigned short	HT_USHORT;
typedef int		HT_INT;
typedef unsigned int	HT_UINT;
typedef long		HT_LONG;
typedef unsigned long	HT_ULONG;
typedef long long	HT_LLONG;
typedef float		HT_FLOAT;
typedef double		HT_DOUBLE;
typedef char		HT_CHAR;
typedef unsigned char	HT_UCHAR;
typedef	wchar_t		HT_WCHAR;
typedef std::string	HT_STRING;
typedef std::wstring	HT_WSTRING;
typedef bool		HT_BOOL;
typedef void*		HT_PVOID;

typedef HT_ULONG	HT_ID;
typedef	HT_LLONG	HT_TM;

#define HT_NULL	0

class HTNullType {};

三:小结

这里还没有考虑网络方面的东西,因为还没接触相关的知识,以后会加进来,也许只是再添加个网络模块。再次热切的欢迎及期望大家一起探讨。让我们开始架构之路吧!

抱歉!评论已关闭.