- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
三层架构之谈
三层架构之谈
面向对象开发中,大家都熟知三层架构,也经常使用三层架构思想。我们都知道,三层架构主要就是讲解一个分层思想。经典的三层架构主要分为三层:UI表现层,BLL业务逻辑层、DAL数据访问层。
我们先搞懂每个层到底有哪些职责:
UI:展现给用户的界面,用户在使用一个系统的时候他的所见所得;如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务;
? ? ? ??BLL:业务逻辑层,针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理;如果说数据层是积木,那逻辑层就是对这些积木的搭建;
? ? ? ??DAL:直接操作数据库,针对数据的增删查改。
? ? ? ??那又为什么要分层呢?分层当然是为了解耦。在经典三层架构中讲到,系统要将业务逻辑与数据访问分开,表现层与业务逻辑分开。
? ? ? ??三层架构就像是牛顿第二定律一样,表面看去都非常简单,没有什么特别之处,但是它们的意义都是非常伟大的。F=ma将运动与力联系起来了。在没有牛顿第二定律之前,力与运动完全是两个领域,人们因为不知道,而不知道他们之间的联系。而有了牛顿第二定律,人们就可以通过速度,来研究物体的受力;当然也可以通过受力,来控制物理的运行速度。这在历史上具有划时代的意义。
? ? ? ??三层架构,表达的是一种分层思想。实际上,经典的三层架构并没有实现完全的解耦。因为UI层中需要对业务逻辑层添加引用,在BLL层中需要对数据访问层添加引用。由于层与层之间有着强烈的引用关系。
? ? ? ??PS:关于引用,我们可以这样认为:引用了,就是自己的了。那刚刚说过的三层架构来说,因为BLL层添加了DAL层的引用,那么BLL层就把DAL当自己人了,DAL里面的东西,只要定义成公有的,它全认识;同理,由于UI层引用了BLL层,UI层也把BLL层当做自己人。分层本来是为了解耦,可是层与层之间的引用关系,决定了UI层与DAL层之间也就有着强引用关系。有引用就不能实现解耦。
? ? ? ??我们可以通过看下面包图关系来体会一下:? ? ? ??上面包图可见,UI与DAL存在顺方向的引用关系,故UI与DAL是一家人。? ? ? ??所以尽管三层架构表达的是一种架构思想,但是它并没有实现真的解耦。经典的三层架构,与过去的面向过程开发相比,进步之处就在于它体现着一种分层思想。
? ? ? ??为了达到我们的目的,我们在应用的时候必须对三层架构作出改进,所以我们在网上查资料的时候,大家所说的三层架构其实是多层。以三层架构为基础,为系统进行扩展。
? ? ? ??一般情况下,我们都会为系统使用简单工厂+反射。下面看扩展后的包图:
? ? ? ??我们可以看出,改进后的包图关系中,UI中没有对DAL进行间接的引用。也就是说,改进后,UI没有通过中间的BLL,IDAL,Factory认识DAL,UI根本不认识DAL。在UI的家谱中根本没有DAL这一号。这样一来,系统的灵活性就大了,DAL我们就可以随便换了。
? ? ? ??具体操作的时候,我们只需要更改一下字符串,为DAL层换一个名字,比如之前DAL层我们用的是AccessDAL,那么我们完全可以更换成SqlServerDAL,而这些更改,完全可以在配置文件里面完成。然后我们只需要在UI下面的bin文件夹下面的Debug文件夹里面,添加进来SqlServerDAL就可以了。原先的AccesssDAL我们可以删除,也可以不去管它。
? ? ? ??我们之所以可以这样做,就是因为我们使用了简单工厂+反射,降低了层与层之间的联系。由于不同的名字会生成不同的dll文件,我们用的时候,我们只是根据文件的名字调用相应的dll文件。
? ? ? ??讲到这里,大家一定会想知道,上面谈到的两种方法,最大的区别是啥呢?我们对比三层架构引用关系和使用简单工厂+反射关系的实例来说明。
? ? ? ??对于引用关系,我们可以进一步进行理解:
? ? ? ??如果两层之间没有添加引用,比如DAL,它没有引用任何层,那么编译之后DAL会自生成dll文件到DAL下面的bin文件夹下面的Debug文件夹下。
? ? ? ??假如现在BLL引用了DAL层,那么在BLL下面的bin文件夹下面的Debug文件夹下面会有DAL.dll和BLL.dll两个文件。也就是说,BLL引用DAL,DAL会自动复制一份dll到BLL的bin文件夹下面的Debug下面。这就是实质的引用关系。
? ? ? ??在此需要进行对比说明,上面提到的简单工厂+反射在编码的时候,会提示错误:找不到dll文件。因为他们不认识,所以出现找不到的错误也应该是正常的。这时我们需要手动修改DLL文件的生成路径,强行将DAL的生成路径改为UI下面的bin下面的Debu
您可能关注的文档
最近下载
- 气动技术论文.docx VIP
- GB/T 22081-2024网络安全技术 信息安全控制.pdf
- DISC性格测试题完整版(附:详细分析).doc VIP
- YYT 0661-2017 外科植入物 半结晶型聚丙交酯聚合物和共聚物树脂.docx VIP
- SUNTEX上泰仪表-在线PH-ORP变送器PC100和PC110操作说明书.pdf
- 物业企业安全风险管控责任清单.pdf VIP
- D5865-19 煤和焦炭总热值的标准试验方法.pdf
- Q_572288222.1-2018含N-P笼型大分子膨胀型阻燃剂.pdf
- 2025湖南高考物理试卷(真题含答案解析).docx
- 危化品企业20项重大隐患判定标准.docx VIP
文档评论(0)