三层架构

在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构,这里的分层不是指物理分层,而是指逻辑

上的层次。分层的目的是为了实现“高内聚,低耦合”的思想。有利于系统后期的维护、更新或者移植。通常意义

上的三层架构就是将整个业务应用划分为:界面层、业务逻辑层、数据访问层。每一层都职责明确。





图片来自网络

概念简介

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

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

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

表示层

位于最外层(最上层),离用户最近。用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。

业务逻辑层

业务逻辑层(Business Logic Layer)无疑是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的

制定、业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很

多时候,也将业务逻辑层称为领域层。例如Martin Fowler

Patterns of Enterprise Application Architecture》一书中,将整个架构分为三个主要的层:表示层、领域

层和数据源层。作为领域驱动设计的先驱Eric Evans,对业务逻辑层作了更细致地划分,细分为应用层与领域层,

通过分层进一步将领域逻辑与领域逻辑的解决方案分离。   业务逻辑层在体系架构中的位置很关键,它处于数

据访问层与表示层中间,起到了数据交换中承上启下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下

的,底层对于上层而言是无知的,改变上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时,

遵循了面向接口设计的思想,那么这种向下的依赖也应该是一种弱依赖关系。因而在不改变接口定义的前提下,理

想的分层式架构,应该是一个支持可抽取、可替换的抽屉式架构。正因为如此,业务逻辑层的设计对于一个支

持可扩展的架构尤为关键,因为它扮演了两个不同的角色。对于数据访问层而言,它是调用者;对于表示层而言,

它却是被调用者。依赖与被依赖的关系都纠结在业务逻辑层上,如何实现依赖关系的解耦,则是除了实现业务逻辑

之外留给设计师的任务。 

数据层

数据访问层:有时候也称为是持久层,其功能主要是负责数据库的访问,可以访问数据库系统、二进制文件、文本

文档或是XML文档。

简单的说法就是实现对数据表的SelectInsertUpdateDelete的操作。如果要加入ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化。

DAL层:

        /// <summary>
        /// 数据库连接字段
        /// </summary>
        static string sqlstr = ConfigurationManager.ConnectionStrings[""].ConnectionString;
        /// <summary>
        /// 执行查询语句
        /// </summary>
        /// <param name="command">查询语句</param>
        /// <returns></returns>
        public static int happ(string command)
        {
            SqlConnection conn = new SqlConnection(sqlstr);
            SqlCommand comm = new SqlCommand(command,conn);
            int result = 0;
            try
            {
                conn.Open();
                result=comm.ExecuteNonQuery();
            }
            catch
            {
                throw;
            }
            finally
            {
                if (conn.State==ConnectionState.Open)
                {
                    conn.Close();
                }
            }
            return result;
        }
        /// <summary>
        /// 执行非查询语句
        /// </summary>
        /// <param name="select">增删改语句</param>
        /// <returns></returns>
        public static DataTable sda(string select)
        {
            SqlDataAdapter sda = new SqlDataAdapter(select,sqlstr);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            return dt;
        }

BLL层:

        /// <summary>
        /// 获取指定学生的成绩
        /// </summary>
        /// <param name="id">学号</param>
        /// <returns></returns>
        public static List<Marks> getMarks(int id)
        {
            return MarksService.getMarks(id);
        }

        /// <summary>
        /// 获取全部成绩
        /// </summary>
        /// <returns></returns>
        public static List<Marks> getMarks()
        {
            return MarksService.getMarks();
        }

        /// <summary>
        /// 添加成绩
        /// </summary>
        /// <param name="mark">成绩</param>
        /// <returns></returns>
        public static bool addMarks(Marks mark)
        {
            return MarksService.addMarks(mark);
        }

        /// <summary>
        /// 修改成绩
        /// </summary>
        /// <param name="mark">成绩</param>
        /// <returns></returns>
        public static bool updateMarks(Marks mark)
        {
            return MarksService.updateMarks(mark);
        }

        /// <summary>
        /// 删除成绩
        /// </summary>
        /// <param name="mark"></param>
        /// <returns></returns>
        public static bool deleteMarks(Marks mark)
        {
            return MarksService.deleteMarks(mark);
        }

MODEL层:

 private int sid;

        /// <summary>
        /// 学号
        /// </summary>
        public int Sid
        {
            get { return sid; }
            set { sid = value; }
        }

        private string name;

        /// <summary>
        /// 姓名
        /// </summary>
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        private string sex;

        /// <summary>
        /// 性别
        /// </summary>
        public string Sex
        {
            get { return sex; }
            set { sex = value; }
        }

优点

1、开发人员可以只关注整个结构中的其中某一层;  

2、可以很容易的用新的实现来替换原有层次的实现;   

3、可以降低层与层之间的依赖;   

4、有利于标准化;   

5、利于各层逻辑的复用。 



猜你喜欢

转载自blog.csdn.net/qq_41851370/article/details/80223088