C#机房重构——金额返还信息查询(我找到代码感觉的地方)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/whc888666/article/details/87906967
前言
最近一直沉静在机房重构无法自拔,当然在前年我就进入了这个项目,只是那时候没有这样的感觉,一直是盲目的,着急的一天天的看着时间过去,一个非常简单的窗体,一个非常简单的功能,花上好几天也写不出来,真是干着急。当然这不代表我现在做的有多好,我现在只是说:我知道我每天在做什么,而且想实现什么功能自己能够实现,报错了知道是哪里的问题,没有之前那么盲目了。每天没有那么害怕接触代码了。哈哈哈.......还是很享受的。下面开始我重构的第一遍博客分享。
流程图
这个看似简单,它可是我找到写代码感觉的根源所在,其实很多人没有这样的意识。流程图代表了写代码的思路,没有思路你又是如何写代码呢?它远远比代码更加的重要...... 下面是我的机房重构——金额返还信息查询流程图

在这里插入图片描述

代码

有了上面的流程图,写代码就变得简单了很多。重构机房主要用的是七层架构,其实说白了,就是在三层的基础上添加了些东西,现在更加注重值得传递。

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("查询成功!");
        }
    }
}

总结
重构难吗?如果没有思路,它一定难。如果你知道如何思考,知道代码是如何传值,知道所写窗体的思路,那么它就变得异常的简单。 当然我这个还只是刚刚开始,还有很多的地方做的不好。比如说:面向对象思想的体现还做的很不好,该封装的还没有封装。不过我觉得迈出这一步还是非常关键的,一切等都熟练了都还来得及。

猜你喜欢

转载自blog.csdn.net/whc888666/article/details/87906967