首先声明,本人业余编程爱好者,把编程当作玩,不在IT界谋生,工作和生活圈子中也无人懂编程,好在有互联网,学了点皮毛,胡言几句,请大家拍砖。

版权声明:本博客文章如非特别注明,均为原创,作者保留所有权利!欢迎转载,转载请注明作者左洸和出处http://www.blogjava.net/myqiao

软件工程本质的三句话总结:

第一句:软件工程的终极目标是复用
第二句:复用永远要面对的问题是变化
第三句:依赖是导致变化难以控制的主要原因。

关于第一句话,不想多做解释,当然,软件工程中还有成本控制、开发周期控制、文档管理等等,这些工作最终都要通过复用来解决。

关于第二句话,学过哲学的都知道绝对运动和相对静止,所以变化是绝对的、是永恒的、是无法避免的、是不可预测的。对于变化,只能想办法控制它,利用它,不要让它造成破坏,但是不要想着能消灭它。

关于第三句,造成变化的原因很多,但是依赖导致的变化是最难以控制的,也是最具破坏性的。这里举个简单的例子来说明:

某个项目的某个源文件中有如下一行代码:

String PATH="D:\AppServ\www\test";

这行代码中,我们用一个字符串把 Test 项目的路径写死在源代码中,以后我们只要用到项目路径,就引用这个字符串。这样,所有引用到这个字符串的地方都对它发生了依赖关系。这里:用一个字符串是为了简化说明问题,实际中,他有可能是个类,有可能是数据库连接配置,有可能是模块等等。

这时候,变化来了,项目被上传到 Linux 服务器上,Windows 的路径格式无法识别了;数据库也从SqlServer 变成了 MySQL,怎么办?因为一切都写死了,唯一的办法就是打开源文件,一处一处查找,一处一处修改。

于是,一些厂家提供了功能强大的应用程序服务器,大家都按照统一约定的协议,像JNDI之类的东西,把所有有可能变化的因素都配置到服务器里,哪怕他是一个简单的数据库连接字符串,或者是一个复杂的对象实例。等需要使用的时候再通过协议中约定好的接口来访问。如果发生了变化,只需要修改配置,而不需要更改源代码,这样就最大限度的削弱了依赖,控制了变化。

这种重型的解决方案对于大型的、稳定的企业级应用是安全可靠的,但是应用服务器配置的修改维护很麻烦,权限也是个问题,如果你是一个虚拟主机上的个人站长,由于需求变动比较频繁,三天两头要更改J2EE容器配置,估计你的主机服务商不会给你这个权限吧。用核武器对付游击队,似乎太过火了。

大牛们对这种情况看不过眼,于是Spring等轻量级解决方案出现了,所有配置都写道XML文件里面,给了你最大的灵活性和权限。当然,依赖并没有消除,但是反过来了,原来我想要什么需要自己去找,如果发生了变化,可能就找不到,或者找回来错误的结果;现在我想要什么,工厂会自动给我送过来,发生什么变化我不管。当然,工厂是按照配置文件的描述来生产产品的,发生变化只需要修改配置文件,最大限度的减少了破坏性和侵入性。而且,权限都在你自己手里,配置起来很方便。

版权声明:本博客文章如非特别注明,均为原创,作者保留所有权利!欢迎转载,转载请注明作者左洸和出处http://www.blogjava.net/myqiao

写这篇文章是因为为了更好的理解思想,昨天用 PHP 写了个简单的实现发到博客里(文章在这里),却被拍砖说是“为了实现而实现”,可能因为我用的是PHP语言,没有Java高贵吧,所以被人瞧不上眼。但是个人觉得,控制反转、依赖注入是一种思想,并没有和那种语言绑定。

Spring 框架对我这样的业余玩家来说依然太重型了,只是大概了解了一下,对于一个玩票性质的 PHP 个人站点来说,自己做一个简单的实现有何不可呢?

转载于:https://www.cnblogs.com/myqiao/archive/2009/05/10/1453706.html

软件工程的本质,一点个人理解相关推荐

  1. AngularJS』一点小小的理解

    『AngularJS』一点小小的理解 AngularJS 是一个前端的以Javascript为主的MVC框架.与AngularJS相类似的还有EmberJS. 随着时代在进步,各种各样的开发理念与开发 ...

  2. 事件与委托的一点概念理解

    事件与委托的一点概念理解 早就接触过delegate和event,但是始终是一知半解,今天刚好有机会就好好研究一下! Delegate 顾名思义就是委托,委托的意思就是麻烦别人帮我干些事情.比如,我要 ...

  3. 关于Ndis驱动的一点个人理解

    对写过驱动的一些总结: 1,TDI层驱动,该层驱动位于windows kernel网络驱动的最顶层,个人觉得主要是针对连接时的redirect,filter比较好使,比如限制本地一些端口不能往外连接, ...

  4. Essence and accidents of software engineering(软件工程的本质和附加属性)

    comments:这个文章年代久远,1987年的文章,有些句子理解不了,但不妨碍该文成为软工领域的问题进行哲学思考的源头,Frederick P. Brooks, Jr. 对软工的问题给出了深刻的思考 ...

  5. 软件工程:到底应该怎么理解软件工程

    由来 当软件的规模越来越大,复杂度不断增加,软件项目开发维护过程中的问题就逐步暴露出来:软件产品质量低劣.软件维护工作量大.成本不断上升.进度不可控.程序人员无限度地增加.所以在 60 年代,&quo ...

  6. 【C 语言】数组 ( 多维数组本质 | 步长角度 理解 多维数组本质 )

    文章目录 一.从 步长角度 理解 多维数组本质 二.代码示例 一.从 步长角度 理解 多维数组本质 声明一个二维数组 ; // 声明一个多维数组int array[2][3]; 二级指针 : arra ...

  7. Layui的一点小理解(上)

    首先声明这是个人的一点理解,如有不对之处请指正,以下的例子有在官网上看到的,有的是自己写的.还是老规矩最后会附上官网的,如有不明白之处,请查看文档或留言. 既然说Layui,当然要简单的介绍以下什么是 ...

  8. java中怎样调用抽象类中的非抽象方法?(对原文做修改,加入一点自己理解)

    问: 例如:我有一个抽象类BaseStudentDAO,类中有一个非抽象方法load,我该怎样调用load这个方法? 答: 想调用BaseStudentDAO中的非抽象方法load,如果load方法是 ...

  9. 百度UNIT使用的步骤与自己的一点简单理解(下)

            最近项目需要语音上下文对话,找了几家都没有找到可以定制个性化上下文场景对话的技术,一般都是固定场景的对话,刚好,百度近期推出了UNIT技术,感觉刚好可以实现功能,可能需求与UNIT技术 ...

最新文章

  1. 我花了三个小时写了一道题的六千字题解....(POJ 2888 Magic Bracelet)
  2. 如何查看python安装了什么库-怎么看python安装了哪些库
  3. Hadoop-2.4.1学习之edits和fsimage查看器
  4. 1.13 总结-深度学习第五课《序列模型》-Stanford吴恩达教授
  5. nodejs express 路由与view创建多级目录
  6. C/C++ 动态存储分配 malloc calloc realloc函数的用法与区别
  7. 经典实用SQL语句大全汇总
  8. jsp import mysql con_jsp的分页查询的代码(mysql数据库)
  9. 购物网站注册页面html,电商购物网站 - 实现注册
  10. qtplaintextedit如何删除内容_YouTube:如何删除油管频道Channel
  11. 抓取html的地址怎么写,跪求一个获取URL地址html代码的写法
  12. 【源码】MATLAB的专业绘图工具
  13. ubuntu安装ipython3_ubuntu下ipython的安装
  14. Sopcast for linux更新至3.01!
  15. HHL论文及代码理解(Generalizing A Person Retrieval Model Hetero- and Homogeneously ECCV 2018)...
  16. docker常用命令network篇
  17. 服务器未能识别是什么意思,服务器未能识别 HTTP 标头 SOAPAction 的值
  18. 微信从原版到现在所有界面图片_微信6年来首次更换启动界面地球图片:来感受一下...
  19. 动手学深度学习第一次打卡
  20. 数学建模之对策论/竞赛论/博弈论(Python)

热门文章

  1. 国土空间规划中工作底图如何制作
  2. deno mysql_从 Node 到 Deno
  3. arcgis两点之间连线_使用ArcGIS制作城市关系强度图(附数据下载)
  4. 超图三维可以转换成HTML,iserver上发布的三维场景怎样调用到自己的html页面中?...
  5. groovy 访问java,Groovy如何能够访问Java类的私有方法?
  6. linux vim (your system doesn't appear to have the zip pgm)
  7. java复选框批量删除_vue+element+Java实现批量删除功能
  8. ESXI 6.7安装并部署主机
  9. Java基础---数组练习(最大值、最小值的索引)
  10. 北京热风文化传媒有限公司 公司介绍