我喜欢struts,喜欢ibatis,喜欢spring,但我却喜欢.net,这实在是件很矛盾的事情。.net很好用,但在做项目的过程,总觉得缺少了点什么,对了,是框架。在java的世界里,有着许多成熟优秀的框架,但.net的框架,可选择的实在很少。在盼星星盼月亮的漫长过程里,终于盼到了Asp.net MVC,恕我不才,看来看去,都觉得这Asp.net MVC用起来实在是麻烦。我还是喜欢使用struts,尽管我很烦恼那些配置文件,但配置文件确实给我们带来了很多的好处。能轻松的扩展,轻易的修改。不过tomcat实在很垃圾,修改了配置文件居然还要重启。我喜欢.net,喜欢c#,喜欢Visual Studio,我觉得c#使用起来很自然,很舒服。然而,我害怕面对一张复杂的表单,想要获取几十个,上百个数据项实在是种痛苦。我经常的想,要是.net也有个struts的框架该多好啊,既然没有,那么,就让我来设计一个吧。

当然,struts的设计并不是为了仅仅解决获取表单数据麻烦的事情,要是仅仅如此,那就实在是太大题小作了,封装表单数据只是它的功能的开始,有了数据还需要对它们进行验证。有些人可能觉得,数据验证我都在前台进行了,后台就不需要对数据再进行验证,我只想说,这实在是件很危险的事情。我不打算讨论前台数据验证可不可靠,我个人觉得,它是不可靠的,即使它可靠,但是多一层的验证不是更确保系统的安全吗?验证完数据之后就是执行业务逻辑了,然后就是页面的跳转或者返回请求的页面。Struts让这个流程自动地执行了,我们所要做的,只是往Validate和Execute这两个方法中添加逻辑代码。根据ISO的管理理念,员工做的事情越单一,熟练度也就越高,出错的几率就越小。struts的设计,是完全符合软件工程的设计思想的。

配置文件是struts核心的一部分,许多人都不喜欢使用配置文件,我也是其中一个。记得刚开始接触struts的时候,对它的配置文件实在是很烦,但慢慢地,了解了配置文件的作用之后,就喜欢上使用配置文件了。配置文件在项目中的作用是毋庸置疑的,在大型的项目中尤其重要。需求是不断地改变的,但我们的程序可不能老跟着需求变,即使老板吃得消,员工也吃不消啊。改变一个页面的业务逻辑,只需要在配置文件中修改一下action的配置就可以了,其它的代码都不需要改变。说到配置文件,它还有一个很重要的作用,那就是“控制反转”或者“依赖注入”,其实我也搞不清这两个词语之间是什么关系。不过,也没必要在这些文字间咬文嚼字,就用IOC来代替它们好了。在开发过程中,经验会遇到一个类里面包含另一个类的实例,如:

class A
{
    ………..
}
class B
{
  A a = new A();
}

那么,在上面的代码中,B将依赖于A,也就是说,没有A,B就无法正常的执行。这样,B和A就产生了耦合。说得再明白一点,如果B的业务逻辑需要改变了,不想使用A,而是使用C,那么,就需要修改B的代码,还要重新编译,这对于大型的系统来说,需要起来代价是很大的。为了达到高内聚低耦合的需要,我们应该让B依赖于抽象而不是具体。比较常用的方法是使用工厂模式,如:

interface IA
{
  ……
}
class A
{
  ………..
}
class B
{
  IA a = Factory.CreateA();
}

那么需要改变时,只需要发动工厂就行了,这大概就是平时所说的控制反转吧,由以前的修改B类转为修改工厂类。但是还是需要修改代码,当需要扩展新的类时也要修改工厂类,这明显是换汤不换药嘛,依赖注入也就应运而生了。

对于依赖注入,我的感觉是就像是打针,需要什么就往里面注射什么。那么针在哪里?当然是在配置文件里了。要实现依赖注入,得修改一下B类,添加Setter方法。

class B
{
  IA a = null;
  IA A
  {
    set { a = value; }
  }
}

此时,B类中A属性就可以通过配置文件来注入了,想要A就注入A,想要C就注入C,多方便啊。注入,你可以这样理解:类是一个封装体,就把它想象成一个空心的球体吧,Setter方法相当于这个球体的一个小孔,注入也就是把它需要的东西通过这个小孔往里面塞。

说了这么多,其实都是在为我下一篇的文章作准备。下一篇文章将发布nstruts2.0,它比先前发布的nstruts1.0有了很大的改进,增加了许多新的元素,并且还支持依赖注入,注入的数据可以是对象,常量,还有集合。这些功能已经能完全满足项目开发中大部分的需求了。同时,nstruts2.0将会是个很好的学习实例,它设计的思路比较清晰和简单,对象框架设计感兴趣的朋友都会有或多或少的帮助。在发布之前,大家可以先看下我先前发布的nstruts1.0,了解一下大概。

地址:发布.net版的struts---nstruts1.0

转载于:https://www.cnblogs.com/reallypride/archive/2008/10/25/1319635.html

nstruts2.0发布前奏---浅谈struts和依赖注入在项目中的应用相关推荐

  1. 浅谈设计模式在iOS开发实战项目中的应用

    在我们日常的开发中设计模式伴随着项目的各个模块,巧妙地使用设计模式可以让我们写出更高效,简洁,优美的代码.可是因为对于设计模式的不熟悉,很多高效的设计模式并没有被很好地使用起来,而最近也正好在revi ...

  2. 浅谈BIM技术在“智慧工地”建设中的应用

    浅谈BIM技术在"智慧工地"建设中的应用 随着信息技术的不断发展,建筑行业的信息化程度不断提高,BIM技术在建设行业得到了广泛的推广和应用,同时,伴随着大数据时代的到来,智慧城市的 ...

  3. 浅谈信息技术在石油行业数字化转型中的运用

    2021年5月12-14日,中国石油石化企业信息技术交流大会暨油气产业数字化转型高峰论坛"将在北京举行,国内各油气企业.国际油气行业专家将齐聚于此,共同研讨5G.人工智能.大数据.区块链.数 ...

  4. 通过matlab进行绩效,浅谈matlab在企业人力资源绩效评价体系中的应用

    嘲 浅谈matlab在企业人力资源绩效评价体系中的应用 杨 旺 (中南财 经政法大学统计与数学学 院 湖北 ·武汉 430070) 摘 要 本 文主要介绍 了企业人力资源管理的绩效评价体 系中常用的两 ...

  5. 计算机辅助翻译工具的主要作用,浅谈计算机辅助翻译工具TRADOS在翻译中的积极作用.pdf...

    浅谈计算机辅助翻译工具TRADOS在翻译中的积极作用.pdf z v n h @ r rn N 0 0 0 : . , o v e r s e a e ll ll e tt t h p w v r n ...

  6. vb怎么样实时取mysql数据库数据_浅谈如何使用vb.net从数据库中提取数据

    1.设置从Model中的Sub Main 启动 2.程序结构 3.Model1 Imports System.Windows.Forms.Application Module Module1 Sub ...

  7. 计算机辅助药物设计 中药,浅谈计算机辅助药物设计在中药研究中的应用.pdf

    浅谈计算机辅助药物设计在中药研究中的应用.pdf 还剩 1页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 戈HI心脑肺m管病杂志2012年1 JlJ第 ...

  8. 函数图像在图形计算机的应用,浅谈图形计算器在高中函数教学中的应用

    浅谈图形计算器在高中函数教学中的应用 陈理宏广州市花都区教研室(510800) 摘要:函数是高中一个重要内容,在这个内容的学习中应用图形计算器的函数功能和绘图功能,有利于学生加深对函数知识的理解,挖掘 ...

  9. 51物联卡:浅谈物联网卡在智能安防中的发展前景

    51物联卡消息根据有关报告显示,到2020年全球物联网接入设备将会达到500亿个,并且在全球提供将超19万亿美元的相关就业机会,而中国的物联网技术,早已占在的世界的最前沿. 物联网时代,当科技的发展逐 ...

最新文章

  1. php怎么查询今天的数据,php 查询当天的某一时刻范围内的数据怎么写?
  2. nginx报http400错误解决方法
  3. Java基础点:多线程
  4. time since epoch
  5. 指哪分哪:交互式分割近期发展
  6. 三元运算符运算(Day02)
  7. php优化上百次foreach,php – 优化数千个项目的foreach
  8. linux pidof用法,科技常识:Linux pidof命令使用总结
  9. 风起云涌、战火通明,2019 年云计算大盘点
  10. JS实现点击复制目标内容
  11. 【把P2P进行到底:讲述Jxta的故事(2)】
  12. androidpn环境搭建
  13. c语言父 app,90后父母最爱的10款实用APP,中老年人必备!
  14. 高效能人士的七个习惯(一)由内而外全面造就自己
  15. 北京最新城市总体规划草案
  16. 海森堡量子力学与计算机,量子力学之父海森堡的大学生涯
  17. Android中使用SAX方式解析XML文件
  18. Unity3D使用鼠标旋转缩放平移视角
  19. urv中保研碰撞测试结果_经撞=安全?中保研碰撞测试结果告诉我们:不一定!|乜都知...
  20. 支付宝福卡破解——居中的ViewPager

热门文章

  1. 20170904_C基础
  2. VS2013 生成时复制文件或目录到指定目录
  3. 洛谷 P2046 BZOJ 2007 海拔(NOI2010)
  4. SpringMVC Controller的返回类型
  5. 手机是如何实现自动对焦的?
  6. C#静态构造函数总结
  7. 机器学习之数据预处理
  8. 2016猴年春节有感
  9. 字典转模型的过程中,空值和id特殊字符的处理
  10. 在Eclipse中给JRE-Library添加本地Javadoc