在上文中,我提到了一个“简单的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://blog.51cto.com/realzjy/165569

c#Struts框架理念和自制Struts框架下 复杂版相关推荐

  1. Struts和SpringMVC两种MVC框架比较

    基于Web的MVC framework在J2EE的世界内已是空前繁荣.TTS网站上几乎每隔一两个星期就会有新的MVC框架发布.目前比较好的MVC,老牌的有Struts.Webwork.新兴的MVC框架 ...

  2. Java job interview:struts基于MVC的WEB开源框架解析

    ●struts是开源框架. ●使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间.如果我们想混合使用Servlets和JSP的优点来建立可扩展的应用,struts是一个 ...

  3. Spring - Java/J2EE Application Framework 应用框架 第 12 章 Web框架

    第 12 章 Web框架 12.1. Web框架介绍 Spring的web框架是围绕分发器(DispatcherServlet)设计的,DispatcherServlet将请求分发到不同的处理器,框架 ...

  4. Struts 2读书笔记-----使用Struts 2的输入校验

               输入校验是所有的Web应用必须处理的问题.一个健壮的应用系统必须可以阻止一些非法的输入,防止这些非法的输入进入系统.这样才可以保证系统不受到影响. 输入校验可以分为客服端校验和服 ...

  5. hibernate框架 最新_Java 15 个框架

    Java 程序员方向太多,且不说移动开发.大数据.区块链.人工智能这些,大部分 Java 程序员都是 Java Web/后端开发.那作为一名 Java Web 开发程序员必须需要熟悉哪些框架呢? 今天 ...

  6. java五大框架有哪些_Java五大框架

    2017-6-13Lifusen 此文章仅代表个人观点,如有问题提出请联系Q:570429601 1.Hibernate (开放源代码的对象关系映射框架) Hibernate是一个开放源代码的对象关系 ...

  7. 【我们一起写框架】C#的AOP框架

    原文:[我们一起写框架]C#的AOP框架 前言 AOP,大家都是听过的,它是一种面向切面的设计模式. 不过AOP虽然是被称为设计模式,但我们应该很少能看到AOP设计的框架.为什么呢? 因为,AOP单独 ...

  8. 19 Go Web 框架(二):框架技术详解

    一. net/http包够用吗? Go的net相关标准包提供web开发的大多数实现支持,如果你的项目的路径端点在十个以内,如一个简单的企业网站,这当然是够用的.但如果你的项目是构建一个大型电商网站,有 ...

  9. 微信小程序后端框架|微信公众号后端框架(C# WebAPI)

    微信小程序后端框架|微信公众号后端框架(C# WebAPI) 微信小程序 简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的 ...

最新文章

  1. 阿里P7架构师告诉你Java架构师必须知道的 6 大设计原则
  2. Python爬虫高级之JS渗透登录新浪微博 | 知了独家研究
  3. Jsp 无法解析${}
  4. how to improve efficiency of graphic neural network?
  5. C#对象映射器之Mapster
  6. 从开源软件开发中体会到的心得
  7. Python并发之协程gevent基础
  8. c# DESEncrypt 加密、解密算法
  9. 每秒 10 万并发的 BI 系统如何频繁发生 Young GC?
  10. Codeforces Round #FF (Div. 2) D. DZY Loves Modification 贪心+优先队列
  11. IDE警告信息不应该被忽略
  12. 面板数据,面板数据的三种基本模型
  13. C语言的5种简单排序算法
  14. 2020我也当了面试官-java面试题之四
  15. EVOLAB | 再度解析共识机制:POW
  16. linux看磁盘是sas还是sata吗,SAS和SATA硬盘傻傻分不清?看这里
  17. 如何以管理员身份运行命令提示符或终端窗口
  18. react黑马前端学习笔记
  19. 链接和二维码被微信拦截(被封锁、被屏蔽、被和谐)的最新解决方法——MaxJump
  20. 最好玩的计算机游戏排行,10款好玩的电脑单机游戏 好玩的单机游戏排行

热门文章

  1. 赋能数字化财富管理转型,神策数据推出全新证券行业解决方案
  2. 精益数据分析 | 你孜孜追求的“增长”可能只是自嗨
  3. 好程序员Web前端分享无法忽视的JavaScript技巧
  4. 关于理解Perl的fork函数的一个范例
  5. 整理了一下目前的专栏文章,基本可以完整解决普通问题了 - 知乎专栏
  6. 2016全球数据新闻奖(DJA)颁布, 12个获奖作品全剖析
  7. C++ new/delete、malloc/free
  8. 请问一个表的update能同时触发两个触发器吗?
  9. 雅思听力的词语练习打字!!!
  10. 关于unityengine.dll, unityengine.coremodule.dll