三层架构(我的理解及详细分析)

合集下载

三层架构详解范文

三层架构详解范文

三层架构详解范文三层架构是一种软件设计模式,将应用程序分为三个主要层次:表示层、业务逻辑层和数据访问层。

每个层次都具有不同的职责和功能,使得系统更易于维护、扩展和测试。

1.表示层:表示层是用户与系统之间的接口,负责接收用户输入、展示输出结果。

它是系统的外部界面,可以是一个网页、桌面应用程序、移动应用程序等。

表示层通常包括用户界面设计、用户体验设计和前端开发等方面,它负责与用户进行交互,将用户的请求传递给业务逻辑层进行处理,并将处理结果展示给用户。

2.业务逻辑层:业务逻辑层是系统的核心,负责处理系统的业务逻辑。

它包括了业务规则、工作流程和数据处理等方面。

业务逻辑层接收来自表示层的请求,根据业务规则进行数据处理和业务逻辑的计算,最后将结果返回给表示层。

在这个层次上,开发人员可以将系统的业务逻辑进行封装,使得系统的可复用性和可维护性更高。

3.数据访问层:数据访问层是负责对数据进行持久化存储和访问的层次。

它包括了数据库的管理和访问,以及与其他数据源的交互等。

数据访问层将业务逻辑层的数据请求转化为数据库操作,通过与数据库进行交互来进行数据的增删改查。

在这个层次上,开发人员可以实现数据缓存、事务管理、数据访问的优化等功能。

三层架构的主要优点有:1.松耦合:三层架构将整个系统分为三个独立的层次,各层次之间通过接口进行交互,使得各层次之间的耦合度降低。

这样,在修改或拓展其中一层次的功能时,不会对其他层次造成影响,提高了系统的灵活性和可维护性。

2.可扩展性:由于每个层次都有明确的功能和职责,因此可以很容易地拓展系统的功能。

例如,可以通过增加实现新的表示层、业务逻辑层或者数据访问层来实现系统功能的扩展。

3.可测试性:每个层次的功能相对独立,因此可以单独对每个层次进行测试。

这样可以更容易地进行单元测试和集成测试,提高了系统的可测试性和稳定性。

4.可维护性:三层架构将系统分为多个层次,使得每个层次的功能和职责更加清晰明确,减少了系统的复杂性。

三层架构简易实例详解

三层架构简易实例详解

三层架构简易实例详解何为三层架构?通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。

区分层次的目的即为了“高内聚,低耦合”的思想。

1.表现层(UI):即展现给用户的界面;2.业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理;3.数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、查找等。

下面通过通过一个简单的例子来描述三层架构:需求1.实现一个客户信息管理界面(包括增加、修改、删除)操作;2.用户sql—server作为数据库以下是成型界面,至于UI设计是否合理,望各位大神拍砖UI层设计设计器代码:<Grid><DockPanel><ToolBar DockPanel.Dock="Top" Height="30"><Button Name="BtnAdd" Click="BtnAdd_Click" ToolTip="新增"><Image Source="Image\add.ico"></Image></Button><Button Name="BtnEdit" Click="BtnEdit_Click" ToolTip="编辑"><Image Source="Image\edit.ico"></Image></Button><Button Name="BtnDel" Click="BtnDel_Click" ToolTip="删除"><Image Source="Image\delete.ico"></Image></Button></ToolBar><DataGrid Name="DataGrid1" DockPanel.Dock="Top" IsReadOnly="True" AutoGenerateColumns="False"><DataGrid.Columns><DataGridTextColumn Header="姓名" Binding="{Binding Name}"></DataGridTextColumn><DataGridTextColumn Header="生日" Binding="{Binding BirthDay}"></DataGridTextColumn><DataGridTextColumn Header="电话" Binding="{Binding TelNum}"></DataGridTextColumn><DataGridTextColumn Header="地址" Binding="{Binding Address}"></DataGridTextColumn><DataGridTextColumn Header="等级" Binding="{BindingCustlevel}"></DataGridTextColumn></DataGrid.Columns></DataGrid></DockPanel></Grid>主要是通过设计器后台代码,DataGrid控件绑定数据,代码如下:/// <summary>/// 初始化加载数据/// </summary>private void LoadData(){DataGrid1.ItemsSource = CustomDAL.GetAll();}数据业务逻辑代码如下:/// <summary>/// 新增/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void BtnAdd_Click(object sender, RoutedEventArgs e){CustomEditUI editUI = new CustomEditUI();editUI.isInsert = true;if (editUI.ShowDialog() == true){LoadData();}}/// <summary>/// 编辑/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void BtnEdit_Click(object sender, RoutedEventArgs e){Custom customer = (Custom)DataGrid1.SelectedItem;if (customer == null){MessageBox.Show("请选择要编辑的行!");return;}CustomEditUI editUI = new CustomEditUI();//添加标识便于区分是编辑保存还是新增保存editUI.isInsert = false;editUI.editId = customer.Id;if (editUI.ShowDialog() == true){LoadData();}}/// <summary>/// 删除/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void BtnDel_Click(object sender, RoutedEventArgs e){if (MessageBox.Show("确认删除此条数据?", "提醒", MessageBoxButton.YesNo) == MessageBoxResult.Yes){Custom custom = DataGrid1.SelectedItem as Custom;if (custom != null){if ((MessageBox.Show("确认要删除此调数据", "提醒") == MessageBoxResult.OK)){CustomDAL.Delete(custom.Id);LoadData();}}else{MessageBox.Show("请选择要删除的数据", "提醒");return;}}}数据访问层(DAL),代码如下:public class CustomDAL{/// <summary>/// 查询数据总条数/// </summary>/// <returns></returns>public static int GetCount(){return (int)SqlHelper.ExecuteScalar("select * from T_Custom");}/// <summary>///根据ID查询数据/// </summary>/// <param name="id"></param>/// <returns></returns>public static Custom GetByid(long id){DataTable table = SqlHelper.ExecuteDataTable("select * from T_custom where id=@id", new SqlParameter("@id", id));return ToCustom(table.Rows[0]); ;}/// <summary>/// 根据id删除数据/// </summary>/// <param name="id"></param>public static void Delete(long id){SqlHelper.ExecuteNonQuery("delete from T_custom where id=@id", new SqlParameter("@id", id));}/// <summary>/// 插入空值处理/// </summary>/// <param name="value"></param>/// <returns></returns>public static object FromDBNull(object value){if (value == null){return DBNull.Value;}else{return value;}}/// <summary>/// 查询空值处理/// </summary>/// <param name="value"></param>/// <returns></returns>public static object ToDBNull(object value){if (DBNull.Value == null){return null;}else{return value;}}/// <summary>/// 新增数据/// </summary>/// <param name="custom"></param>public static void InSert(Custom custom){SqlHelper.ExecuteNonQuery(@"insert into T_Custom(Name,Birthday,Address,Telnum,Custlevel)values(@Name,@Birthday,@Address,@Teln um,@Custlevel)",new SqlParameter("@Name", ),new SqlParameter("@Birthday", FromDBNull(custom.BirthDay)),new SqlParameter("@Address", custom.Address),new SqlParameter("@Telnum", custom.TelNum),new SqlParameter("@Custlevel", custom.Custlevel));}/// <summary>/// 更新数据/// </summary>/// <param name="custom"></param>public static void UpDate(Custom custom){SqlHelper.ExecuteNonQuery(@"update T_Custom set Name=@Name,Birthday=@Birthday,Address=@Address,Telnum=@Telnum,Custlevel=@Custlevel where id=@id",new SqlParameter("@Name", ),new SqlParameter("@Birthday", FromDBNull(custom.BirthDay)),new SqlParameter("@Address", custom.Address),new SqlParameter("@TelNum", custom.TelNum),new SqlParameter("@Custlevel", custom.Custlevel),new SqlParameter("@Id", custom.Id));}/// <summary>/// 查询所有数据/// </summary>/// <returns></returns>public static List<Custom> GetAll(){DataTable table = SqlHelper.ExecuteDataTable("select * from T_custom");List<Custom> lst = new List<Custom>();for (int i = 0; i < table.Rows.Count; i++){lst.Add(ToCustom(table.Rows[i]));}return lst;}/// <summary>/// 影射关系赋值/// </summary>/// <param name="row"></param>/// <returns></returns>public static Custom ToCustom(DataRow row){Custom custom = new Custom(); = row["Name"].ToString();custom.Address = row["Address"].ToString();custom.BirthDay = (DateTime?)ToDBNull(row["BirthDay"]);custom.TelNum = row["TelNum"].ToString();custom.Custlevel = (int)row["CUstlevel"];custom.Id = (long)row["id"];return custom;}}public class SqlHelper{private static string connstr = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;/// <summary>/// 查询数据/// </summary>/// <param name="sql"></param>/// <param name="parameters"></param>/// <returns></returns>public static Object ExecuteScalar(string sql, params SqlParameter[] parameters){using (SqlConnection cnn = new SqlConnection(connstr)){cnn.Open();using (SqlCommand cmd = cnn.CreateCommand()){mandText = sql;cmd.Parameters.AddRange(parameters);return cmd.ExecuteScalar();}}}/// <summary>/// 增、删、改操作/// </summary>/// <param name="sql"></param>/// <param name="parameters"></param>public static void ExecuteNonQuery(string sql, params SqlParameter[] parameters){using (SqlConnection cnn = new SqlConnection(connstr)){cnn.Open();using (SqlCommand cmd = cnn.CreateCommand()){mandText = sql;cmd.Parameters.AddRange(parameters);cmd.ExecuteNonQuery();}}}/// <summary>/// 单个查询结果返回/// </summary>/// <param name="sql"></param>/// <param name="parameters"></param>/// <returns></returns>public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters){using (SqlConnection cnn = new SqlConnection(connstr)){cnn.Open();using (SqlCommand cmd = cnn.CreateCommand()){mandText = sql;cmd.Parameters.AddRange(parameters);SqlDataAdapter apter = new SqlDataAdapter(cmd);DataSet dataset = new DataSet();apter.Fill(dataset);return dataset.Tables[0];}}}}业务模型层public class Custom{public long Id { set; get; }public string Name { set; get; }public DateTime? BirthDay { set; get; }public string Address { set; get; }public string TelNum { set; get; }public int Custlevel { set; get; }}业务模型层public class Custom{public long Id { set; get; }public string Name { set; get; }public DateTime? BirthDay { set; get; }public string Address { set; get; }public string TelNum { set; get; }public int Custlevel { set; get; } }上述用思想,图形表示如下:。

三层架构简易实例详解

三层架构简易实例详解

三层架构简易实例详解三层架构是一种软件设计模式,它将软件系统分为三个层次:表现层、业务逻辑层和数据访问层。

每个层次都有特定的职责,通过分层的方式提高了系统的可维护性、可扩展性和可复用性。

以下是一个简单的示例来解释三层架构的概念:1. 表现层(Presentation Layer):这是用户与系统交互的界面。

它负责接收用户的输入、展示数据和呈现界面效果。

可以使用 Web 页面、桌面应用程序或移动应用程序等来实现。

2. 业务逻辑层(Business Logic Layer):该层处理系统的核心业务逻辑。

它接收来自表现层的请求,执行相应的业务规则和计算,并与数据访问层进行交互以获取和保存数据。

3. 数据访问层(Data Access Layer):这一层负责与数据库或其他数据源进行交互。

它封装了数据的读取、写入、修改和查询操作,提供了一个统一的数据访问接口。

以下是一个简单的示例,以在线书店为例:1. 表现层:用户通过网站或移动应用程序浏览图书列表、查看图书详细信息、添加到购物车和进行结算。

2. 业务逻辑层:处理用户的请求,例如检查购物车中的图书数量、计算价格、应用折扣等。

它还负责与数据访问层交互以获取图书信息和保存用户的订单。

3. 数据访问层:与数据库进行交互,执行图书的查询、插入、更新和删除操作。

通过将系统划分为三层,每层专注于特定的职责,可以提高代码的可维护性和可复用性。

当需求发生变化或需要进行系统扩展时,只需修改相应层次的代码,而不会影响其他层次。

这种分层的架构也有助于团队协作和开发效率。

请注意,这只是一个简单的示例,实际的三层架构应用可能会更加复杂,并涉及更多的模块和技术。

具体的实现方式会根据项目的需求和规模而有所不同。

三层架构的理解

三层架构的理解

对三层架构的理解(个人感悟)本人和大家一样,刚刚步入工作,在一家网络公司做 开发,面试的时候经理问我,你对三层架构的理解,当时在学习的时候只是偶然看到书上的解释,我也只是记住了名字而已,我就回答说:表现层,逻辑层,数据层,把经理给唬过去了,(估计他也不懂。

开个玩笑)。

刚刚做完一个项目,虽然只是花了一个星期的小项目,一个人独立完成。

做完之后,问题来了,做了一个后台管理,其中一个cs里面竟然有一千多行代码,当时客户提出问题,当我修改源码的时候,我看的那是个头晕啊,原因是什么,1000多行代码,找又难找,而且所有方法写在一块,不晕才怪。

吃了一回苦头,回家找找问题,在网上查了一些关于三层的资料,下面就我开发项目的经验,和一些资料谈谈我对三层的见解,我认为我写的东西应该很容易看懂的,初学者可以认真看看。

保证能看懂。

进入正题:三层架构,哪三层?USL(User Show Layer)表现层—通俗点说就是给客户看的。

BLL(Business Logic Layer)业务逻辑层—对数据逻辑的处理。

DAL(Data Access Layer)数据访问层—对数据库操作。

我当时有个疑问,为什么要有三层,我们面向对象不是挺方便的,用户登录—检查用户名、密码—连接数据库对比数据,刚好三个方法,调用三个函数,搞定。

当然,对于这种简单的,单页面的web,代码量少的页面,可以不分层,分层反而显得麻烦,减缓运行速度,如果是做一个项目,20几个页面,如果不分层,那就会出现像我刚刚说的,1000多行代码,看的眼花,而且不好修改。

三层怎么用?就拿FileUpload,Reaperter来说吧。

FileUpload:USL 当然放页面,呈现给用户,使用者看。

BLL层可以做检查文件是否为空,文件大小等,限制上传大小也得在BLL做,有很多人把BLL当作一个传值层,不可取,其实BLL能做很多东西,仅次于DAL的重要性,所有要懂得灵活运用BLL层。

三层架构 BS架构

三层架构 BS架构

B/S结构简化了客户机的工作,把二层C/S结构的事务处理逻辑模块从客户机的任务中分离出来,由Web服务器单独组成一层来负担其任务,从而减轻了客户机的压力三层架构(3-tier三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。

区分层次的目的即为了“高内聚,低耦合”的思想。

1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。

2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。

3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。

在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。

微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或成为领域层)、表示层。

三层结构原理:3个层次中,系统主要功能和业务逻辑都在业务逻辑层进行处理。

所谓三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。

这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上。

三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。

通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM 通讯与中间层建立连接,再经由中间层与数据库进行交互。

表示层位于最外层(最上层),离用户最近。

用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。

业务逻辑层业务逻辑层(Business Logic Layer)无疑是系统架构中体现核心价值的部分。

它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候,也将业务逻辑层称为领域层。

三层架构详解范文

三层架构详解范文

三层架构详解范文
三层架构是由客户端(终端)-服务器端(网络)-数据库服务器(数
据库)组成的三层结构,主要应用于客户端和服务器之间的应用架构,为
客户端和服务器之间的通信和数据存储提供一种简单、高效、可靠的解决
方案。

一、客户端:客户端是三层架构的直接参与者,它完成了用户的信息
执行功能。

它容易被用户认可,用户可以快速完成基本的操作。

客户端可
以有各种形式,如PC,移动端,Web应用等。

二、服务器端:服务器端是三层架构的核心,它充当着客户端和数据
库服务器之间数据传输的桥梁或中介。

它收到客户端的请求,然后向数据
库服务器发出信息查询请求,从而获得需要的数据。

它把客户端发来的请
求和服务端自身的其他功能结合起来,完成客户端的数据查询和处理功能,进而把处理好的数据回传给客户端,实现数据的快速查找和处理。

三、数据库服务器:数据库服务器是三层架构的最后一层,它是全部
信息源的中心,它负责存储、管理和维护系统各种信息,如文件、数据等。

从性能方面来看,这一层是最重要的,因为它负责处理最多的数据,而且
这些数据经过其他层处理后,最后都要以其中一种形式存储在数据库服务
器上。

三层架构-------理论篇

三层架构-------理论篇

三层架构-------理论篇概念:通常意义上的三层架构就是将整个业务应⽤划分为:表现层(UI)、业务逻辑层(BLL)、数据訪问层(DAL)。

区分层次的⽬的即为了“⾼内聚。

低耦合”的思想。

各层概念1、表现层(UI):通俗讲就是展现给⽤户的界⾯。

即⽤户在使⽤⼀个系统的时候他的所见所得。

2、业务逻辑层(BLL):针对详细问题的操作,也能够说是对数据层的操作,对数据业务逻辑处理。

3、数据訪问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、改动、查找等。

注:应⽤三层离不开还有⼀个重要的类:实体类,如今接触的主要是数据库表抽象出的类,表中的每⼀个字段就是⼀个详细实例。

相同跟业务实体相关的事物都能够成为实体类。

各层的作⽤1、数据訪问层:从数据源载⼊数据(Select)。

向数据源写⼊数据(Insert/Update);从数据源删除数据(Delete).是对数据的操作。

⽽不是数据库。

详细为业务逻辑层或表⽰层提供数据服务,不包括不论什么与业务相关的逻辑处理。

2、业务逻辑层:从DAL中获取数据,以供UI显⽰⽤;从UI获取⽤户指令和数据,运⾏业务逻辑。

从UI中获取⽤户指令和数据,通过DAL写⼊数据源。

对数据层的操作。

对数据业务逻辑处理。

职责机制:UI->BLL->UI;UI->BLL->DAL->BLL->UI3、表⽰层:从向⽤户展现特定业务数据;採集⽤户的输⼊信息和操作。

主要表⽰WEB⽅式和WINFROM⽅式。

原则:⽤户⾄上,兼顾简洁。

4、实体类:对于表⽰层来说,界⾯通过实体类传递数据。

将解析实体对象中封装的数据展⽰给⽤户;将⽤户请求的数据封装到实体对象中。

对于业务逻辑层来说,将接受到的实体对象传递到下⼀层;依据⽤户请求对实体中数据进⾏处理。

对于数据訪问层来说,从数据库取得数据通过实体类返回。

三层关系图添加实体后的关系图优缺点长处开发者仅仅关注整个结构中的当中某⼀层;能够⾮常easy的⽤⼼的实现来替换原有层次的实现;能够减少层与层之间的依赖;有利于标准化;利于个曾逻辑的复⽤;结构更加的明⽩。

三层架构详细的介绍了三层架构

三层架构详细的介绍了三层架构

三层架构详细的介绍了三层架构
三层架构是当前计算机网络技术中一种常用的模型,它将整个网络系
统分成三个不同的层次:应用层、传输层和网络层。

三层架构的设计概念
是“分而治之”,即把整个网络的工作任务分解成若干个独立的层,每个
层对下面一层只有非常有限的了解,而且不用理会其他层的活动情况,只
负责和本层有直接关系的活动,从而使网络的复杂性降低,操作用户也更
加容易掌握。

下面将详细介绍三层架构的每一层内容。

(一)应用层
应用层是计算机网络中最高的一层,它的主要功能是负责为用户提供
服务,为用户实现与网络的交互和通信,并且能够完成数据传输的功能。

应用层的技术包括:FTP(文件传输协议)、SMTP(简单邮件传输协议)、HTTP(超文本传输协议)、TELNET(网络终端协议)、SNMP(简单网络管
理协议)等协议,都是在应用层完成其功能。

(二)传输层
传输层是一个中间层,它的主要功能是完成数据的传输、控制和检验
操作,并且能够在发送端和接收端之间建立可靠的数据传输链路。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

三层架构(我的理解及详细分析)
三层架构已经学了一段时间,一直想做一个比较完整、比较完美的总结。

但是左思右想,不知道如何下笔。

都说万事开头难嘛,今天整理了一下凌乱的思路,哎,还是没整理好,想到哪就说到哪吧。

初学者很不理解:
1,什么是三层?
2,为什么使用三层?
3,三层与以往使用的两层相比有什么不同?它的优势在哪里?
4,如何学好三层?如何应用三层?
……
这篇博客里我会给大家一一解释一下,略懂皮毛忘大家见谅!!!
米老师一直强调:让学习和生活结合,把学习和生活联系,这样的学习才叫会学习,会生活。

对于三层我左思右想,如何与实际相联系。

好嘛,昨晚突然有了“灵感”。

还记得大话设计模式里第23章大鸟和小菜吃羊肉串的故事——由在小摊吃到饭店吃引来的一个命令模式(当然今天不是研究命令模式)。

服务员、厨师、采购员。

这不就是个典型的三层架构吗???(⊙ o
⊙ )啊!哈哈(这个后面再做解释)
先了解:
1,什么是三层?
UI(表现层):主要是指与用户交互的界面。

用于接收用户输入的数据和显示处理后用户需要的数据。

BLL:(业务逻辑层):UI层和DAL层之间的桥梁。

实现业务逻辑。

业务逻辑具体包含:验证、计算、业务规则等等。

DAL:(数据访问层):与数据库打交道。

主要实现对数据的增、删、改、查。

将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。

(当然这些操作都是基于UI层的。

用户的需求反映给界面(UI),UI反映给BLL,BLL反映给DAL,DAL进行数据的操作,操作后再一一返回,直到将用户所需数据反馈给用户)
每一层都各负其责,那么该如何将三层联系起来呢?
1&gt;单项引用(见下图)
2&gt;这时候实体层(Entity)来了。

(注:当然,实体层的作用不止这些)
Entity(实体层):它不属于三层中的任何一层,但是它是必不可少的一层。

Entity在三层架构中的作用:
1,实现面向对象思想中的"封装";
2,贯穿于三层,在三层之间传递数据;
(注:确切的说实体层贯穿于三层之间,来连接三层)
3,对于初学者来说,可以这样理解:每张数据表对应一个实体,即每个数据表中的字段对应实体中的属性(注:当然,事实上不是这样。

为什么?1>,可能我们需要的实体在数据表对应的实体中并不存在;2>,我们完全可以将所有数据表中的所有字段都放在一个实体里)
4,每一层(UI—&gt;BLL—&gt;DAL)之间的数据传递(单向)是靠变量或实体作为参数来传递的,这样就构造了三层之间的联系,完成了功能的实现。

但是对于大量的数据来说,用变量做参数有些复杂,因为参数量太多,容易搞混。

比如:我要把员工信息传递到下层,信息包括:员工号、姓名、年龄、性别、工资....用变量
做参数的话,那么我们的方法中的参数就会很多,极有可能在使用时,将参数匹配搞混。

这时候,如果用实体做参数,就会很方便,不用考虑参数匹配的问题,用到实体中哪个属性拿来直接用就可以,很方便。

这样做也提高了效率。

(注:这里为什么说可以暂时理解为每个数据表对应一个实体??答:大家都知道,我们做系统的目的,是为用户提供服务,用户可不关心你的系统后台是怎么工作的,用户只关心软件是不是好用,界面是不是符合自己心意。

用户在界面上轻松的增、删、改、查,那么数据库中也要有相应的增、删、改、查,而增删改查具体操作对象就是数据库中的数据,说白了就是表中的字段。

所以,将每个数据表作为一个实体类,实体类封装的属性对应到表中的字段,这样的话,实体在贯穿于三层之间时,就可以实现增删改查数据了)
综上所述:三层及实体层之间的依赖关系:
思想来源于生活:
服务员:只管接待客人;
厨师:只管做客人点的菜;
采购员:只管按客人点菜的要求采购食材;
他们各负其职,服务员不用了解厨师如何做菜,不用了解采购员如何采购食材;厨师不用知道服务员接待了哪位客人,不用知道采购员如何采购食材;同样,采购员不用知道服务员接待了哪位客人,不用知道厨师如何做菜。

他们三者是如何联系的?
比如:厨师会做:炒茄子、炒鸡蛋、炒面——此时构建三个方法(cookEggplant()、cookEgg()、cookNoodle())
顾客直接和服务员打交道,顾客和服务员(UI层)说:我要一个炒茄子,而服务员不负责炒茄子,她就把请求往上递交,传递给厨师(BLL层),厨师需要茄子,就把请求往上递交,传递给采购员(DAL层),采购员从仓库里取来茄子传回给厨师,厨师响应cookEggplant()方法,做好炒茄子后,又传回给服务员,服务员把茄子呈现给顾客。

这样就完成了一个完整的操作。

在此过程中,茄子作为参数在三层中传递,如果顾客点炒鸡
蛋,则鸡蛋作为参数(这是变量做参数)。

如果,用户增加
需求,我们还得在方法中添加参数,一个方法添加一个,一个方法设计到三层;何况实际中并不止设计到一个方法的更改。

所以,为了解决这个问题,我们可以把茄子、鸡蛋、面条作为属性定义到顾客实体中,一旦顾客增加了炒鸡蛋需求,直接把鸡蛋属性拿出来用即可,不用再去考虑去每层的方法中添加参数了,更不用考虑参数的匹配问题。

这样讲,不知道大家是不是可以明白。

(待会实例解释吧)
2,为什么使用三层?
使用三层架构的目的:解耦!!!
同样拿上面饭店的例子来讲:
(1)服务员(UI层)请假——另找服务员;厨师(BLL层)辞职——招聘另一个厨师;采购员(DAL)辞职——招聘另一个采购员;
(2)顾客反映:1&gt;你们店服务态度不好——服务员的问题。

开除服务员;
2&gt;你们店菜里有虫子——厨师的问题。

换厨师;
任何一层发生变化都不会影响到另外一层!!!
3,与两层的区别??
两层:
(当任何一个地方发生变化时,都需要重新开发整个系统。

“多层”放在一层,分工不明确耦合度高——难以适应需求变化,可维护性低、可扩展性低)
三层:
(发生在哪一层的变化,只需更改该层,不需要更改整个系统。

层次清晰,分工明确,每层之间耦合度低——提高了效率,适应需求变化,可维护性高,可扩展性高)
综上:三层架构的
优势:1,结构清晰、耦合度低,2,可维护性高,可扩展性高;3,利于开发任务同步进行;容易适应需求变化
劣势:1、降低了系统的性能。

这是不言而喻的。

如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相
应的数据,如今却必须通过中间层来完成。

2、有时会导致级联的修改。

这种修改尤其体现在自上而下的方向。

如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码
3、增加了代码量,增加了工作量
4,三层的具体表现形式??
UI:
(大家不要误会,UI层不只是一个个用户界面,也是需要有代码的)
(1,功能:用户输入数据、反馈给用户数据;2,大家观察代码:没有涉及到业务逻辑,直接传参、函数、方法调用,没有涉及到与数据库打交道的SQL语句和)
BLL:
(1,BLL是表示层与数据访问层之间的桥梁,负责数据处理、传递;2,大家观察代码,没有涉及到界面上的控件,没有涉及到SQL语句和)
DAL:
(1,以上是DAL层中DbUtil类、user_DA类和workRecord_DA类中的代码;2,大家观察代码,没有涉及到界面控件,没有涉及到业务逻辑;只有与数据库打交道的SQL语句和)
Entity(Model)层:
(定义了实体类user)
观察以上三层:
1,实体类user作为参数贯穿于三层之间;
2,通过传参、方法调用来实现功能;
3,各层之间各负其责;互不影响
对比两层结构,让大家深刻体会三层的极大好处:
还是以机房收费系统的登陆为例:
(观察上面的两层的代码:将业务逻辑、数据访问都展现在用户表现层,当需求需要改变时,需要改变整个系统。

比如,我把文本框txtPassWord的名称改为txtPwd的话,大家观察一下得需要更改多少地方。

这样的改动算是小的,如果真的有业务需求上的改动才叫麻烦复杂,程序员不跳楼才怪。

呵呵、、开个玩笑)
与如此难以适应需求变化的两层相比,大家再次观察三层代码,再次思考,三层架构有什么好处呢?自己思考。

自己去发掘吧!!!。

相关文档
最新文档