七层总结

一、前言    

 

    终于体会到了小伙伴们所说的成长的历练了,经历了将近两个星期的时间,终于完成了一个小目标。期间遇到的最多的问题就是自己静不下心去学习,同样也有有很多收获。

    七层是从三层的基础上转换来的,自己的三层已经有很长时间了,所以又看了一遍。中间发现了很多自己不会的知识,在这次的学习中不断地完善,出来混早晚是要还的,所以吃亏是福!

 

二、图

 

    画图也是自己重新学习的,不太熟悉,先来展示一下成果。

 

1、包图:

2、时序图:

 

三、七层理解

 

    UI层:给用户显示界面,接受用户输入的数据,并将输出结果返回给用户。

 

    Facade层:使用外观模式提供了一个高层接口,负责U层与B层之间的信息传递。U层只需要和外观层的接口联系就可以达到目的。同样B层不需要知道U层的存在,这样通过进一步解耦,使U层和B层有变动的时候尽可能的减少了影响。

 

    BLL层:业务逻辑层,处理一些业务逻辑。在这里是通过抽象工厂设计模式实例化工厂,利用反射的思想来访问D层。

 

    Factory层:工厂提供一个接口,通过抽象工厂的妙处,B层通过实例化接口指向的实现类对象,实现了B层与D层的连接。

 

    IDAL层:接口的作用,写了要实现的方法。

 

    DAL层:数据访问层,与数据库直接交互。有对数据库操作的增删改查功能。

 

    Entity层:实体层的作用是传递参数,它与每一次都可以关联,不断的被访问,保持着各层之间的联系、交流。

 

 

四、代码展示

 

    代码上这次基本上都是学习其他人的,也是从理解到不理解的一个过程,所以建议大家尽量的用自己的语组织好代码,即便是借鉴也要学过之后自己试着去敲!     

UI层

  private void btnLogin_Click(object sender, EventArgs e)
        {
          
            if (txtUserName.Text != "")
            {
                //讲文本框的参数传给实体层对象
                Entity.User user = new Entity.User();//实例化实体层
                //获取用户输入的数据
                user.UserName = txtUserName.Text.Trim();
                user.PassWord = txtPassWord.Text;
                //LoginUserName = txtUserName.Text.Trim();


                Boolean flag = false;
                //定义外观层对象
                Facade.LoginFacade Loginfacade = new Facade.LoginFacade();

                flag  = Loginfacade.Loginfacade(user);


                switch (flag )
                {
                    case false :
                        MessageBox.Show("用户不存在,请重新输入!");
                        break;
                    case true :
                        MessageBox.Show("登陆成功!");
                        this.Visible = false;
                        break;

                }
            }
            else
            {
                MessageBox.Show("请填写完整信息~");
            }

 

B层

namespace Login.BLL
{
    public  class QueryBLL
    {
        public bool UserBLL(Entity.User User)
        {
            Factory fact = new Factory();//实例化工厂
            Login.IDAL.ICheck  idal = fact.CreateUserInfo();//调用工厂方法创建接口
            DataTable  table = idal.SelectUser(User);
            bool flag;
            if (table.Rows.Count == 0)//返回的datatable类型,如果他的行数等于0,说明没有符合该账号密码的用户
            {
                flag = false;
             
            }
            else
            {
                flag = true;
            
            }

            return flag ;
        }
    }
}

 

Facade层

namespace Facade
{
    public class LoginFacade
    {   
        
        public Boolean  Loginfacade(Entity.User user)
        {
            bool flag;
            Login.BLL.QueryBLL ConfirmUserBLL = new Login.BLL.QueryBLL();
            flag= ConfirmUserBLL.UserBLL(user);
            return flag;

          
        }
    }
}

 

Factory层

 

using System.Reflection;//引用reflection命名空间,对反射引用
using System.Configuration;//添加对配置文件的引用

namespace LoginFactory
{
    public  class Factory
    {
        string StrDB = System.Configuration.ConfigurationManager.AppSettings ["DB"];

        public Login.IDAL.ICheck  CreateUserInfo()
        {
            //利用反射实现访问D层
            string ClassName=StrDB+"."+"UserDAL";
            return(Login.IDAL.ICheck)Assembly.Load(StrDB).CreateInstance(ClassName);
        }
    }
}

 

IDAL层

namespace Login.IDAL
{
    public  interface ICheck
    {
        DataTable  SelectUser(Entity.User User);
    }
}

 

DAL层

namespace LoginDAL
{
     public  class UserDAL:Login.IDAL.ICheck
    {
          public DataTable SelectUser(Entity.User User)
          {

              SQLHelper sqlHelper = new SQLHelper();
              SqlParameter[] sqlparams = { new SqlParameter("@UserName", User.UserName), new SqlParameter("@PassWord", User.PassWord) };
              string sql = @"SELECT * FROM[Userinfo] where UserName=@UserName and PWD=@PassWord";
             DataTable table = sqlHelper.ExecuteQuery(sql,sqlparams,CommandType.Text );
              return table;
          }
    }
}

 

    SQLHelper方法的实现大家可以根据自己的情况调整。

 

Entity层

namespace Entity
{
    public class User
    {

        public string UserID{set;get;}

        public string UserName { set; get; }

        public string PassWord { set; get; }

        public string Level { set; get; }

        public string Head { set; get; }

    }
}

四、总结

 

    自己最大的感受是知行不和。就是想得太多,做的太少,就造成了效率上的低下,心态上的不平稳,用句徒弟的话“Keep your footsteps up to your soul”!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
haproxy配置七层负载均衡的步骤如下: 1. 安装haproxy:使用命令"yum -y install haproxy"可以安装haproxy软件包。 2. 配置haproxy:haproxy的配置文件分为五个部分,分别是全局配置、默认配置、frontend配置、backend配置和listen配置。对于七层负载均衡,主要关注的是frontend和backend配置。 3. 配置frontend:在frontend配置中,需要指定监听的IP和端口,并设置使用的协议和负载均衡算法。此外,还需要定义ACL规则来根据用户请求的内容将请求转发到不同的后端服务器。 4. 配置backend:在backend配置中,需要定义后端服务器的列表和属性。可以指定服务器的IP地址和端口,并设置权重和最大连接数等属性。 5. 启动haproxy:在完成配置后,可以使用命令"systemctl start haproxy"启动haproxy服务。 需要注意的是,配置七层负载均衡还需要根据具体的需求进行调整和优化,例如设置健康检查、会话保持等功能。此外,还需要确保后端服务器已经配置好并正常工作。 总结:配置haproxy七层负载均衡主要包括安装haproxy、配置haproxy文件、设置frontend和backend配置、启动haproxy服务。配置过程中还需要根据需求进行调整和优化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [haproxy七层负载均衡](https://blog.csdn.net/weixin_46018506/article/details/122257643)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值