在csdn上也有一些日子了,从2011-09-24晚开始给自己一个目标,就是坚持在csdn上写自己的所学所感,记录自己的IT生涯。
第一篇就来谈谈我对三层架构的想法和暑假时项目用到时的思考。
三层架构,我们可以分为DAL层+BLL层+UI层,用一个简单的快餐店例子来说明这三层架构的关系:我们可以把DAL层看成是厨师,BLL层看成是小二,UI层看成是顾客,UI层顾客负责点菜,DAL层的厨师把菜单上的菜都做好了,小二负责把哪个顾客需要的饭菜拿给顾客,给UI层享用!
DAL全称:(Data Access Layer)数据访问层,直接对数据库进行操作,包括增添、删除、查找、修改、更新等等操作, 在DAL层我们可以定义很多个DAO(Data Access Objects)数据访问对象 作为接口 ,接口主要来写各种相关操作如增删查改等操作的数据库语句,直接来对数据库进行操作,在DAL层我们也可以定义一个DLLFactroy抽象工厂来生产所有DAO接口(接口用虚函数声明,再具体去实现),这样我们就可以在我们需要的地方声明一个抽象工厂的对象,并可以方便的使用所有我们定义的接口来进行数据库操作了。定义一个IDAL文件是所有DAO接口定义的地方,不仅在DAL中要用到,在BLL中也要使用。为数据库中的一个表构造一个数据库操作接口。先写好操作接口,再写一个实现接口类,主要目的是为了导出接口供给BLL使用。GetDAOFactory();接口,可以让BLL直接调用DAO工厂生厂此接口是为了BLL提供DAO工厂产相应的DAO类,进行对数据库操作。用动态链接库技术实现这个接口
BLL全称:(Business Logic Layer)业务逻辑层,对数据层的操作,对数据业务的逻辑处理。在BLL层我们也可以定义一个BLLFactroy抽象工厂来生产所有的BLL,创建所需的BLL,再可定义一个IBLL文件(I代表接口)把想实现的BLL的定义都放在这个文件中,IBLL定义了所有BLL对象的接口,提供给UI使用例如:IaccessKeyBLL,IdepartBLL,IkeyholderDetailBLL等等,每一个BLL类中都有和DAO要实现的相同的虚函数,可以实现的操作主要有以下几个功能:插入,更新,删除,得到链表,根据ID得到表,根据其他得到链表等等。类中的函数都为虚函数,必须去实现定义的虚函数的功能,否则会报错。
UI层:表现层,展现给用户看的界面
分层是为了降低层与层之间的耦合度,实现“高内聚,低耦合”的思想
以下是从网上找到的一张相关图:
三层架构的系统需用三个工程,一个为UI工程,一个为BLL工程,一个为DAL工程,在BLL工程中可以动态的调用DAL工程中的DAO接口,每个业务逻辑层都有相应的接口,根据ui上有的功能来调用BLL层,再根据需要的调用相应需要的DAO接口,而使用工厂模式来生产BLL和DAO是非常有好处的,可以用CBLLFactory生产所有BLL,用CDAOFactory来创建每个DAO对象,这样方便调用和生产,而在IDAL中先声明所有的DAO,再由具体的C+插件名+DAO类(这样命名让同伴一看就懂,命名规范很重要)来实现具体的功能,例如插入,删除,get什么by什么等等功能,运用IDAL这样的话,方便声明所有的DAO,而不需要每一个都另外的去声明,浪费空间,并且麻烦,一个不留神就容易弄错,而接口中的纯虚函数,也就是virtual BOOLInsertAccessKey(AccessKey access)=0;之类的在具体类中必须去实现,否则会错误。
还有很多没能阐述清楚和自己才疏学浅,只能慢慢学习与进步,并加强文采与沟通! “没有天生的信心,只有不断培养的信心” 加油 我对自己说!!!