关于工厂,泛型,抽象类,抽象工厂,和三层结合的问题

.Net技术 码拜 8年前 (2016-09-26) 1269次浏览
如题,现在有一个项目中,貌似重复的代码很多。那么该怎么样抽象其中的重复代码呢?
背景:一个三层结构,UI,DAL,BLL,Model
现在有十几章表例如测 水位、流量、PH、温度、风力等,表的结构相似。
ID(主键),double(数值),Intime(入库时间),DID(所属机构ID),CID(测点ID)
那么本人对应的就有十几个Model 类。
数据访问层,引用ADO.NET 同理就有 十几个对应的 DALDATA
业务逻辑层 ,和数据访问层的结构相似。
UI,使用的ASPX页面,等于有十几个相同的页面,页面的结构也基本上相同,一个下拉列表框选择测点,两个时间选择框,选择开始时间和结束时间,然后查询按钮。
页面的后台,默认load加载,分页加载全部当前类型测点下的时间倒序数据列表。
查询按钮执行后,某一测点选择时间内的数据倒序列表。
那么,问题来了。这么多东西都是一样的,假如以后还要加几十个相相似的实体,那么DAL,BLL,UI都要加十几个。
是不是,太麻烦了。
本人现在的想法是,将数据访问层的方法,抽象出来一个抽象类,然后一个子类实现抽象类,全部的对象DAL类,来继承这个子类。这样子,就实现了数据访问类的简化,代码量减少的不是一点半点。
原因是牵扯到多表联查,所以查询方法很庞大。具体实现的是三个方法,一个是默认返回的全部该类型下测点的数据集合。一个是根据查询条件,返回某一个测点下的规定时间内的数据集合,剩下一个就是针对这两个方法的数据总条数。
抽象类:
public abstract class AbstractMonitor<S> where S : class ,new(){
private string _tableName{get;set;}
….(几个属性,表名,查询字段,查询条件,查询ID,开始时间,结束时间等)
public abstract List<S> GetList();//获取默认列表
public abstract List<S> GetListForTerm();//条件列表
public abstract int GetCount();返回行数
}
public class AbstractChild<S> : AbstractMonitor<S> where S : class ,new(){//实现抽象类的子类
public override List<S> GetList(){} //查询过程,代码太长就不写了。
public override List<S> GetListForTerm();//条件列表
public override int GetCount();返回行数
}
public class DAL_PH_DT : AbstractChild<WT_PH_DT>{//PH值数据 DAL层,数据访问类
public List<WT_PH_DT> PH_GETLIST(int pages, int mtid)
{
Tablename = “WT_PH_DT”;
Selectfield = “PH_ID,PH_PH,PH_OT,PH_IT”;
Selectid = “PH_ID”;
SelectTerm = “PH_OT”;
Pages = pages;
Mtid = mtid;
return GetList();
}
}
其他类,以此类推。这就时本人理解中的抽象类的使用方法和过程。对不对,大家点评一下。
而本人的问题是:DAL层可以这样抽象出来,BLL 层呢? UI 层呢?假如能用工厂的话,怎么用?那种设计模式,比较适合?
设计模式小白,再次恳请大家给个建议。
当然,理论上,这几天看的有些乱。
理论上,还有使用条件,怎么用?为什么用?用什么?
这就是本人的问题。谢谢
解决方案

30

关于工厂,泛型,抽象类,抽象工厂,和三层结合的问题

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于工厂,泛型,抽象类,抽象工厂,和三层结合的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)