在前面介绍了三层,UI层; BLL层; DAL层
这次总结下“七层”。 在还没有学习七层的时候,那时候只是认为“七层”只是比三层多了四层而已,其实不然,七层它也是机房重构的登录部分。
其实在学习“机房重构的时候”,包括在写任何程序的时候,没有任何要求说必须使用七层架构,所以说,这就有了我们为什么要用“七层架构”,和使用它的好处。
学过设计模式的小伙伴都知道,设计模式是为了让代码更加的规范,给代码制定好一个个模式和规则,告诉你写代码的规范和套路,怎样写代码更能提高效率,较少冗余和错误... 同理,“七层”的作用和设计模式大致相似,在软件工程的学习后,我们有了一种“高内聚,低耦合,较少代码冗余和错误,提高程序的效率”等等...
对字段和数据进行封装,是一种实体类,以供其他层调用。
显示给用户内容,与用户进行交互,;为用户提供可操作的功能的实现;为了数据库收集用户的各种信息;
(不包含任何业务相关的逻辑处理)。
namespace Entity //实体层
{
public class UserInfo
{
//ID字段
private int userID;
public int UserID
{
get { return userID; }
set { userID = value; }
}
//用户名字段
private string userName;
public string UerName
{
get { return userName; }
set { userName = value; }
}
//密码字段
private string password;
public string Password
{
get { return password; }
set { password = value; }
}
//等级
private string level;
public string Level
{
get { return level; }
set { level = value; }
}
//状态字段
private bool stat;
public bool Stat
{
get { return stat; }
set { stat = value; }
}
}
IDAL层就是定义一个统一通用的接口层,用来接触B层,D层之间的耦合
//登录
public interface IUserIDAL
{
//判断用户名是否在表中存在。
DataTable SelectUser(Entity.UserInfo UserInfo);
}
D层的作用就是来访问数据库中的相应的数据,来进行增删改查等操作。
(1)从数据源加载数据(Select)
(2)向数据源写入数据(Insert / Update)
(3)从数据源删除数据(Delete)
public class DAL : IDAL.IUserIDAL
{
public DataTable SelectUser(Entity.UserInfo UserInfo)
{
//实例化一个SQLHeIepr防止注入
SQLHeIper sqlHeIper = new SQLHeIper();
//定义需要传递的参数
SqlParameter[] sqlparams = { new SqlParameter("@UserID", UserInfo.UserID), new SqlParameter("@Password", UserInfo.Password) };
//构造语句,匹配数据表
string sql = @"SELECT * FROM User_info WHERE UserID=@UserID and PWD=@Password ";
DataTable table = sqlHeIper.ExecuteNonQuery(sql,sqlparams,CommandType.Text);
return table;
}
}
就是(简单工厂模式)它的功能是创建接口对象,是B层与IDAL层之间的桥梁,解耦的功能;在这里运用到了:
工厂+反射+配置文件。
namespace Factory //工厂层
{
public class UFactory
{
//接受来自配置文件的数据
string StrDB = System.Configuration.ConfigurationManager.AppSettings["DB"];
private string ClassName;
public IUserIDAL CreateUserInfo()
{
//DAL层的类名:
string ClassName = StrDB + "."+"DAL";
return (IDAL.IUserIDAL)Assembly.Load(StrDB).CreateInstance(ClassName);
}
}
}
看B层的名字“业务逻辑层”,可以想象成一个到处跑业务的人,是整个系统的核心,承担了所有的业务的判断,能上蹿下跳,对数据业务逻辑进行处理,加以判断。
public partial class LoginBLL
{
public Boolean UserBLL(Entity.UserInfo UserInfo)
{
//实例化工厂层
Factory.UFactory GongC = new Factory.UFactory();
//调用工厂方法并且创建接口
IDAL.IUserIDAL Idal = GongC.CreateUserInfo();
//接收D层的返回值
DataTable table = Idal.SelectUser(UserInfo);
bool flag;
//返回的Data Table类型,如果它的行数等于0,说明没有符合该账号密码的账户。
if (table.Rows.Count == 0)
{
{ flag = false; }
}
else
{
{ flag = true; }
}
return flag;
}
//密码是否
public DataTable GcBLL(Entity.UserInfo UserInfo)
{
Factory.UFactory GongC = new Factory.UFactory(); //GongC工厂
//调用工厂方法并且创建接口
IDAL.IUserIDAL Idal = GongC.CreateUserInfo();
//接收D层的返回值
DataTable GcPWD = Idal.SelectUser(UserInfo);
return GcPWD;
}
}
用到了外观模式,使复杂问题能够简单化,降低层之间的耦合;用外观定义统一的接口,以供UI层调用。
public class UFacade
{
public Boolean SelectUser(Entity.UserInfo user)
{
bool flag;
//实例化B层
LoginBLL uBLL = new LoginBLL();
flag = uBLL.UserBLL(user);
//返回一个布尔值
return flag;
}
}
显示给用户内容,与用户进行交互,;为用户提供可操作的功能的实现;为了数据库收集用户的各种信息;
(不包含任何业务相关的逻辑处理)。
public partial class LoginUI : Form
{
public LoginUI()
{
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e)
{
}
private void ButOk_Click(object sender, EventArgs e)
{
//判断账户输入不能为空!
if(txtUserID.Text.Trim()=="")
{
//MessageBoxIcon.Warning显示一个警告图标
MessageBox.Show("请您输入账号", "提示", MessageBoxButtons.OK,
MessageBoxIcon.Warning);
}
if (txtPassword.Text.Trim()=="")
{
MessageBox.Show("请输入密码", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
//实例化登录,然后再传给外观层
Facade.UFacade Facade = new Facade.UFacade();
Entity.UserInfo user = new Entity.UserInfo();
user.UserID = Convert.ToInt32(txtUserID.Text.Trim());
user.Password = txtPassword.Text.Trim();
//实例化外观层
Boolean flag = false;
Facade.UFacade facade = new Facade.UFacade();
//调用外观的方法,返回给User
flag = Facade.SelectUser(user); //调用外观的方法,返回给user.
if (flag != false)
{
this.Hide(); //登录成功后隐藏本窗体
this.DialogResult = System.Windows.Forms.DialogResult.OK;
MessageBox.Show("登录成功!进来吧小机灵鬼");
//登录成功后显示主窗体
//判断用户登录等级
frmOperator frmMain = new frmOperator();
frmMain.Show();
}
else
{
MessageBox.Show("自己密码,账号都不记得了?");
txtPassword.Text = "";
txtPassword.Focus();
txtUserID.Select();
txtUserID.Focus();
}