【三层转七层,你还在困惑吗?】

前言:

三层的学习,实现了C#版和vb.net版两个版本的登录,接着就开始了通往转七层的大道,七层的学习,使我经历了一段“艰苦”的过程,最终实现了完美的七层登录。这篇博客,主要针对我当时的困惑,以及在项目中我遇到的问题,来进行一个总结,更希望帮助更多的小伙伴!

核心:

1.七层与三层的区别:

  我们从包图来看:
          三层:主要包括UI层,BLL层,DAL层,和Entity层,而三层指的是U层、B层,和D层。这就是简单的三层,其关系如下:


七层:对于七层,每个人的画法不同,这里的不同指的是有的同学,是将SQLHer是单独拿出来,设立一个独立的类库,有的同学是将SQLHelper放在D层里面,作为D层的一个类,不管怎样分,都是正确的!有自己的理解就好。


总结:所以七层和三层比较起来,多了Facade(外观层)、Factory(工厂层)、和IDAL(接口层),七层的使用使得代码更好的分层,更加清晰。

       2.如何开始实践:

开始的时候,我对于如何开始是很迷茫的,不知该如何去做,在和红伟交流的过程中,才懂得思路,开始的时候我先开始实现接口,之后实现D层……最后是U层,也是在不断的探索和实践的过程中,也是第二遍的七层登录,我才找到了方向,
首先:建好七层
然后:添加引用
最后:代码实现
  最先实现的是实体层,因为很多层都是引用的它,然后从SQLHelper开始,从后往前的开始实现代码,正好代码的实现的顺序是和上图的包图相反的。

附上我的项目:
【三层转七层,你还在困惑吗?】_第1张图片
这个项目的建立是为了之后的项目机房个人重构而奠定基础的,所以七层每一层建立了和下面类的建立,就比较规范的命名,其次我再说一下,每个大层UI,Facade……都是建的类库,需要注意的是UI层的frmlogin建的是Winform窗体,IDAL中的ILogin建的是接口

3.引用

关于引用,这个也是我在项目中遇到的问题,开始的我,摸不着头脑:

总结:(仅对于我的这个项目——sqlhelper单独拿出来)
UI层:引用外观层、实体层
外观层:引用B层,实体层
B层:引用工厂层,接口层,实体层
工厂层:引用接口,D层,System.Reflection(反射),System.Configuration(配置文件)
D层:引用接口层、SQLHelper、实体层
DLogin:引用System.Data.SqlClient
IDAL层:实体层
SQLHelper:引用:Imports System.Configuration,Imports System.Data.SqlClient,除了在项目中写出来外,还用在添加引用——程序集中找到——该引用,打钩!(我认为是因为我先敲得的这个,所以就是这个需要打钩,之后用到了,只需直接写出来就好,因为已经打好对勾了)

4.实现中的问题

A、配置文件
a.配置文件是我们用了工厂时,利用本配置文件+反射,配置文件在UI层的App.config中,双击则可打开


如图:你是否看见了图片中的两个key了呢?第一个key的主要作用是换数据库,第二个key的作用是连接 数据库,咱们看:
第一个key,"DB"指的是数据库,value指的是什么数据库,咱们现在用的都是Sqlserver.
第二个key"sqlConnectStr"这个与SQLHelper中读配置文件的SQL语句对应:
<span style="font-size:24px;"><span style="font-size:24px;">Public Shared ConnectionString As String = ConfigurationManager.AppSettings("sqlConnectStr")</span></span>

下面看第一个分号之前,指的是计算机的名字,也可以用“.”,第二个分号前,指的你要连接的数据库,之后分别是你的数据库的登录名和密码。

b.在这里遇到的问题,还有就是“未能加载文件或程序集“DAL”或它的某一个依赖项,系统找不到文件“,这个问题已经好多同学总结了,在这里就不总结了,

解决办法是:把DAL的输出路径(在属性中)改成UI层的bin的Debug.

B.“引发了一个System.Data.SqlClient.SqlException:"参数化查询“@UserID nvarchar (4000),@Password nvarchar(1)select * from T_Us'需要参数‘@UserID’",但未提供该参数”

和多数同学一样,我也遇到了这样的一个问题,

【三层转七层,你还在困惑吗?】_第2张图片

在查资料的时候,给出以下三点思路:

  • SqlParameter对象在实例化的时候,参数变量取名不正确,如@username写成了其他。
  • SqlParameter对象并没有被实例化。
  • SQL语句下输入了错误的状态字符,比如是英文的“,”,写成了中文状态下的“,”

根据所查的,我的错误在哪里呢?并没有找到,再仔细看提示,和提示的一样,@UserID,未提供参数,错误找到了:我的DAL中DLogin中

<span style="font-size:24px;"><span style="font-size:24px;"> Dim sqlParams As SqlParameter() = {New SqlParameter("@UserID", UserInfo.UserID), New SqlParameter("@Password", UserInfo.Password)}</span></span>
这里的实体层中的UserID写错了!!!导致用户名没有传递过来!!!

总结:

实现七层,感觉就好像自己终于破的云开见日出了,接着就是机房收费系统的个人重构了,还有更多的知识需要自己去学习,加油吧!

你可能感兴趣的:(总结,三层转七层登录)