机房收费系统=三层+设计模式
在简单的三层登陆完成之后,我又在其中加入了设计模式,其中包括抽象工厂+反射和外观模式.关于设计模式,在学习三层之前我们已经系统的学习过,可是在这次往机房收费系统中加设计模式时,还是感觉无从下手,出现了学没有致用的尴尬情景.不过这也体现了我们提高班学习中项目驱动的优势.
接下来是我的一些现有思路,可能还不很准确,期待读者朋友的指点.
先说一下简单的三层登陆思想吧:
我们现阶段接触的三层就是最基本的三层--UI层,BLL层和DAL层.关于这三者之间的关系,在我前面博客中有所涉及,如果有兴趣,你可以参看:三层架构入门.
言归正传,理论知识我们知道了,在机房收费系统中,我们究竟是如何利用这三层来简化灵活我们的代码的呢?(由于.NET版本的登陆已经加入设计模式,所以简单三层用C#语言来展示.)
大家可以先看下主体代码:
UI层: 代码如下:
[csharp]
<SPAN style="FONT-SIZE: 18px">private void btnOK_Click(object sender, EventArgs e)
{
UserInfo user = new UserInfo();
//向实体层传递参数
string UserName = txtUserName.Text.Trim();
string Password = txtPassword.Text.Trim();
user.UserName=UserName ;
user.Password = Password;
//实例化BLL层,并调用BLL层方法
LoginManager mgr = new LoginManager();
UserInfo user2 = new UserInfo();
user2 = mgr.UserLogin(user);
MessageBox.Show("登录用户:" + user.UserName);
}
</SPAN>
private void btnOK_Click(object sender, EventArgs e)
{
UserInfo user = new UserInfo();
//向实体层传递参数
string UserName = txtUserName.Text.Trim();
string Password = txtPassword.Text.Trim();
user.UserName=UserName ;
user.Password = Password;
//实例化BLL层,并调用BLL层方法
LoginManager mgr = new LoginManager();
UserInfo user2 = new UserInfo();
user2 = mgr.UserLogin(user);
MessageBox.Show("登录用户:" + user.UserName);
}
U层,就是我们窗体类,是用户唯一可以看到的部分.其中不涉及连接数据库,也不会包括业务逻辑.它主要负责接收用户输入指令并传给实体类,再有实体类传给B层,进行业务逻辑的判断.同时它也会根据B层产生的不同结果来及时反馈给用户.
BLL层: 代码如下:
[csharp]
<SPAN style="FONT-SIZE: 18px">public class LoginManager
{
public UserInfo UserLogin(UserInfo user)
{
//实例化DAL层,并调用DAL层方法
UserDAO uDAO = new UserDAO();
user = uDAO.SelectUser(user );
//逻辑判断代码
if (user != null)
{
ScoreDAO sDAO = new ScoreDAO();
sDAO.UpdateScore(user, 10);
return user;
}
else
{
throw new Exception("登录失败!");
}
}
</SPAN>
public class LoginManager
{
public UserInfo UserLogin(UserInfo user)
{
//实例化DAL层,并调用DAL层方法
UserDAO uDAO = new UserDAO();
user = uDAO.SelectUser(user );
//逻辑判断代码
if (user != null)
{
ScoreDAO sDAO = new ScoreDAO();
sDAO.UpdateScore(user, 10);
return user;
}
else
{
throw new Exception("登录失败!");
}
}
这一层是业务逻辑层,顾名思义,它主要负责系统中的绝大部分逻辑判断,一旦U层或者D层出现业务逻辑判断,我们就要考虑,它是不是应该放在B层.
DAl层: 代码如下:
[csharp]
<SPAN style="FONT-SIZE: 18px">namespace Login.DAL
{
public class UserDAO
{
/// <summary>
/// 连接数据库,获取用户信息
补充:软件开发 , C# ,