三层学习之初体验
来源:互联网 发布:led视频制作软件 编辑:程序博客网 时间:2024/06/05 17:00
三层的学习也有一个星期了,C#版的分层登录也自己敲完了,就浅显的总结下三层的要点以及我所理解的各个层之间的调用吧。
一、什么是三层?
如图所示,从下发的资料中截了张图,把一个功能的实现乃至于一个系统在逻辑上分为三个层次的架构方法就是三层。
官方的解释:三层架构(3-tierarchitecture)通常意义上的三层架构就是将整个业务应用划分为:表现层(Presentationlayer)、业务逻辑层(BusinessLogic Layer)、数据访问层(Data accesslayer)。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。
二、为什么使用三层?
记得在《设计模式》的学习过程中,简单工厂模式里有这样一句话:“~¥~#*&~就是让业务逻辑与界面逻辑分开,让他们之间的耦合度下降。只有分离开才可以达到容易维护或者扩展。”
我想既然都是面向对象的思想,这个解耦和的思想也是相通的,以前是一层或两层的时候,界面逻辑与业务逻辑乃至基本数据是混为一体的,代码的复用率基本为zero,当添加新的业务、新的数据库,就得该整体的代码,如果没有很好的备份,很容易把系统搞砸。
当然,通过自己敲C#的代码,我最大的体会就是通过分层,一个系统的完成可以分别由不同的人来敲,有人可以专门设计UI,有人可以专门设计数据库及数据访问层,有人专门负责逻辑层,这样分工明确了,不仅仅代码与程序员更加确定,同时对于我们设计人员也有了各自的方向,利于深入研究,成为“砖家”,同时对程序后期的维护都是非常方便的。
三、三层详解:
先上一张三层的图片:(从伟涛博客借的图)
1、表现层
用途:
(1)向用户展现特定数据
(2)采集用户输入的数据和内容
模式:
(1)Windows Form---单机版
(2)ASP.Net---网页版
2、业务逻辑层
用途:
(1)从DAL获取数据,以供UI显示
(2)从UI获取用户指令和数据,执行业务逻辑
(3)从UI获取用户指令和数据,通过DAL写入数据源
本质:
它是一个类库,执行必要的逻辑判断,相当于人体的大脑,从UI传入的数据如果在该层做出了分析得到结果则直接返回UI,如果不能做出判断,继续调用DAL层进行数据源的访问。
3、数据访问层
用途:
(1)从数据源加载数据 //此处除了数据源还有DLL
(2)向数据源写入数据 //同上
(3)从数据源删除数据 //同上
技术:
ADO.NET+SQL语句,在C#版的登录窗体中,我在DAL层的两个类中关于连接SQL的代码不是太理解,可见对于C#与数据库的交互是我需要加强的。
本质:同为类库。
4、实体层
为什么会用到实体层,我的理解是因为视频中所提到的,U、B、D三个层次之间只能够单向的引用,这是一个方面,另一个方面是便于返回用户所需要定义的数据类型,就像三层登录例子中的Login.Model.UserInfo一样,每层中返回的类型都为Login.Model.UserInfo中定义的类型,即实现了三个层次之间返回类型的互通,同时也是为了避免U层直接引用D层(这是我经过例子后的感受,希望听到大家的理解)。
四、三层的特点
我自己总结了几个认为比较重要的特点:
1、三个层次之间单向顺序引用,切记不要跨层引用
2、三个层的代码分别放到不同的程序集中,有利于程序的修改和扩展,以及问题的计时发现。
3、三个层用不同的命名空间
五、我使用三层实现登录的感受
1、敲代码的感受
逻辑性更强了,首先是搭建层次框架,设置属性、命名空间、引用,三个层次搭起之后,开始代码的编写,编码心得:(1)想好每个层需要多少类,去创建;(2)把每个类中需要的方法写好,参数设定好,方法体可暂时用throw new System.NotImplementedException()代替,定义好各个类之间调用关系,参数传递,(3)从U层开始写,按逻辑思维逐层向下写代码。
2、调错的感受
昨天晚上调了一个小时的错误,菜鸟程序员的错误“按下葫芦又起瓢”,最后还是被我拿下,建议:先把大框架搭好、引用设置好后再写代码。
3、三层与两层的类比
(1)逻辑性增强,对调试有好处
(2)逐层调用,参数传递较繁琐
(3)总之,写的时候可能麻烦点,但是维护、改错时候很方便。
That is all.
- 三层学习之初体验
- 三层学习——初体验
- 三层初体验
- 三层学习之初相识
- 三层学习 之 登陆
- 【三层学习之总结】
- MFC学习之初体验
- 学习Javascript之初体验
- 机器学习之----初体验
- AngularJS 学习 之 初体验
- C#学习之初体验
- 三层架构之再学习
- win8应用开发学习之初体验
- Hibernate学习笔记之初体验
- cassandra 学习之旅<一> 初体验
- keras学习笔记之安装初体验
- 【深度学习与Theano】Theano学习之初体验
- node.js认识学习四:node之初之体验
- 第四周上机实践项目2——分数类的雏形
- 字符串匹配-KMP算法
- Struts2中内存溢出(java.lang.OutOfMemoryError)异常错误介绍和解决方法
- 2015NCHU第一届ACM新生选拔赛I题题解
- 数据库连接问题——未找到或无法访问服务器
- 三层学习之初体验
- kruskal 【MST】
- js date 时间初始化
- CSS3 DIY浏览器滚动条样式
- 2015NCHU第一届ACM新生选拔赛J题题解
- Greenplum中定义数据库对象之创建与管理数据库
- 数据结构学习——树的基本分类
- Textons介绍
- Java Socket编程 文件传输(客户端从服务器下载一个文件)