本文共 4295 字,大约阅读时间需要 14 分钟。
之前三层的时候,自己好像是清楚,好像又糊涂。从三层到七层,加上了抽象工厂,反射和外观层,期间的辛酸好像蛮多的,但是还想着如何自己真的完成了会怎样怎样的,其实呢,都是对未知的恐惧,从三层到七层,就是一次次的尝试和一次次的思考。
这是三层的一个简单的示意图: 这是一个七层的示意图: 这里简单说一下他们的职责是什么:
这是七层的一些职责,我们有的时候敲着敲着就忘了,这样断然是不行的,常常想着每层的职责是什么。
我想这里如果没有代码这块一定是不完整的博客,同时也会是遭人骂的博客。下面是自己敲的登陆的一条线,有什么需要提高的,多多指导。
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; }
////// 判断用户信息是否有误 /// /// ///public string loginfacade(Entity.User user) { BLL.QueryBLL ConfirmUserBLL = new BLL.QueryBLL(); return ConfirmUserBLL.UserBll(user); }
#region 登录信息查询 public class QueryBLL { public string UserBll(Entity.User User) { Factory.Factory fact = new Factory.Factory(); //实例化工厂 IDal.ICheck idal = fact.CreateUserInfo(); //调用工厂方法创建接口 IListuser = 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
string StrDB = System.Configuration.ConfigurationManager.ConnectionStrings ["DAL"].ToString() ; //接收来自配置文件的数据 public IDal.ICheck CreateUserInfo() { string className = StrDB + "." + "QueryDAL"; return (IDal.ICheck)Assembly.Load(StrDB).CreateInstance(className); }
public interface ICheck { IListSelectUser(Entity.User user); }
这里Sqlhelper不写了,相信大家都有自己的方法来完成。
class QueryDAL :IDal.ICheck { // public DataTable SelectUser(Entity.User User) //之前用的都是datatable public IListSelectUser(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; } }
定义实体的属性:
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() { }}
这是一个简单的一条线,我相信,有了一条线,通了一条线,之后会越走越顺的。我们还是要思考每层的作用,体会我们这门这样实现功能的好处是什么?