一、前言
终于体会到了小伙伴们所说的成长的历练了,经历了将近两个星期的时间,终于完成了一个小目标。期间遇到的最多的问题就是自己静不下心去学习,同样也有有很多收获。
七层是从三层的基础上转换来的,自己的三层已经有很长时间了,所以又看了一遍。中间发现了很多自己不会的知识,在这次的学习中不断地完善,出来混早晚是要还的,所以吃亏是福!
二、图
画图也是自己重新学习的,不太熟悉,先来展示一下成果。
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”!