asp.net 三层架构
今天学习了asp.net 标准的三层架构,觉得与平时的设计思路类似,但是有一些借鉴的地方。
首先,看程序的框架图:
上图是我自己项目中,其实没有什么框架的东西,主要是将通用的类放在common文件夹中,实体类中实现属性的设置,get,set等以及数据库的sql语句的编写,例如:
public string Url
{
get { return _url; }
set { _url = value; }
}
private string parentID;
public string ParentID
{
get { return parentID; }
set { parentID = value; }
}
public static DataTable GetCategroy()
{
DataTable dt= null;
dt = Dao.GetDataSet(“select * from categroy;”);
return dt;
}
这样的实现。而所有的前段代码类,放入自己特定的文件夹中。对于具有负责逻辑的功能,应当在controller文件夹中编写相应的逻辑控制类。系统基本上满足mvc的三层架构,可以将数据访问,实体,和界面层分割开。
在项目的具体开发过程中,发现,这样写可以满足不同人协同开发的效果,而且极少涉及需要对同一个文件进行修改的情况。对于项目的重用性来讲,可以重用的部分基本上是common类中定义的类,比如数据访问,word表格读写,mac地址获取等通用的类。而前端的开发可重用率比较低。不过幸好asp.net控件拖拽比较方便,因此前端技术并不会消耗太多时间。将来系统将往extjs框架中迁移,因此前端的东西都是需要重构的。
偶然间部门培训,介绍了MyAirTicket这样典型的三层架构,废话不多说:看图:
由上图展示了典型的三层架构,这里作一些说明:
BILL:业务逻辑
Factory:工场
IDAL:实体类方法接口
Model:实体类
OracleDAL:数据访问层
SQLServerDAL:数据访问层
Web:界面
用一个图来表示这几层直接相互调用和引用的关系
如上,本人比较懒,不注意细节,大致是如上的情况,在我们的业务逻辑层中,由工场对象Factory去创建相应的IDAL接口类。而OracleDAL和SQLServerDAL实现IDAL。这样,我们通过如下的代码可以创建一个可以使用的IDAL,代码如下:
private static ICityInfoSerivice cityInfoService = DBFactory<ICityInfoService>.CreateService();
public List<CityInfo> GetCityInfoByProvinceID(int provinceID)
{
return cityInfoService.GetCityInfoByProvinceID(provinceID);
}
对上面代码的说明,首先ICityInfoService 是IDAL接口类。如下:
public interface ICityInfoService
{
List<CityInfo> GetCityInfoByProvinceId(int provinceId);
}
DBFactory是工场类,这里如果我们要动态装入数据库,应当采用泛型的实现方式,这点正好弥补我前面框架的不足,前面的框架如果对应两种数据库,应当有两个common类。这样就存在的重复代码。跑题,看工厂类的具体实现:
因为工厂类中需要产生相应的接口类,因此,应当引用IDAL
using IDAL
public class DBFactory<T>
{
//从webconfig 文件中读取相应的配置信息
private static readonly string DBType = ConfiguragtionManager.AppSettings[“DBType”];
public static T CreateService()
{
Type type = typeof(T);
//命名空间+类的名称,因为类的具体名称是去掉IDAL中的I,因此是type.name.SubString(1);
string fullType = DBType+”.”+type.Name.SubString(1);
//动态加载命名空间
Assembly assembly = Assembly.load(DBType);
//创建相应的实例
T instance = (T)assembly.CreateInstance(fullType);
return instance;
}
这样,我们获得了相应的实例,因此剩下的工作就是,OracleDAL实现IDAL,并实现相应的方法,便可以实现调用。这里不做赘述。
两种比较:
第一种是本人摸索出来的,十分幼稚,但是对于小型项目的开发,应经能满足要求,可以实现分工合作。
第二种是主流的实现方式,可以看出代码结构清晰。但是不足的地方可能是代码量相对多一些,实现也不够灵活,比如前段来一个新的逻辑,可能从BILL到IDAL,到DAL,以及Factory都要做相应的修改。
其实,用框架主要是分工合作以及代码重构复用等,以本人一年多的开发经验来看,代码复用是件很难的事情。前端的话主要采用控件式开发,逻辑层没办法复用,数据层和实例层则会根据数据库和数据表的不同发生相应的变化。而这方法,目前很多代码生成器可以帮我们减轻很大的工作量。
鄙人拙见,在一个非软件公司可学的东西太少。目前知识的框架仅限如此。
另外,感觉自己写的东西没有人看到,这里不放代码的连接,如果有需要的,请留言,我将放出MyAirTicket相应的代码,供大家下载学习。