浅谈C++三层架构

2016-02-19 12:24 49 1 收藏

有了下面这个浅谈C++三层架构教程,不懂浅谈C++三层架构的也能装懂了,赶紧get起来装逼一下吧!

【 tulaoshi.com - 编程语言 】

三层架构并不是MVC,MVC是一个很早就有的经典的程序设计模式,M-V-C分为三层,M(Model)-V(View)-C(Control)。而web开发中的三层架构是指:数据访问层(DAL-DatabaseAccessLayer),业务逻辑层(BLL-BusinessLoginLayer),以及用户界面层(UI-UserInterface,实际就是网页后台的具体调用BLL层)。这个是基本概念。曾经我以为三层架构就是在AppCode中,分为三个大类与若干小类,各司其职。在经过一番洗礼后,才发觉多么的无知。

首先AppCode中,放的是通用类,如数据库通用类,实现数据库连接,基本的SqlCommand创建,自定义CRUD的方法等,与三层架构毫无关系,就是常用的开发模式中存放类(Class)的文件夹。

其次,当使用三层架构时,一定是在大项目中,因为三层架构的目的是提高项目的松散性和降低项目的耦合度,使之更容易扩展或者维护。小项目使用了三层架构,由于过度的在意分层而导致了项目的复杂度增加。

创建三层架构的应用程序。我们必须对这三层分别创建不同的类库(ClassLibrary),而不是普通的类(Class)。我们对于任何一个模块或者功能进行OOP,把它扩展为对象(面向对象的思想就是:将所操作的目标当成一个对象,对它进行的操作,将由对象自己的方法进行,而非外界传参。譬如注册用户,用面向过程的方法事先,就是:public static bool Register(string userName, string userPwd)。若用OO的思想,我们不可将账号密码作为参数传入,而是将用户作为一个对象,这个对象具有private _userName,和private _userPwd的属性。在注册时,用构造函数初始化一个新的对象,User one = new User(userName,userPwd),使之在初始化后具有这两个字段的值。然后调用User类中的public static bool Register()方法(注意这个方法是不进行传参的),而在这个Register方法中,使用对象的_userName和_userPwd属性进行注册。),那么,我们在这个对象中的任何操作都将以该对象的方法(函数)实现。

在进行三层分类时,这样新建类库。

1.文件-新建项目-其他项目类型-空白解决方案。

2.在右侧的资源管理器中,选中当前解决方案,右键添加-新建项目-类库(ClassLibrary),分别创建BLL,DAL,UL类库。(若添加后看不到解决方案则在菜单-工具-选项-项目和解决方案-总是显示解决方案)。

3.右键,向解决方案中添加一个网站(新网站或者现有网站)。

4.根据需求删除或者保留默认添加项(默认的class1.cs或Default.aspx文件)。

 

这样一个三层架构的网站雏形就搭建好了。因为UI层要被其他两层引用,DAL层要被BLL层引用。所以需要相互添加引用,方法是在类库上点击右键-添加引用-项目-选择其他类库。并且在具体类中引入命名空间(using namespace)。

ps:类库其实就是类的集合,三层架构的目的就是,将同一项目的不同模块都划分为各自的三层,各司其职,将具体实现方法用类写出,添加到该层的类库中,这样,一个网站下的类库就只有三层,每一层中都包含了各个模块相对应层的实现方法。在以后修改或扩展时,在对应层中进行操作就可以了。

一般的项目,涉及最多的就是对数据库的CRUD,DAL层只负责与数据库的交互,BLL层是最重要的一层,他负责将DAL层的的结果呈现给UI层,但是恰恰BLL层的存在似乎有点鸡肋,他起到的仅仅是转发DAL层数据的作用,而具体的逻辑操作是与数据库的交互,应该写在DAL层,这就好像BLL层是在重复DAL层的劳动一样,其实BLL层的作用在于除了调用DAL层访问数据库,还可以进行逻辑判断,当符合的时候,才进行允许进行DAL的操作,或者进行额外的操作(如加密,转换等)。而DAL层可不管这些,他只管进行CRUD的动作。UI层就是操作抽象出来的实体对象,它包含了各种属性。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

一个三层架构的小例子:注册新用户。

先写模块的实体类,是数据库中表的抽象,假设数据库中注册信息只有账号,密码两个字段。那么抽象到实体类就是这样:

 

再写DAL层:

再写BLL层:

 

最后构建UI层代码,即我们的aspx.cs页面代码,该层应该直接调用BLL层的方法。该页面引用BLL和Entity的命名空间,并向Button控件注册事件:

 

这样一个小的三层架构程序就出来了。

这个程序中,操作的实体为UserInfo表的抽象。在DAL层进行了AddUser()的方法,在BLL层也进行了AddUser()的方法,唯一的区别是BLL层做了逻辑判断,如果用户名存在,则注册失败。

 

三层架构的特点:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

1.数据库访问层(DAL)仅提供对数据库的CRUD操作,而不管操作后的结果,也不管逻辑过程(譬如同名用户,不合法用户名)。

2.业务逻辑层(BLL)不会直接与数据库交互,他与数据库的交互是通过DAL提供的方法。在调用这些方法前,要加入自己的逻辑判断或者业务处理。另外业务逻辑层(BLL)还有可能不会去调用DAL层的方法,而是进行其他业务处理。

3.用户界面层(UI)层是不会调用DAL层的,他只调用BLL层提供的方法,再由BLL层自己决定是否继续调用DAL层。

 

这个例子可以看出三层架构的优点就是结构清晰,容易扩展与维护。缺点就是,复杂。仅仅一个注册用户,就这么麻烦,所以对于小项目来说,费这么大劲换取一个相对较清晰的分层结构是不划算的。 

 

 转载请注明出处:csdn-mark

来源:http://www.tulaoshi.com/n/20160219/1600805.html

延伸阅读
标签: 网络游戏
《星辰变》游览蓬莱仙域三层蓬莱仙域第三层,让我们看看主人公又将带领我们看到什么样的仙境景色吧! 星辰变走进高考考场为考生提供饮用水 《星辰变》专区 星辰变 CGWR 得分 CGWR:84 位 CGWR介绍 7.8 【新浪游戏专稿,转载请注明出处】 导读:盛大游戏《星辰变》旗下“全球修行技术学校”今日正式启动“高考关怀行”活动,赶...
对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题。已经有许多技术被研究出来以应对这个问题,比如Smart Pointer,Garbage Collection等。Smart Pointer技术比较成熟,STL中已经包含支持Smart Pointer的class,但是它的使用似乎并不广泛,而且它也不能解决所有的问题;Garbage Collection技术在Java中已经比较成熟,但是...
标签: 侠客风云传
《侠客风云传》江天雄三层身份详细解析 在《侠客风云传》中,大家可能对江天雄的身份感到疑惑吧,今天图老师图老师小编给大家带来的是一位玩家分享的《侠客风云传》江天雄三层身份分析,快跟图老师图老师小编一起来看看这位玩家有什么看法吧! 江天雄三层身份: 那个他,到底是谁? 首先江天雄是他的化名,此为第一层身份。 天意城...
做个幸福的妈妈 避免产后抑郁 产后 抑郁症是 女性 精神障碍中最为常见的类型,是女性生产之后,由于性激素、社会角色及心理变化所带来的身体、情绪、心理等一系列变化。典型的产后抑郁症是产后6周内发生,可持续整个产褥期甚至更久。 病因: 1.完美主义的性格 由于完美主义的女性对产后当...
在做C/S三层结构之前,对Com+了解甚少,由于客户中途要求将两层结构改为三层结构(客户端+中间层+后台数据库),所以不得不狂看Com+相关的文档。经过两天的资料查找、文档阅读和反复试验,已基本了解Com+原理,并成功实现三层结构模型。 在三层结构的实现过程中,最为关键的是要实现中间层组件在服务器上的运行,即客户端如何调用服务器上...

经验教程

949

收藏

34
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部