C#机房重构——金额返还信息查询(我找到代码感觉的地方)
前言 |
流程图 |
代码 |
有了上面的流程图,写代码就变得简单了很多。重构机房主要用的是七层架构,其实说白了,就是在三层的基础上添加了些东西,现在更加注重值得传递。
Model层
Model层有叫实体层,它是数据传递的容器。跟数据库的表一一对应。
namespace Model
{
public class CancelCardInfo
{
public string studentNo { get; set; }
public string cardNo { get; set; }
public string CancelCash { get; set; }
public string Date { get; set; }
public string time { get; set; }
public string UserID { get; set; }
public string status { get; set; }
public string Enddate { get; set; }
public DateTime Now { get; set; }
}
}
IDAL层
这个是接口层,主要是创建接口。
namespace IDAL
{
public interface IReturnCash
{
DataTable SelectDateSize(CancelCardInfo cancelcardinfo);
}
}
Factory层
定义一个接口层,实现BLL层与DAL层之间的数据传递。工厂层用到了抽象工厂+反射+配置文件,实现了不同数据库之间的连接。反射+配置文件的最大作用在更方便的更改不同数据库的连接。
namespace Factory
{
public class factoryReturnCash
{
string StrDB = ConfigurationManager.AppSettings["DB"];
public IReturnCash SelectDateSize()
{
string ClassName = StrDB + "." + "ReturnCashDAO";
return (IReturnCash)Assembly.Load(StrDB).CreateInstance(ClassName);
}
}
}
DAL层
实现IDAL层中的方法,访问数据库中的数据,对数据进行一定的操作(增删改查)
namespace DAL
{
public class ReturnCashDAO:IReturnCash
{
SqlHelper sqlhelper = new SqlHelper();
public DataTable SelectDateSize(CancelCardInfo cancelcardinfo)
{
SqlParameter[] sqlParams = { new SqlParameter("@Date", cancelcardinfo.Date), new SqlParameter("@Enddate", cancelcardinfo.Enddate) };
string sql = "select * from [CancelCard_Info] where Date between @Date and @Enddate";
DataTable DateSize = sqlhelper.ExecuteQuery(sql, sqlParams, CommandType.Text);
return DateSize;
}
}
}
BLL层
又叫逻辑判断层,顾名思义,就是进行逻辑判断的地方。
namespace BLL
{
public class ReturnCashBLL
{
factoryReturnCash fact = new factoryReturnCash();
public DataTable SelectDateSize(CancelCardInfo cancelcardinfo)
{
IReturnCash idal = fact.SelectDateSize();
DataTable DateSize = idal.SelectDateSize(cancelcardinfo);
return DateSize;
}
}
}
Facade层
又叫外观层,是U层和B层之间的一层。降低U层和B层之间的耦合度。
namespace Facde
{
public class fReturnCash
{
ReturnCashBLL freturncashBLL = new ReturnCashBLL();
public DataTable SelectDateSizeBLL(CancelCardInfo cancelcardinfo)
{
DataTable DateSize = freturncashBLL.SelectDateSize(cancelcardinfo);
return DateSize;
}
}
}
UI层
用户层,和用户打交道最多的层。
namespace UI
{
public partial class frmReturnCash : Form
{
public frmReturnCash()
{
InitializeComponent();
}
private void cmdQuery_Click(object sender, EventArgs e)
{
//实例化Model层
CancelCardInfo cancelcardinfo = new CancelCardInfo();
//实例化facde层
fReturnCash freturncash = new fReturnCash();
//将字符串类型的数据转换成date类型的
string txtStartdate = StartdateTimePicker.Text;
DateTime Startdate = Convert.ToDateTime(txtStartdate);
//又将date类型的数据转化为string类型的数据
string g = Startdate.ToShortDateString();
//将字符串类型的数据转换成date类型的
string txtEnddate = EnddateTimePicker.Text;
DateTime Enddate = Convert.ToDateTime(txtEnddate);
//又将date类型的数据转化为string类型的数据
string f = Enddate.ToShortDateString();
//将UI层的数据传入Model层
cancelcardinfo.Date = g;
cancelcardinfo.Enddate = f;
DataTable DateSize = freturncash.SelectDateSizeBLL(cancelcardinfo);
if (Startdate >Enddate )
{
MessageBox.Show("初始日期不能大于终止日期!");
return;
}
else if(Startdate > DateTime.Now)
{
MessageBox.Show("初始日期不能大于当前日期!");
return;
}
else if (Enddate > DateTime.Now)
{
MessageBox.Show("终止日期不能大于当前日期!");
return;
}
else if(DateSize.Rows.Count == 0)
{
MessageBox.Show("该时间段没有要查询的数据!");
}
else
{
dataGridView.DataSource = DateSize;
}
MessageBox.Show("查询成功!");
}
}
}
总结 |