博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
七层--愈见清晰明了
阅读量:4166 次
发布时间:2019-05-26

本文共 4295 字,大约阅读时间需要 14 分钟。

前言

      之前三层的时候,自己好像是清楚,好像又糊涂。从三层到七层,加上了抽象工厂,反射和外观层,期间的辛酸好像蛮多的,但是还想着如何自己真的完成了会怎样怎样的,其实呢,都是对未知的恐惧,从三层到七层,就是一次次的尝试和一次次的思考。


分析

      这是三层的一个简单的示意图:

这里写图片描述
这是一个七层的示意图:
这里写图片描述
这里简单说一下他们的职责是什么:

  • UI
    UI主要负责的是接受用户输入的消息,同时将处理过的信息,显示在界面上,总结一下可以说是负责接受和显示信息。
  • Facade
    外观层是负责UI和B层之间的信息交流的,为什么要用外观层,还记得设计模式中的基金吗?如果B层和U层之间的要传递的信息特别多,这样U层的负担会很大,怎么办,我们引入外观层,让外观和B层交互,同时外观层,只露出来一个借口给U层,这样的话,U层不必知道B层的存在,轻松的完成任务。
  • BLL
    B层的作用是访问D层,这里我们为了更换数据库方便些,B层是通过访问工厂,通过反射来间接的调用D层。
    当然了,B层还有一个作用使我们不能忽视的,那就是B层要做一些逻辑处理,很多业务逻辑,都是需要在B层做处理的。
  • Factory
    工厂存在,是生产接口,同时将返回接口。为什么呢?之前问过大师傅,为啥要工厂生产接口?大师傅问我:接口可以实例化吗?我想想也是这个道理。
  • Interface
    接口层中写了要实现的方法,抽象出来的方法,我们不用给具体的实现,写下这个接口,实现它就好了。
  • DAL
    数据访问层,所以在D层无需做什么逻辑判断,这是和数据库直接交互的,所以D层中的方法就是增删改查,来操作数据库。别的无需他做,也不必他做。
  • Entity
    实体层,每层都可以访问,实体层的作用是传递参数,实体会带着参数,游走在各层之间,就像是血液一样,所以我们各层之间产生的交流,实体的作用是不言而喻的。

这是七层的一些职责,我们有的时候敲着敲着就忘了,这样断然是不行的,常常想着每层的职责是什么。


代码展示

我想这里如果没有代码这块一定是不完整的博客,同时也会是遭人骂的博客。下面是自己敲的登陆的一条线,有什么需要提高的,多多指导。


UI

UserName = txtUserName.Text.Trim(); //全局变量            //传递用户输入的参数             string UserID = txtUserName.Text.Trim();           // string PWD = txtUserPWD.Text.Trim();            //定义外观层对象            Facade.LoginFacade loginfacade = new Facade.LoginFacade();            Entity.User userinfo = new Entity.User();            //将文本框的值给实体层对象,让实体层对象带上参数            userinfo.UserID = txtUserName.Text;            userinfo.PassWord = txtUserPWD.Text;            string  strResult;            strResult = loginfacade.loginfacade (userinfo);            switch (strResult)            {                case "无用户": MessageBox.Show("用户不存在,请重新输入");                    break;                 case "登录成功" ://MessageBox.Show("登录成功 ");                    this.Visible = false;            }

Facade

///       /// 判断用户信息是否有误      ///       ///       /// 
public string loginfacade(Entity.User user) { BLL.QueryBLL ConfirmUserBLL = new BLL.QueryBLL(); return ConfirmUserBLL.UserBll(user); }

BLL

#region 登录信息查询    public class QueryBLL    {        public string  UserBll(Entity.User User)        {            Factory.Factory fact = new Factory.Factory(); //实例化工厂            IDal.ICheck idal = fact.CreateUserInfo(); //调用工厂方法创建接口                     IList
user = idal.SelectUser(User); string flag; if (user.Count == 0) //返回的datatable类型,如果他的行数等于0,说明没有符合该账号密码的用户 { flag = "无用户"; } else { if (user[0].PassWord == User.PassWord) { flag = "登录成功"; } else { flag = "密码不正确"; } } return flag; } }#endregion

Factory

string StrDB = System.Configuration.ConfigurationManager.ConnectionStrings ["DAL"].ToString() ;         //接收来自配置文件的数据        public IDal.ICheck CreateUserInfo()        {            string className = StrDB + "." + "QueryDAL";            return (IDal.ICheck)Assembly.Load(StrDB).CreateInstance(className);        }

IDAL

public interface  ICheck    {         IList 
SelectUser(Entity.User user); }

DAL

这里Sqlhelper不写了,相信大家都有自己的方法来完成。

class QueryDAL :IDal.ICheck     {       // public DataTable SelectUser(Entity.User User) //之前用的都是datatable       public IList 
SelectUser(Entity.User User) { //SqlParameter[] sqlParams = { new SqlParameter("@userID", UserInfo.UserID ), new SqlParameter("@pwd", UserInfo.PassWord ) }; SqlParameter[] sqlParams = {new SqlParameter("@userID", User.UserID)}; //string sql ="select * from User_info where UserID=@userID and PassWord=@pwd"; string sql = @"select * from User_info where UserID=@userID"; DataTable table = DAL.sqlhelper.GetDatable(sql, CommandType.Text , sqlParams); //IList
users = IList
user = DAL.CovertHelper
.ConvertToModel(table); return user; } }

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; }        public User()        {        }}

结语

这是一个简单的一条线,我相信,有了一条线,通了一条线,之后会越走越顺的。我们还是要思考每层的作用,体会我们这门这样实现功能的好处是什么?

你可能感兴趣的文章
HTML5学习之——HTML 5 拖放
查看>>
HTML5学习之——HTML 5 Canvas vs. SVG
查看>>
HTML5学习之——HTML 5 应用程序缓存
查看>>
HTML5学习之——HTML 5 Web Workers
查看>>
HTML5学习之——HTML 5 Canvas
查看>>
HTML5学习之——HTML5 内联 SVG
查看>>
HTML5学习之——HTML 5 服务器发送事件
查看>>
SVG学习之——HTML 页面中的 SVG
查看>>
SVG 形状学习之——SVG圆形
查看>>
SVG 滤镜学习之——SVG 滤镜
查看>>
mysql中用命令行复制表结构的方法
查看>>
hbase shell出现ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException
查看>>
让代码变得更优雅-Lombok
查看>>
解决Rhythmbox乱码
查看>>
豆瓣爱问共享资料插件发布啦
查看>>
Ubuntu10.10 CAJView安装 读取nh\kdh\caj文件 成功
查看>>
kermit的安装和配置
查看>>
vim 配置
查看>>
openocd zylin
查看>>
进程创建时文件系统处理
查看>>