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相应的代码,供大家下载学习。

 

 

 

 

posted @ 2012-05-03 17:01  庸蛹  阅读(691)  评论(0编辑  收藏  举报