关于软件知识存在认识上和方法上的误区

author author     2022-08-23     691

关键词:

我们原先掌握的关于软件知识不是太贫乏就是不恰当,存在认识上和方法上的误区。

  软件的生命性

  软件是有生命的,这可能是老调重弹了,但是因为它事关分层架构的原由,反复强调都不过分。

  一个有生命的软件首先必须有一个灵活可扩展的基础架构,其次才是完整的功能。

  目前很多人对软件的思想还是焦点落在后者:完整的功能,觉得一个软件功能越完整越好,其实关键还是架构的灵活性,就是前者,基础架构好,功能添加只是时间和工作量问题,但是如果架构不好,功能再完整,也不可能包括未来所有功能,软件是有生命的,在未来成长时,更多功能需要加入,但是因为基础架构 不灵活不能方便加入,死路一条。

  正因为普通人对软件存在短视误区,对功能追求高于基础架构,很多吃了亏的老程序员就此离开软件行业,带走宝贵的失败经验,新的盲目的年轻程序员还是使用老的思维往前冲。其实很多国外免费开源框架如ofbiz compiere和slide也存在这方面陷阱,貌似非常符合胃口,其实类似国内那些几百元的盗版软件,扩展性以及持续发展性严重不足。

  那么选择现在一些流行的框架如Hibernate、Spring/Jdonframework是否就表示基础架构打好了呢?其实还不尽然,关键还是取决于你如何使用这些框架来搭建你的业务系统。

  存储过程和复杂SQL语句的陷阱

  首先谈谈存储过程使用的误区,使用存储过程架构的人以为可以解决性能问题,其实它正是导致性能问题的罪魁祸首之一,打个比喻:如果一个人频临死亡,打一针可以让其延长半年,但是打了这针,其他所有医疗方案就全部失效,请问你会使用这种短视方案吗?

  为什么这样说呢?如果存储过程都封装了业务过程,那么运行负载都集中在数据库端,要中间J2EE应用服务器干什么?要中间服务器的分布式计算和集群能力做什么?只能回到过去集中式数据库主机时代。现在软件都是面向互联网的,不象过去那样局限在一个小局域网,多用户并发访问量都是无法确定和衡量,依靠一台数据库主机显然是不能够承受这样恶劣的用户访问环境的。(当然搞数据库集群也只是五十步和百步的区别)。

  从分层角度来看,现在三层架构:表现层、业务层和持久层,三个层次应该分割明显,职责分明:持久层职责持久化保存业务模型对象,业务层对持久层的调用只是帮助我们激活曾经委托其保管的对象,所以,不能因为持久层是保管者,我们就以其为核心围绕其编程,除了要求其归还模型对象外,还要求其做其做复 杂的业务组合。打个比喻:你在火车站将水果和盘子两个对象委托保管处保管,过了两天来取时,你还要求保管处将水果去皮切成块,放在盘子里,做成水果盘给你,合理吗?

  上面是谈过分依赖持久层的一个现象,还有一个正好相反现象,持久层散发出来,开始挤占业务层,腐蚀业务层,整个业务层到处看见的是数据表的影子 (包括数据表的字段),而不是业务对象。这样程序员应该多看看OO经典PoEAA。PoEAA 认为除了持久层,不应该在其他地方看到数据表或表字段名。

  当然适量使用存储过程,使用数据库优点也是允许的。按照Evans DDD理论,可以将SQL语句和存储过程作为规则Specification一部分。

  Hibernate等ORM问题

  现在使用Hibernate人也不少,但是他们发现Hibernate性能缓慢,所以寻求解决方案,其实并不是 Hibernate性能缓慢,而是我们使用方式发生错误:

  “最近本人正搞一个项目,项目中我们用到了struts1.2+hibernate3, 由于关系复杂表和表之间的关系很多,在很多地方把lazy都设置false,所以导致数据一加载很慢,而且查询一条数据更是非常的慢。

  Hibernate是一个基于对象模型持久化的技术,因此,关键是我们需要设计出高质量的对象模型,遵循DDD领域建模原则,减少降低关联,通 过分层等有效办法处理关联。如果采取围绕数据表进行设计编程,加上表之间关系复杂(没有科学方法处理、侦察或减少这些关系),必然导致 系统运行缓慢,其实同样问题也适用于当初对EJB的实体Bean的CMP抱怨上,实体Bean是Domain Model持久化,如果不首先设计Domain Model,而是设计数据表,和持久化工具设计目标背道而驰,能不出问题吗?关于这个问题N多年就在Jdon争论过。

【Java学习交流群06】群号367617980【定期更新群文件】
课工场官网注册UID获取免费学习视频课,http://www.kgc.cn/?tuin=7145

技术分享


2021-07-28关于软件测试从业人员的几个误解

目前软件测试对提高软件质量重要性的不断提高,软件测试也不断受到重视。国内软件测试过程的不规范,重视开发和轻视测试的现象依旧存在因此,对于软件测试的重要性、测试方法和测试过程等方面都存在很多不... 查看详情

知道用杀毒软件的十大误区吗

...几乎每个用电脑的人都遇到过计算机病毒,也使用过杀毒软件。但是,对病毒和杀毒软件的认识许多人还存在误区。杀毒软件不是万能的,但也绝不是废物。 使用杀毒软件的十大误区误区一:好的杀毒软件可以查杀所有的病... 查看详情

关于前增量与后增量的认识误区

大学时老师讲C++时说过,x=i++; 与 x=++i 的区别当时以为很懂了,一个是后增量,一个是前增量x=i++; 相当于 x=i; i=i+1;x=++i;相当于  i=i+1; x=i; 并对这种解释深信不疑。近日微信群看到一则题目,... 查看详情

关于js闭包的误区

一直以为js的闭包只是内部函数保存了一份外部函数的变量值副本,但是以下代码打破了我的认识:functioncreateFunctions(){ varresult=newArray(); for(vari=0;i<10;++i) { result[i]=function() { returni; } } returnresult;}varfuncs=createFunctions( 查看详情

系统分析与设计之认识误区

1,用例是文本文档,而非图形;用例建模主要是编写文本的活动,而非制图。2,用例,UML图等保证不会是完美的,它们可能会遗漏关键信息或包含错误陈述。对此,解决方法并不是以瀑布的态度试图近乎完美地记录规格说明并... 查看详情

关于测绘软件一些优缺点的认识

---恢复内容开始---  经过两年大学专业的学习,我学习了越来越多的测绘知识,也了解了一些测绘工程所用的软件,在越来越多的使用中 ,也发现了一些软件中可以有所改进的地方。  真正解除各种测绘的软件... 查看详情

软件测试最容易陷入的28个误区

  最近跟一些刚刚进入软件测试行业的朋友去交流,发现了一个有趣的现象,就是对于这个行业的很多问题的认识都是一致的片面,当然也可以理解为误区。自己利用一点时间,把他们对于这个行业的认识误区都... 查看详情

浅析软件项目管理中的10个误区

随着计算机硬件水平的不断提高,计算机软件的规模和复杂度也随之增加。计算机软件开发从“个人英雄”时代向团队时代迈进,计算机软件项目的管理也从“作坊式”管理向“软件工厂式”管理迈进。这就要求软件开发人员特... 查看详情

延迟加载的一些知识和误区(代码片段)

...近开始看《java并发编程的艺术》一书,从里面get到了好些知识上的盲点,下面就延迟加载这个问题来分析一波~~首先咱们来看一段简单的代码:publicclassDelayLoadprivateDelayLoad()privatestaticDelayLoadinstance;publicstaticDelayLoadgetInstance()if(instance==n... 查看详情

7个前端新手常见误区,千万要避开!

越来越多的开发者加入前端开发队伍。但前端知识在不断更新着,大家对它的认识也各不相同,今天就为您解读,学习web前端都有哪七大误区。误区一:前端只是JavaScript但我要说的是:前端不只是JS。何谓前端开发?我认为,一... 查看详情

学习方法误区

...上还是假的没到自己的大脑之中 理解是为了找出核心知识点让大脑能基于这一点展开和其他知识产生练习梳理是为了对不规律的知识点进行逻辑化整理便于记忆练习为了灵活 查看详情

@autowired写在成员变量上和set方法上的区别?

@Autowired写在成员变量上和set方法上的区别?今天项目上遇到一个问题,service是普通的类,非接口实现类,如下@Service@Transactional@OALoggerpublicclassArchiveSortManager.........._______________________________ 查看详情

错题本上的常见错误类型及改正方法

...题  这类题,主要表现在智力因素培养方面,一般出自知识结构性错误,重做几遍错题是十分必要的,至于具体是几遍这要视你自己对错题的把握的熟练程度而定。  知识结构性错误是我们在初步学习时,没有建立起自身知... 查看详情

关于get请求的长度限制到底是多少?----一个误区,一个教训

截至今日之前,我一直因为从某处看到get、post区别中写的:get有长度限制,1024B。很抱歉在未经过个人的检验后,直接奉为正确的定义(也提醒我个人:以后概念理论,还是需要好好验证或求证,要能在繁杂的网络知识中,认真... 查看详情

认识vue

...辑上改变数据从而改变试图,把重点放在逻辑上的书写。关于视图的尽量交给模板去做VUE的M-MV-V模型 查看详情

对软件工程的认识

   软件工程专业是2002年国家教育部新增专业,随着计算机应用领域的不断扩大及中国经济建设的不断发展,软件工程专业将成为一个新的热门专业。软件工程专业以计算机科学与技术学科为基础,强调软件开发的工... 查看详情

软件工程知识大纲

第1章概述1.1什么是软件工程软件工程时关于软件生产的各个方面的工程学科1.2软件过程软件工程中系统化的方法叫做软件过程 第2章软件过程2.1软件工程四种基本的活动软件描述:必须定义软件的功能以及软件操作上的约束... 查看详情

对软件工程的理解与认识

 软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。 软件工程学科包含为完成... 查看详情