zoukankan      html  css  js  c++  java
  • 步步为营 .NET三层架构解析 六、BLL的设计

          BLL层,又叫业务逻辑层,顾名思义,就是放置业务逻辑的地方.

         业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时,遵循了面向接口设计的思想,那么这种向下的依赖也应该是一种弱依赖关系。因而在不改变接口定义的前提下,理想的分层式架构,应该是一个支持可抽取、可替换的“抽屉”式架构。正因为如此,业务逻辑层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同的角色。对于数据访问层而言,它是调用者;对于表示层而言,它却是被调用者。依赖与被依赖的关系都纠结在业务逻辑层上,如何实现依赖关系的解耦,则是除了实现业务逻辑之外留给设计师的任务。

         这里再说点题外话了,供大家娱了下.

         Martin Fowler在《企业应用架构模式》一书中对领域层(即业务逻辑层)的架构模式作了整体概括,他将业务逻辑设计分为三种主要的模式:Transaction Script、Domain Model和Table Module。

        Transaction Script模式将业务逻辑看作是一个个过程,是比较典型的面向过程开发模式。应用Transaction Script模式可以不需要数据访问层,而是利用SQL语句直接访问数据库。为了有效地管理SQL语句,可以将与数据库访问有关的行为放到一个专门的Gateway类中。应用Transaction Script模式不需要太多面向对象知识,简单直接的特性是该模式全部价值之所在。因而,在许多业务逻辑相对简单的项目中,应用Transaction Script模式较多。

        Domain Model模式是典型的面向对象设计思想的体现。它充分考虑了业务逻辑的复杂多变,引入了Strategy模式等设计模式思想,并通过建立领域对象以及抽象接口,实现模式的可扩展性,并利用面向对象思想与身俱来的特性,如继承、封装与多态,用于处理复杂多变的业务逻辑。唯一制约该模式应用的是对象与关系数据库的映射。我们可以引入ORM工具,或者利用Data Mapper模式来完成关系向对象的映射。

        与Domain Model模式相似的是Table Module模式,它同样具有面向对象设计的思想,唯一不同的是它获得的对象并非是单纯的领域对象,而是DataSet对象。如果为关系数据表与对象建立一个简单的映射关系,那么Domain Model模式就是为数据表中的每一条记录建立一个领域对象,而Table Module模式则是将整个数据表看作是一个完整的对象。虽然利用DataSet对象会丢失面向对象的基本特性,但它在为表示层提供数据源支持方面却有着得天独厚的优势。尤其是在.Net平台下,ADO.NET与Web控件都为Table Module模式提供了生长的肥沃土壤。

    进入正题了,来我们来进行customSystem.cs的设计:

     public class customSystem
        {
            public ICustom CustomSQL = new customSQL();
            /// <summary>
            /// 添加一条数据
            /// </summary>
            /// <param name="Custom"></param>
            /// <returns></returns>
            public int customADD(custom Custom)
            {
                if (Custom == null)
                {
                    return 0;
                }
                return CustomSQL.Addcustom(Custom);
            }
            /// <summary>
            /// 根据帐户名获取用户信息
            /// </summary>
            /// <param name="nename"></param>
            /// <returns></returns>
            public custom GetSinglename(string nename)
            {
                if (string.IsNullOrEmpty(nename))
                    return null;
                return CustomSQL.Getsinglecname(nename);
            }
            /// <summary>
            /// 更新用户信息(主要用于更改密码)
            /// </summary>
            /// <param name="Custom"></param>
            public void Updatepassword(custom Custom)
            {
                if (Custom == null)
                    return;
                CustomSQL.Updatepassword(Custom);
            }
            /// <summary>
            /// 获取用户列表
            /// </summary>
            /// <returns></returns>
            public List<custom> GetCustom()
            {
                return CustomSQL.Getcustom();
            }
            /// <summary>
            /// 根据ID删除用户信息
            /// </summary>
            /// <param name="nid"></param>
            public void Deletecustom(int nid)
            {
                if (nid <= 0)
                    return;
                CustomSQL.Deletecustom(nid);
            }
            /// <summary>
            /// 根据ID获取用户信息
            /// </summary>
            /// <param name="nid"></param>
            /// <returns></returns>
            public custom GetCutomer(int nid)
            {
                if (nid <= 0)
                    return null;
                return CustomSQL.Getcustomer(nid);
            }
            /// <summary>
            /// 更新用户信息
            /// </summary>
            /// <param name="Custom"></param>
            public void updatecustom(custom Custom)
            {
                if (Custom == null)
                    return;
                CustomSQL.updatecustom(Custom);
            }
            /// <summary>
            /// 根据部门ID获取整个部门用户
            /// </summary>
            /// <param name="nid"></param>
            /// <returns></returns>
            public List<custom> Getdepartcustom(int nid)
            {
                if (nid <= 0)
                    return null;
                return CustomSQL.Getdepartcustom(nid);
            }
        }
    
    
    

    接着我们再来看下departmentSystem.cs的设计:

       public class departmentSystem
        {
            public IDepartment DepartmentSQL = new departmentSQL();
            /// <summary>
            /// 添加一条部门信息
            /// </summary>
            /// <param name="Department"></param>
            /// <returns></returns>
            public int Adddepartment(department Department)
            {
                if (Department == null)
                    return 0;
                return DepartmentSQL.Adddepartment(Department);
            }
            /// <summary>
            /// 获取部门列表
            /// </summary>
            /// <returns></returns>
            public List<department> GetDepartment()
            {
                return (DepartmentSQL.Getdepartment());
            }
            /// <summary>
            /// 根据部门ID获取部门信息
            /// </summary>
            /// <param name="nid"></param>
            /// <returns></returns>
            public department Getsingledepartment(int nid)
            {
                if (nid <= 0)
                    return null;
                return DepartmentSQL.Getsingledepartment(nid);
            }
            /// <summary>
            /// 根据部门名字获取部门信息
            /// </summary>
            /// <param name="ndepartname"></param>
            /// <returns></returns>
            public department Getdepartmenter(string ndepartname)
            {
                if (string.IsNullOrEmpty(ndepartname))
                    return null;
                    return DepartmentSQL.Getdepartmenter(ndepartname);
            }
            /// <summary>
            /// 更新部门信息
            /// </summary>
            /// <param name="Department"></param>
            public void updatedepart(department Department)
            {
                if (Department == null)
                    return;
                DepartmentSQL.Updatepartment(Department);
            }
            /// <summary>
            /// 根据ID删除部门数据
            /// </summary>
            /// <param name="nid"></param>
            public void Deletedepart(int nid)
            {
                if (nid <= 0)
                    return;
                DepartmentSQL.Deletedepart(nid);
            }
    
        }
    
    BLL层我们就设计好了,接下来我们就要进行UI的设计了,我们先从登陆页面设计起吧,如果你有什么好的建议,请回复和我交流,欢迎拍砖.





  • 相关阅读:
    经典假设检验理论记录一二
    阿里云centos7.3安装tomcat8
    PowerDesigner中Name与Code同步的问题
    PowerDesigner中NAME和COMMENT的互相转换
    树形结构的数据库表设计
    Spring mybatis Access denied for user 'root'@'localhost' (using password:YES)
    IOS上架审核问题
    maven自动部署war包到tomcat 问题
    SpringMVC +Hibernate JPA+Spring-data-jpa
    Hibernate4.3.x Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
  • 原文地址:https://www.cnblogs.com/springyangwc/p/1996614.html
Copyright © 2011-2022 走看看