构建asp_net逻辑构件库 概要 使用asp.net开发高重用,松耦合,框架良好的web 应用程序。并且可以形成高可用的构件库。
对象 本文主要针对使用asp.Net开发BS系统的开发人员、项目经理以及负责软件质量的领导。
背景以及解决之道 背景,应用软件的特点:1、看重业务,业务繁杂,客户独特要求很多,版本众多,有些公司对每个客户都要产生一个新的版本,很少有人了解所有版本之间的差别,如此之多的版本成为公司的繁重负担,2、产品功能耦合严重,功能很难复用,3、软件修改任务繁重,也许这是最让人头疼的,一个项目开发完之后,客户不断的提出修改意见,很多开发人员长期的陷入修改任务中。这些特点和问题使公司开发部门象雪球一样越滚越大,工作量越来越重。
解决之道:
针对以上问题,应用软件开发可以使用以下方法解决问题:
1、 提取构件,提高重用。
2、 界面换肤,容易修改,界面多变。
3、 脚本传参,避免耦合。
内容 框架:包括页面、构件库、数据组件库、数据组件工厂四个部分。页面负责网站整体外观并且加载构件库,构件库提供逻辑功能,数据组件库提供业务数据、数据组件工厂负责生成数据对象。这四个部分可以概括为两库两纽带。页面是构件库和用户的纽带,数据组件工厂是构件库和数据组件的纽带。
1、 页面 页面负责网站整体外观并且加载构件库。
页面是网站整体UI的表现,主要工作是图片制作,页面切割,加载构件,并且给构件传递参数,并且要负责网站导航。
分工: 美工和熟练html的人员开发。
2、 构件库 这个是框架的核心,我们使用用户控件(user control )可以方便,快捷的完成这3点:
1、提取构件,提高重用。
2、界面换肤,容易修改,界面多变。
3、脚本传参,避免耦合。
1.提取构件,提高重用。
把有一定逻辑功能的处理部分封装成用户控件,这很容易,主要是怎么重用,一般我们主要在同一个工程中使用用户控件,但是只有跨工程使用,才能实现重用,其实,codeBihand技术是一种继承关系,用户界面继承自类库,所以把用户控件所在类库引用到工程中,并且把用户控件的ascx代码放入工程下的目录中,就可以像使用同一个工程中的用户控件一样了。
另外,如果需要调试,可以源代码放入用户控件所在目录,即可跟踪调试。
2. 界面换肤,容易修改,界面多变。
用户控件的界面很容易修改,这个也要深刻理解CodeBihand技术,多个ascx文件(控件ui代码)可以对应同一个cs文件(控件类代码)。我们也需要这样做,例如:
这是一个登录构件,功能是接受用户输入,验证用户,返回登陆信息,如果成功,导向其他页面。 这个构件完成之后,我们发现还需要一个能够放在导航条上的登陆构件,这是我们有3个选择,1,新建一个,复制代码,代码复用,不过代码重复带来到的问题是相当麻烦的。2,扩展构件功能,通过一个参数决定怎么显示。这有一个问题,要修改程序,是程序变得复杂,并且使用代码控制显示往往在以后的维护阶段很麻烦,动不动就需要修改程序,3,作一套皮肤,程序员轻松了,代码不用改动,并且皮肤是可以方便修改的,维护也容易。
这个就是导航条上的登陆构件。
让这2个UI部分对应同一cs代码,是个好主意。
在Microsoft Visual Studio .NET 2003开发工具中,对这个支持的不是很好,它没有很好的对这种代码的组织形式,看上去其中一个控件的cs代码好像丢了一样。如图:
GCon_lineLLogin.ascx 的代码看上去关联不上,不过不影响使用。
可能是微软也没有想到,不过我们确实需要这样用,并得到了实惠。
分工:软件工程师在经过详细设计,功能划分,并且开发出构件,可能不是很美观,然后,美工可以拿走构件的皮肤,制作出多套不同皮肤的构件。而构件的编码只有一份,这样,即实现了构件的多样化,又避免了多个版本的产生。
3、 脚本传参,避免耦合。
控件的使用就必然涉及到与其他控件和页面的交互问题。对于大部分用户控件,它与页面和其他用户控件的交互并不是很复杂,比如上面的登录控件,仅仅需要知道登录成功后,要显示那个页面,对于这种简单的交互就要使用脚本传递参数,就是在页面中书写代码,而不使用codebihand技术。在页面上写的代码更容易改变,降低了强耦合。
下面看一看怎么写脚本代码:
通过分析,发现页面部分与codebihand代码是中继承的关系。所以我们就可以重载OnInit()方法。在页面开发执行是就加入我们的操作。采用这种方式传递参数,在任何时候改变这个参数的值都很方便,程序也不需要编译。
错误的做法,在用户控件中直接决定导入哪个页面,不留参数,这个用户控件会因为这个小小的举动,完全失去灵活性,也失去了重用的可能。
附加:
用户构件的活用,
asp.net 用户构件的作用非常大,用户构件首先是一个服务器构件,它具有服务器端的构件的优点,另外开发方便,非常适合应用软件开发者的需要。
要想活用用户构件,需要了解以下几点:
1, 深入了解Codebehind,它带来的不仅仅是像开发win form 程序一样开发应用。
2, 尝试给用户构件加属性,事件,方法。充分扩展和理解用户构件的功能。
3, 尝试让用户构件继承一个自定义的接口,接口是非常强大的,我们不得不用。
4, 动态加载用户构件。同一个页面上的多个用户构件可以全部是动态加载的。
5, 加载使用另一个dll中的用户构件,这中可以重用用户构件, 构建我们自己的构件库的基础。
6, 让美工给一个编译好的用户空间更护不同的皮肤(编辑ascx中的html代码即可),可以发现因为ascx代码的改变,用户构件将有各种各样的面孔,形成多样的界面系列。
7, 不通过改变页面的cs代码给用户构件传递参数,这样就可以实现构件和页面的松耦合,页面上添加,减少构件, 传递参数,统统不编译程序。
总结:
使用C#开发业务构件和构件工厂,这里暂时没有写出, asp.net构件库和业务构架库共同配合可以统一完成优质的开发流程,包括美工和程序员的分工,形成美工素材库等,积累起公司的资源。
作者:王鲁生
qq:44079546
Email : wanglusheng1@163.net
北大软件工程有限公司软件开发工程师。
2004-06-05