三层实例

        前面在学习UML图的时候了解了一下三层的思想,这次再学习感觉熟悉了很多,从实例中更深刻的了解了三层。

        【知识点】

         一、概念

         简单的理解三层架构分为:显示层(UI)、业务逻辑层(BLL)、数据访问层(DAL),再加上实体层(Entity)。

         1、显示层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得,这里我就先简单的理解为主要就是软件的窗体界面类。

               -UI作用:向用户展示现特定业务数据;采集用户的输入信息和操作

               -UI设计原则:用户至上,兼顾简洁

         2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。B层是联系U层和D层的桥梁,进行他们之间的数据交互。

               -作用:从DAL中获得数据,以供UI显示用;

                            从UI中获得用户指令和数据,执行业务逻辑;

                            从UI中获得用户指令和数据,通过DAL写入数据源。

         3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、查找等。接受B层的命令,对数据进行处理。

                -作用:从数据源加载数据(Select);

                              向数据源写入数据(Insert/Update);

                               从数据源删除数据(Delete)。

         4、实体层(Entity):贯穿于三层,连接三层。

            

         二、应用原则

         1、DAL只提供基本的数据访问,不包含任何业务相关的逻辑处理

          2、UI只负责显示和采集用户操作,不包含任何业务相关的逻辑处理

          3、BLL负责处理业务逻辑。通过获取UI传来的操作指令,决定执行业务逻辑,在需要访问数据源的时候直接交给DAL处理。处理完成后,返回必要数据给UI.

         三、各层之间引用关系

         1、DAL所在程序集不引用BLL和UI

          2、BLL引用DAL

          3、UI直接引用BLL,通过BLL间接引用DAL

          4、各层可以引用实体层,忌讳互相引用

          如图:

                   

         四、实例

                B层代码:

<span style="font-size:18px;">namespace Login.BLL
{
    public class LoginManager
    {
        public Login.Model.UserInfo UserLogin(string userName,string password)
        {
           //实例化DAL层
            Login.DAL.UserDAO uDao = new Login.DAL.UserDAO();
            Login.Model.UserInfo user= uDao.SelectUser(userName, password);

            if(user!=null)          //登录成功
            {
                //不需要访问数据源,直接执行业务逻辑
                Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();
                sDao.UpdateScore(userName, 10);
                return user;
            }
            else                   //登录失败
            {
                throw new Exception("登录失败!");
            }
        }
    }
}</span>

              D层代码:

<span style="font-size:18px;">namespace Login.DAL
{
    class DbUtil      //建立数据库连接
    {
        public static string ConnString = @"server=192.168.24.182;DataBase=Login;User ID=sa;Password=123456";
    }
}</span>

<span style="font-size:18px;">namespace Login.DAL
{
    public class UserDAO
    {
        public Login.Model.UserInfo SelectUser(string userName,string password)
        // //各层都要用到实体类userInfo 通过实体类连接  
        {
            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
            {
                SqlCommand cmd = conn.CreateCommand();   //数据库连接命令
                cmd.CommandText = @"select ID,Username,Password,Email 
                                    From users where Username=@UserName and Password=@Password ";
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add(new SqlParameter("@Username", userName));
                cmd.Parameters.Add(new SqlParameter("@Password", password));
                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();   //读取数据

                Login.Model.UserInfo user = null;
                while (reader.Read() )
                {
                    if(user==null)
                    {
                        user = new Login.Model.UserInfo();
                    }
                    user.ID = reader.GetInt32(0);
                    user.UserName = reader.GetString(1);
                    user.Password = reader.GetString(2);
                    if(!reader.IsDBNull(3))
                    {
                        user.Email = reader.GetString(3);
                    }
                }
                return user;
            }
            
        }
    }
}</span>

<span style="font-size:18px;">namespace Login.DAL
{
   public class ScoreDAO    //积分类
    {
       public void UpdateScore(string userName,int value)
       {
           using(SqlConnection conn=new SqlConnection(DbUtil.ConnString))
           {
               SqlCommand cmd=conn.CreateCommand();   //数据库连接命令
               cmd.CommandText=@"INSERT INTO SCORES(UserName,Score) Values(@UserName,@Score)";
               cmd.Parameters.Add(new SqlParameter("@UserName",userName ));
               cmd.Parameters.Add(new SqlParameter("@Score",value));
               conn.Open();
               cmd.ExecuteNonQuery();
           }
       }
    }
}
</span>

             U层代码:

<span style="font-size:18px;">namespace LoginUI
{
    public partial class frmLogin : Form
    {
        public frmLogin()
        {
            InitializeComponent();
        }
        private void btnLogin_Click(object sender, EventArgs e)
        {
            //UI层将用户输入数据传递给BLL层
            string userName = txtUserName.Text.Trim();
            string password = txtPassword.Text;
            Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();
            Login.Model.UserInfo user = mgr.UserLogin(userName, password);

            //UI层返回BLL层传递的数据给用户
            MessageBox.Show("登录用户:" + user.UserName);
        }
    }
}
</span>

            U层界面:

                       

          实体层代码:

<span style="font-size:18px;">namespace Login.Model
{
    public class UserInfo
    {
        //属性声明
        public int ID { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public string Email { get; set; }
    }
}</span>

          运行结果:

                         

        【小结】

            开始了解三层好多不是很懂的地方,通过例子的实现感觉理解了一些,理解了各层的作用和各层之间的引用关系,接下来继续深入了解。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
### 回答1: Spring Boot 是一个基于 Java 的开源框架,它简化了 JavaEE 的开发流程,提供了快速开发应用程序的能力。在 Spring Boot 中,常用的三层架构是指将应用程序分为表现层(Presentation Layer)、服务层(Service Layer)和持久层(Persistence Layer)。 表现层是应用程序的前端部分,负责和用户进行交互。在 Spring Boot 中,可以使用 Thymeleaf 或者 JSON 进行页面的渲染和数据的传递,通过控制器(Controller)来处理用户的请求和展示相应的视图。 服务层是应用程序的中间部分,负责实现业务逻辑。在 Spring Boot 中,可以通过创建服务(Service)类来定义具体的业务逻辑,例如数据处理、算法运算、数据校验等,服务层可以调用持久层提供的数据访问接口来操作数据库。 持久层是应用程序的后端部分,负责与数据库进行交互。在 Spring Boot 中,可以使用 Spring Data JPA 简化持久层的开发,通过定义实体类和仓库接口(Repository)来进行数据库的操作,从而实现对数据的增删改查。 通过将应用程序拆分为表现层、服务层和持久层,可以使代码更加清晰、可维护性更高。表现层负责与用户交互,服务层负责处理业务逻辑,持久层负责与数据库交互,使得代码的职责划分更加明确,模块之间耦合度更低。这种三层架构的设计模式可以使开发人员更加专注于各自的工作领域,提高代码的重用性和可扩展性。 总之,Spring Boot 提供了快速、高效的开发框架,可以使用三层架构来实现应用程序的设计和开发,让开发人员更加专注于业务逻辑的实现,提高开发效率和应用程序的质量。 ### 回答2: Spring Boot是一个快速开发框架,使用约定大于配置的原则简化了开发过程。它可以帮助我们快速搭建一个基于Java的Web应用程序。 三层架构是一种常见的软件架构模式,包括表示层(Presentation Layer)、业务逻辑层(Business Layer)和数据访问层(Data Access Layer)。这种架构模式将应用程序分割成不同的层次,以提高代码的可维护性和可复用性。 在使用Spring Boot开发一个三层架构的应用程序的过程中,我们可以按照以下步骤进行实现: 首先,我们需要在Maven或Gradle中添加Spring Boot的依赖。然后,我们可以创建一个表示层的Controller类,该类负责处理来自用户的请求和发送响应。在Controller类中,我们可以定义各种请求处理方法,并通过注解将其映射到相应的URL。 接下来,我们可以创建一个业务逻辑层的Service类,该类负责处理业务逻辑。在Service类中,我们可以定义各种方法来处理业务逻辑,并调用数据访问层的方法来访问数据库或其他数据源。在业务逻辑层中,我们可以使用Spring的依赖注入功能来注入数据访问层的实现。 最后,我们可以创建一个数据访问层的Repository类,该类负责与数据库或其他数据源进行交互。在Repository类中,我们可以定义各种方法来查询、插入、更新或删除数据。在Spring Boot中,我们可以使用Spring Data JPA或其他ORM框架来简化数据访问层的编码工作。 通过按照上述步骤实现,我们可以将一个基于Spring Boot的三层应用程序开发完成。在实际开发中,我们可以根据具体的需求来扩展和优化这个应用程序,例如添加用户认证和授权功能、实现缓存和消息队列等。总的来说,使用Spring Boot来开发三层架构的应用程序可以让我们更快速和高效地进行开发,并且易于维护和扩展。 ### 回答3: SpringBoot是一个用于构建Java应用程序的开源框架,它具有快速和简化的特点。而三层架构是一种将应用程序分为显示层、业务层和数据访问层的设计模式。 在使用SpringBoot搭建的应用程序中,我们可以将其按照三层架构进行划分。 首先,显示层是指用户与应用程序进行交互的部分,通常是指前端界面。在SpringBoot应用中,我们可以使用Thymeleaf、JSP等技术来实现显示层。 其次,业务逻辑层是应用程序中的核心部分,它负责处理用户请求并进行相应的业务处理。在SpringBoot应用中,我们可以使用@Service注解来标识业务逻辑层的类,通过调用其他层的方法来完成具体的业务逻辑。 最后,数据访问层是应用程序与数据库进行交互的部分,负责对数据的读取和写入。在SpringBoot应用中,我们可以使用@Repository注解来标识数据访问层的类,通过使用Spring Data JPA等技术来实现对数据库的操作。 在实际应用中,我们可以通过在业务逻辑层中调用数据访问层的方法来实现数据的读取和写入,并通过显示层来展示数据。整个过程中,SpringBoot框架可以对各个层进行自动装配和配置,大大简化了应用程序的开发和部署过程。 综上所述,SpringBoot和三层架构可以很好地结合在一起,通过合理地划分不同的层次来实现应用程序的快速开发和简化部署。
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值