软件工程的本质,一点个人理解

简介:
首先声明,本人业余编程爱好者,把编程当作玩,不在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 个人站点来说,自己做一个简单的实现有何不可呢?



本文转自左洸博客园博客,原文链接:http://www.cnblogs.com/myqiao/archive/2009/05/10/1453706.html,如需转载请自行联系原作者


目录
相关文章
|
XML 存储 JSON
软件工程的配置化思想
软件工程的配置化思想
161 0
|
3月前
|
算法 Java 程序员
在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
68 9
|
3月前
|
敏捷开发 安全 测试技术
软件工程:从概念到实践
【8月更文第20天】随着信息技术的快速发展,软件在现代社会中扮演着越来越重要的角色。从简单的移动应用到复杂的操作系统,软件已经成为连接人与数字世界的桥梁。为了有效地开发和维护这些软件系统,软件工程应运而生。本文将探讨软件工程的基本概念、目标、原则以及常用的生命周期模型。
173 0
|
4月前
|
监控
软件复用问题之软件工程中事中缓释,如何解决
软件复用问题之软件工程中事中缓释,如何解决
|
6月前
|
测试技术
软件测试概念与基础
软件测试概念与基础
|
开发框架 程序员
软件工程概念——是什么?软件工程的过程PDCA?生命周期模型有哪些?
在刚结束完的机房,它就是一个软件,我们如何使这个软件能够供更多人去使用,软件如何更加规范化,就需要使用软件工程的思想啦!
|
大数据 测试技术
|
前端开发 程序员
引入软件工程的思想
引入软件工程的思想
|
安全 测试技术 UED
从软件工程角度看测试
近几年的软件测试岗位,开始逐渐变为了QA,即质量保障。看似只是一个名词的变化,其实背后对应的是企业对软件测试这个岗位有了更多的要求和期望。当然也有同学会自嘲自己是点工、PageClienter等,面试造火箭入职拧螺丝的背后也存在很多无奈。
|
监控 数据可视化 测试技术
软工导第一节课 计算机软件工程学作一个简短的概述,回顾计算机系统发展简史 软件工程的基本原理和方法有概括的本质的认识,详细讲解生命周期相关知识讲解8种典型的软件过程模型
软工导第一节课 计算机软件工程学作一个简短的概述,回顾计算机系统发展简史 软件工程的基本原理和方法有概括的本质的认识,详细讲解生命周期相关知识讲解8种典型的软件过程模型
271 0
软工导第一节课 计算机软件工程学作一个简短的概述,回顾计算机系统发展简史 软件工程的基本原理和方法有概括的本质的认识,详细讲解生命周期相关知识讲解8种典型的软件过程模型