三层架构 订阅
三层架构就是为了符合“高内聚,低耦合”思想,把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构,各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体,不同的对象模型的实体类一般对应于数据库的不同表,实体类的属性与数据库表的字段名一致。 [1]  三层架构区分层次的目的是为了 “高内聚,低耦合”。开发人员分工更明确,将精力更专注于应用系统核心业务逻辑的分析、设计和开发,加快项目的进度,提高了开发效率,有利于项目的更新和维护工作。 [2] 展开全文
三层架构就是为了符合“高内聚,低耦合”思想,把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构,各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体,不同的对象模型的实体类一般对应于数据库的不同表,实体类的属性与数据库表的字段名一致。 [1]  三层架构区分层次的目的是为了 “高内聚,低耦合”。开发人员分工更明确,将精力更专注于应用系统核心业务逻辑的分析、设计和开发,加快项目的进度,提高了开发效率,有利于项目的更新和维护工作。 [2]
信息
优    点
降低层与层之间的依赖 标准化 [1]
外文名
3-tier architecture [3]
分    类
表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL) [1]
中文名
三层架构 [3]
目    的
“高内聚,低耦合”的思想 [2]
应    用
应用服务器、应用客户端等 [1]
三层架构含义
三层架构主要是指将业务应用规划中的表示层 UI、数据访问层 DAL 以及业务逻辑层 BLL,其分层的核心任务是“高内聚低耦合”的实现。在整个软件架构中,分层结构是常见和普通的软件结构框架,同时也具有非常重要的地位和意义。这种三层架构可以在软件开发的过程中,划分技术人员和开发人员的具体开发工作,重视核心业务系统的分析、设计以及开发,提高信息系统开发质量和开发效率,进而为信息系统日后的更新与维护提供很大的方便。 [4] 
收起全文
精华内容
参与话题
问答
  • 软件分层的概念一直很模糊,也没有一个统一的标准,即使有些人明白三层架构的理念但却不会使用,不是如何创建三层架构。在网上发现了一个很不错的网站架构设计模式,分别介绍了单层架构,二层架构,三层架构,有例字...
  • 三层架构是哪三层 在本文中,我将详细解释3层体系结构。 因为它可以帮助ASP.net的新手。 考虑一个简单的场景,其中我们将使用三层体系结构将课程名称仅添加到数据库中。 首先在数据库中创建带有列的表 ...

    三层架构是哪三层

    在本文中,我将详细解释3层体系结构。 因为它可以帮助ASP.net的新手。

    考虑一个简单的场景,其中我们将使用三层体系结构将课程名称仅添加到数据库中。

    首先在数据库中创建带有列的表

    CourseID bigint,(主键,自动递增)
    CourseDesc Varchar(100)
    现在打开Visual Studio 2008,并通过以下方式创建一个新网站:
    文件->新建->网站
    之后,通过在web.config文件中添加连接字符串来创建与数据库的连接,如下所示:
    
      <appSettings>
        <add key="ConnString" value="server=MUDASSIR;database=dbCourse;Integrated Security=true;"></add> 
      </appSettings>
      <connectionStrings>
        <remove name="LocalSqlServer" />
        <remove name="LocalMySqlServer" />
      </connectionStrings> 
    现在创建一个aspx页面,通过该页面我们将新课程添加到表中。 标记将如下所示:
    
    <html>
    <body>
      <table>
        <tr>
          <td>
            <asp:Label ID="lblName" Text="Course Name" runat="server"></asp:Label>
          </td>
          <td>
            <asp:TextBox ID="txtName" runat="server" BorderStyle="Solid" BorderWidth="1px" ></asp:TextBox>
            <asp:RequiredFieldValidator ID="rfv" runat="server" ControlToValidate="txtName" ErrorMessage="*" SetFocusOnError="true"></asp:RequiredFieldValidator>
          </td>
        </tr>
        <tr>
          <td colspan="2" height="50px"></td>
        </tr>
        <tr>
          <td colspan="2">
            <asp:Button ID="btnAdd" Text="Add Course" runat="server" CausesValidation="true" OnClick="btnAdd_Click" />
            <asp:Button ID="btnCancel" Text="Cancel" runat="server" CausesValidation="false" OnClick="btnCancel_Click" />
          </td>
        </tr>
      </table>
    </body>
    </html> 
    在这里,我们添加了一个文本框和两个按钮。

    在解决方案资源管理器中右键单击App_Code,然后添加2个名为

    DALBAL DAL文件夹将包含将直接与数据库进行交互的类,而BAL文件夹将包含将作为DAL与Presentation层(前端)之间的桥梁的类。

    在App_Code中,右键单击DAL,然后选择Add New Item和Select Class。 命名

    CoursesTransaction.cs

    该类如下所示:

    
    using System;
    using System.Data;
    using System.Configuration;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Data.SqlClient; 
    /// <summary>
    /// Summary description for CoursesTransaction
    /// </summary>
    public class CoursesTransaction
    {
        #region variables
        public Int64 CourseID { get; set; }
        public string CourseDesc { get; set; }
        #endregion
        public CoursesTransaction()
        {
            //
            // TODO: Add constructor logic here
            //
        } 
        public void InsertCourse()
        {
            SqlConnection Conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnString"]);
            SqlCommand cmd = new SqlCommand("[dbo].[SP_CoursesInsertUpdate]", Conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@CourseDesc", CourseDesc);
            try
            {
                Conn.Open();
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally {
                Conn.Close();
            }
        } 
    }  
    此类仅包含一个将新课程插入数据库的函数。

    右键单击BAL文件夹,然后选择“添加新项”和“添加类”。 命名

    CoursesTransactionBAL.cs

    这个类将是这样的:

    
    using System;
    using System.Data;
    using System.Configuration;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq; 
    /// <summary>
    /// Summary description for CoursesTransactionBAL
    /// </summary>
    public class CoursesTransactionBAL
    {
        #region variables
        public Int64 CourseID { get; set; }
        public string CourseDesc { get; set; }
        #endregion
        CoursesTransaction obj = new CoursesTransaction();
        DataTable dt = new DataTable();
        public CoursesTransactionBAL()
        {
            //
            // TODO: Add constructor logic here
            //
        } 
        public void Insert()
        {
            obj.CourseDesc = CourseDesc;
            obj.InsertCourse();
        } 
    }  
    此类调用DAL的Class方法,并从表示层中获取“课程描述”,该步骤将在下一步显示。

    切换到AddCourse.aspx文件后面的代码

    并创建如下所示的Class对象:

    
     CoursesTransactionBAL obj = new CoursesTransactionBAL(); 
    然后编写一个将课程名称通过对象传递给BAL的方法,如下所示:
    
    private void Insert()
        {
            obj.CourseDesc = txtName.Text;
            obj.Insert();
        } 
    在按钮单击的click事件上调用此方法,如下所示:
    
     protected void btnAdd_Click(object sender, EventArgs e)
        {
            Insert();
            ClientScript.RegisterStartupScript(Page.GetType(), "OnLoad", "Alert();", true); 
        } 
    在这里,我在插入后调用了JavaScript函数,只是为了提醒用户该课程已成功添加。

    奇丽亚

    问候:

    穆达西尔

    翻译自: https://bytes.com/topic/asp-net/insights/942078-3-tier-architecture-explained

    三层架构是哪三层

    展开全文
  • 三层架构详细的介绍了三层架构

    千次下载 2008-12-08 22:35:08
    三层架构,详细的介绍了三层架构详细的介绍了三层架构详细的介绍了三层架构
  • 三层架构

    2020-09-20 19:13:23
    三层架构 图解

    三层架构

    • 图解
      在这里插入图片描述
    • MVC:servlet(C)、JSP视图(V)、service层和Dao层(M)
    • service层:在com.xx.项目名.service包下
    • web层:在com.xx.项目名.web包下
    • Dao层:在com.xx项目名.dao包下
    • 通过划分层来降低耦合度,提升复用性,更清晰
    展开全文
  • 一、架构之传统三层架构 传统三层架构是一种软件架构,是一种典型的、基于贫血模型的、面向过程的JavaWeb分层方式。该架构分为以下三个层次: 数据访问层(DAL - Data Access Layer)即对包括数据库在内的数据源...

    一、架构之传统三层架构

    传统三层架构是一种软件架构,是一种典型的、基于贫血模型的、面向过程的JavaWeb分层方式。该架构分为以下三个层次:

    1. 数据访问层(DAL - Data Access Layer)即对包括数据库在内的数据源进行操作的部分。
    2. 业务逻辑层(BLL - Business Logic Layer)即对业务数据进行逻辑处理的部分。
    3. 表现层(UI - User Interface)即与用户交互的部分。

    分层的目的是为了解耦和明确责任。开发人员可以只关心自己所负责的那一层,因为他只需要知道上一层提供了哪些接口,从而利用这些接口进行编程。而上一层的开发人员在不改变接口的情况下,可以任意地替换具体的实现,从而实现松耦合

    相比更传统的架构,三层架构有着明显的优势,但也有不可忽视的缺点。初期的JavaWeb在JSP内同时进行数据库读写、业务逻辑处理和页面渲染,简单而暴力。而今的架构,在JSP之上增加了一个处理业务逻辑的中间层和一个封装了数据库操作的数据访问层,毫无疑问造成了代码量的大幅度上升和效率的下降。

    本项目中,Mybatis承担数据访问的责任;SpringMVC包揽了页面渲染和请求调度;Spring的IoC和AOP组成了整个项目的支架;Spring的事务控制为业务逻辑层的一致性提供了强有力的保障。

    不同的语言、不同的框架对三层架构有不同的演绎,但殊途同归,业务数据的流向是一致的。下面以一个点菜的例子来示范这一点:

    二、架构之领域模型架构

    领域模型的概念源于2004年出版的经典著作《Domain-Driven Design –Tackling Complexity in the Heart of Software》(《领域驱动设计:软件核心复杂性应对之道》,简称DDD)。所谓领域,即软件所关注的主题区域:

    每个软件程序的目的都是为了执行某项活动,或是满足用户的某种需求。用户会把软件程序应用于某个主题区域,这个区域就是软件的领域。一些领域涉及物质世界,例如机票预订程序的领域中包括飞机乘客在内。有些领域则是无形的,例如会计程序的金融领域。——摘自《领域驱动设计》第一章

    该著作提出,设计软件分为两个步骤:

    1. 由领域专家、开发人员、设计人员就某一领域进行交流,从中发现领域概念,并根据需要,划定边界,将边界内的概念抽象为领域模型。
    2. 由领域模型驱动软件设计,用代码来实现该模型。

    基于此,DDDSample官网提出了另一种三层架构:

    如图,该架构分为界面(Interfaces)、应用(Application)和领域(Domain)三层,以及一个基础设施(Infrastructure),是一种基于充血模型的、面向对象的分层方式。其各层职责如下:

    2.1、界面层(Interface)

    负责所有与外部系统的交互,包括WebService、RMI或REST等。包括外观(Facade)、装配(Assembler)和数据传输对象(DTO)三类组件:

    1. DTO组件:因为领域对象不适合暴露给用户,因此需要在返回给用户之前,重新封装为DTO,只暴露我们希望暴露的内容。同时,DTO还有减少请求的次数、简化传输对象、避免代码重复等作用。
    2.  Assembler组件:正如其字面上的含义,Assembler是一个装配工人,负责DTO与领域对象的转换。
    3. Facade组件:Facade是外观模式的践行者,作用与传统三层架构的Controller类似,负责将一个或多个service方法组合起来,然后封装为一个接口提供为外部系统。换句话说,他负责将外部请求委派给一个或多个service进行处理。他本身不处理任何业务逻辑。

    2.2、应用层(Application)

    应用层的主要组件就是Service,其粒度与传统三层架构的service一致。差别在于,传统三层架构的service层负责业务逻辑的处理,而领域模式三层架构的service只负责将业务委派给领域对象进行处理。

    2.3、领域层(Domain)

    这一层是整个软件的核心,几乎包括了所有的业务逻辑。他包括了Entity(实体)、Value Object(值对象)、Domain Event(领域事件)和Repository(仓储)等领域组件。下面以时下很火的共享自行车为例来简单解释这几个组件:

    1. Entity/Value Object:实体是一个在业务领域有着唯一标识的对象。实体有属性和状态,有业务行为,其业务行为会影响他的属性和状态。而值对象呢,用于描述没有唯一标识的对象。
    2. Domain Event:简单的说,实体触发事件,实体绑定事件。用户的租赁行为会触发租赁事件;而自行车绑定了租赁事件,当事件发生时,自行车的使用状态发生改变。
    3. Repository:仓储类似于传统三层架构的DAO接口,但只是接口,不包括实现。

    举个栗子,当我们希望对每一辆共享自行车进行管理时,他应该被设计为实体,有唯一编号作为标识,有颜色、重量、价格、品牌等属性,有位置状态、使用状态,有租赁行为。当其被租赁时,其位置状态和使用状态可能发生改变。

    同样是共享自行车,如果我们的系统只为了统计各地区各品牌自行车的使用情况,即我们只关心他是什么,而不关心他是谁,那么他应该被设计为值对象。

    2.4、基础设施(Infrastructure)

    作为基础设施,Infrastructure负责给三层架构提供支持。所有与具体平台、框架相关的实现都会在这一层实现,以免影响三层架构职责的纯粹性、以及污染领域模型。对象持久化的具体实现也放在基础设施里。

    三、传统三层架构 VS 领域模型架构

    从领域模型架构各层的职责可以看出,他和传统三层架构最大的差别在于,领域模型架构的业务逻辑包含在领域模型里,而传统三层架构的业务逻辑在Service层。为了实现这一点,领域模型还引入了在Javascript和ActionScript中常见的事件机制;而传统三层架构中,领域模型的属性和行为严格分离,变成了POJO和Service

    个人认为,两种架构的出发点是相同的,一样是先挖掘领域概念,然后建模,再根据模型进行设计。差别在于,当业务逻辑的复杂程度在单个开发人员或单个团队的把控能力范围之内时,采用面向过程的传统三层架构可以很快地完成建模工作,并开始业务逻辑的设计;而当业务逻辑复杂到一定程度时,则有必要花更多的时间用在建模上,去抽取模型的行为,去设计和关联模型事件,以期在后续迭代中,开发人员只需面对一个个可以清晰地理解的领域对象,而不是一坨动辄上千行的某业务行为的逻辑代码。

    综上考虑,大部分web系统可以采用传统三层架构。

    四、模型的形态

    不同的架构、不同的层、不同的应用场景中有着不一样的建模需求,因此表述相同概念的模型可能会有不同的“形态”,例如:

    1. 充血模型 - 领域模型架构中包含了领域逻辑和领域属性的领域模型。
    2. 失血模型 - 传统三层架构中只有get/set方法,没有业务逻辑的POJO对象。
    3. 贫血模型 - 类似充血模型,但是不包括持久化相关逻辑。
    4. PO - Persistant Object,持久化对象,即DAO从JDBC取出来的对象。传统三层架构中,PO即POJO组件中的对象,存在于DAO和Service之间。
    5. DO - Domain Object,领域对象。领域模型架构中,PO从数据库取出来后,有一个“重建”的概念,即根据数据还原实体,这个被还原的实体就是DO,存在于DAO和Service之间。
    6. DTO - Data Transfer Object,数据传输对象。上面在领域模型架构的界面层提过。对传统三层架构来说,该对象存在于Service和Controller之间。PO到DTO的转换可以在service实现,也可以在controller实现。本教程在Service进行转换。
    7. VO - View Object,视图对象。Controller在返回DTO给视图时,可能还需要包括状态信息—例如操作成功/失败的状态吗、提示文本等—这时就需要在DTO外面再包一层,即View Object。该对象存在于Controller和Web之间,由Controller进行装配。

    四、MVC模式

    跟架构密切相关的另一个词汇是MVC模型,即Model-View-Controller模式。MVC模式是一种设计软件的模式,不是一种架构。在传统三层架构中,MVC的理念被应用在表现层:View提交请求数据给Controller,Controller返回数据用于渲染View,两者之间以Model(VO - ViewModel)的形式进行通信。如下图:

    参考文章地址:https://my.oschina.net/mzdbxqh/blog/865046

     

    展开全文
  • .NET三层架构三层架构下GridView控件增删改操作详解 适合初学者学习三层架构,讲解详细
  • C# 三层架构与七层架构

    热门讨论 2019-02-10 21:24:25
    三层架构通常意义上讲的就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。 具体又分为:界面外观层、界面规则层、业务接口层、业务逻辑层、实体层、数据访问层、数据存储层共七层。...

    前言
    学习三层的时候对于这三层有了大致的了解,但是还是说不出个一二,今天试着总结一下,将自己的知识重新梳理一遍。


    三层架构

    • 概念
      三层架构通常意义上讲的就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。
      具体又分为:界面外观层、界面规则层、业务接口层、业务逻辑层、实体层、数据访问层、数据存储层共七层。
    • 为什么要分层?
      为了解耦,高内聚,低耦合
    • 提示
      三层架构指的不是一定要分三层,可以按照项目的大小与复杂程度来划分层次,相当于N-Tier(多层架构)

    详细解释

    • UI(表示层):与用户交互,接收数据、输入数据、显示数据。
      ——UI层除了一些简单的逻辑判断外不应包含任何逻辑;
    • BLL(业务逻辑层):UI与DAL的桥梁,业务逻辑在这里实现。
      ——这一层可以分为很多子层;
      ——事务的处理在BLL中进行;
      ——逻辑层影响着整个系统的可扩展性、可维护性和可复用性;
    • DAL(数据访问层):连通数据库,对数据进行增、删、改、查
      ——一般也分为两层,主要将DAL层中的共有操作抽象出来,例:SqlHelper
    • Entity(实体层):贯穿于三层之间,连接着三层。
      在这里插入图片描述

    在网上进行了许多的搜索,也看了很多关于三层的博客,最简单的三层UI\BLL\DAL,不过三层也可以有很多的划分,它不仅仅是字面意思的只有三层结构,根据不同的角度我们可以细分出不一样的层数,这都是跟实际需要挂钩的。 不知道是我自己的搜索能力欠佳还是什么原因,在探索七层的过程中,我发现七层好像有很多的版本,到底哪个是对的呢?它们之间有关联吗?还是说它们都是对的?对此我有些迷惑,我将这些在下面都罗列了出来,稍稍进行一下分析

    七层架构
    【1】UI Facade BLL Factory IDAL DAL Model
    【2】UI Facade BLL Factory IDAL DAL ConcreteFactory
    【3】UI Facade BLL Factory IDAL DAL sqlHelp
    【4】界面外观层 界面规则层 业务接口层 业务规则层 实体层 数据访问层 数据库层

    我们可以看出前三种形式,除了最后一层不同以外,其他六层都是相同的。


    目前的三层与七层的总结,就先告一段落。因为我要去实践,我发现自己很多次的知识总结都是在看完理论知识后进行的,在网络中获取了显性知识后因为没有经历所以无法结合自己的经历将显性知识转化成自己的隐性知识,也就无法将自己的隐性知识转化成属于自己的显性知识。现在终于明白是哪里出了问题了,没有自己的隐性知识那怎么可以总结出好的博客呢?所以,现在要去实践了。

    本博客未完待续…

    展开全文
  • VS 三层架构

    2019-08-26 16:48:27
    三层架构 三层架构数据流程图 ...
  • 三层架构 详解

    2020-06-04 09:13:16
    文章目录前言什么是三层架构?为什么要用三层架构?优缺点:怎么用三层架构?实例演练: 前言 当看到一个陌生的名词时你会怎么想?what?way?how? 现在就按照这个思维框架走进“三层架构”。 什么是三层架构? 在...
  • c#三层架构项目开发的全过程,包括三层架构源码、架构文档、模块设计说明书、演示PPT等完整 项目操作手册 项目架构文档 项目模块设计说明书 项目演示PPT 项目三层架构源码
  • c#三层架构

    千次阅读 2019-07-04 16:11:49
    最近公司需要用c#,就简单看了一下三层架构三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data ...
  • JavaWeb三层架构详解

    万次阅读 多人点赞 2018-10-15 21:11:21
    什么是三层架构三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分...
  • 软件三层架构

    千次阅读 2018-05-29 09:12:33
    三层架构编辑词条三层架构(2)三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想...

空空如也

1 2 3 4 5 ... 20
收藏数 23,802
精华内容 9,520
关键字:

三层架构