c#Struts框架理念和自制Struts框架下 复杂版(2009-06-10)

在上文中,我提到了一个“简单的zjy框架”的数据流程,但是那只是很少的一部分,用法和功能也比较简单,他能够完成的只是把一个数据库显示到页面(或者窗体)上。在这个第四章节中,我想将这个自制的框架提升一个层次,加大他的复杂程度,并且能和一些比较抽象的内容相结合,最后我在举一个例子说明一下。
首先再复习一下“简单的zjy框架”,主要的流程是这样子的:
(1)首先我先点击查询按钮,触发一个Action请求。
(2)将Conditionform条件对象填充好。
(3)从Action中带着Conditionform参数调用Lbean中,进行数据的处理,生成所要显示的Resultform。
(4)从Action中带着Resultform进入窗体,窗体进行展开。
现在我要将这个流程复杂化流程进行逆向细化展开:
在这里我还是要用“简单zjy框架中”的推理方式。倒推方法进行推理。(建议各位没看过标题三的读者先看标题三的内容,再来看本节内容,因为我这里提到的一些对象是标题三中提到的,这里我不再做解释)。
逆流程一、我假设已经得到了Resultform对象,这个环节要进行内容填充。(我总结为窗体显示)在这里我将这个窗体(或者换成页面也是同理,后文的窗体里都包括页面)的后台处理函数进行分类,主要分为四大类:
1、窗体展开——主要是在进入窗体的时候进行“控件展开”函数的调用。
2、控件展开——通过Resultform对象中的具体属性,将相应的控件进行其内容的填充。(需要控件的填充写成公共函数,由各个窗体根据不同情况在“控件展开”函数中进行调用)。
3、窗体相应事件——窗体上所有按钮的事件。
4、相应事件的函数——窗体上所有按钮的事件对应的函数。
逆流程二(后缀为“Action”的流程)、我们将Conditionform对象作为参数,进行Action的处理,返回值为Resultform对象的实例。Action只用来做窗体的判断和窗体的指向操作,不管任何具体数据的处理(我总结为指向窗体)。在逆流程二中,如果窗体复杂还可以分成“本窗体的全局填充”、“本窗体的局部填充”两大类。这个的构思来源于ajax,有点类似网页中的局部刷新。当然,也可以根据不同的情况将“窗体的局部填充”分成“单一局部填充”和“多局部填充”两类。具体填充是要在“逆流程一”中进行控制的。
逆流程三(后缀为“Lbean”的流程)、我们将Conditionform对象进行处理,转换成Resultform对象再传递给逆流程二。这里要做的是具体的数据处理,也是数据组成的重点,我来着重说说。我们来先一步一步的说说数据组成,一般来讲数据来源由几个方面组成:
1、通过本地数据库获取数据——和本地数据库进行交互可以通过NHibernate框架,也可以根据Struts
框架中Lbean层、dao层和date层,也可以ado.net等等,都可以,这要看不同项目进行不同调整,但是这个流程不变。
2、通过webservice服务获取数据
3、通过config文件获取数据(appconfig、webconfig等等)
4、一些内部的特定数据(如果可以尽量用配置文件处理)——一些开发人员为了方便需要使用的一些内部数据。
5、一些内部数据处理(也可以通过使用“通用方法”进行处理)——一些开发人员为了方便需要使用的一些通用方法。
6、其余处理(对我没提到的处理加以补充)。
好,现在我们将整个流程进行顺序处理,希望方便大家理解:
流程一(后缀为“Action”的流程)、我们通过任意一个事件进入Action对象的实例(Conditionform对象实例作为参数)。
流程二(后缀为“Lbean”的流程)、我们将Conditionform对象进行处理,转换成Resultform对象再传回给Action对象的实例。这里要做的是具体的数据处理,也是数据组成的重点,一般来讲数据来源由6个方面组成:(在上面的“逆流程三”中有过说明)。
流程三、已经得到了Resultform对象,这个环节要进行内容填充。(在上面的“逆流程一”中有过说明)。
刚才我将我设计的框架做了一个详细的整体介绍。现在我来给各位读者说明一下为什么我要这么设计,也就是这么设计了理由和原因:
首先我们要知道我们应将开发软件设计的尽量具有可扩展性、灵活性、可读性、可合成性等一些特点,这些都是为了我们在以后对此软件进行可持续发展的一些有利条件。我主要围绕这几个特点来说:
一、可扩展性——我这里可以扩展的是功能模块,添加新的模块其原理就是添加新的方法、对象、函数,这样一来,我们只需要添加一些方法对象并在在后缀为“Lbean”的对象中引入这些方法,再后缀为“Action”的对象中使用即可。
二、灵活性——我们主要是增加系统的复用性,用于各个流程、功能模块间均是分开的,所以复用比较好。
三、可读性——只要理解数据库处理的流程,我们就可以在相应环节预览所需功能即可。
四、可合成性——我们可以根据系统需用添加新的对象或者对象集合,只要不覆盖以前的功能就不会对其造成影响。
五、上面四个特点都有了以后,我在添加一个新的特点,就是对日志的管理。我们在给系统加入日志的时候可以根据各个不同环节加入我们想看的日志,比如说:我们可以在后缀为“Lbean”的对象加入一些数据库处理的日志;我们可以在后缀为“Action”的对象加入一些用户操作的流程日志;在配置文件的只读静态对象中加入一些重要配置的日志记录;也可以加入一些比较重要的初始化数据日志记录。这么做的目的很简单,就是能有目标的去看日志。总之,电脑是死的,而我们程序开发者是活得,如何用最简单的方法来完成我们要做的事情是每个程序开发者都要思考的事。我希望我这一节能给各位读者一点点提示。其实在写程序方面我是个“懒”人,我认为如何以不变应万变还是才是根本之道,我是所以说这么多有关自己设计的框架,就是希望各位读者在看过我的文章后能在以后自己写程序的时候犯点“懒”。

转载于:https://www.cnblogs.com/realzjy/archive/2012/02/02/2336026.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值