今天看了程序员2004年11期中的一篇文章,作者为温昱,题为“拥抱变化,敏捷开发从理论到实践”,颇触动。
文章提出,良性信赖对系统是无害的。当你在设计时预期的需求变化后来发生了,这就是完美设计,否则,属过度设计!!很多时候,程序员或系统分析员喜欢运用设计模式,近乎刻板地给系统分层,而不考察系统实际情况,有点为用模式而用模式的感觉。
我感觉自己就有这个倾向,我们当前的项目,业务逻辑并不复杂,基本上是大量工作表单
的CRUD操作,而且将来出现复杂逻辑的可能性也不大。完全可以将Dao层和Service层合并,简化为两层结构来开发。我的一个道友的观点是:对于多层,没必要硬往上靠,应该具体情况具体对待,否则,就是形而上学!呵呵,好大一顶帽子。
面对对象的五大原则中,开闭原则,依赖倒置原则我们耳熟能详,时刻谨记“依赖抽象而不依赖具体实现”,“把变化的部分抽取出来”等心得,从而容易丧失大局观。最后一条“良性依赖是无害的”正是让我们醒觉,设计的本正清源之道在于适应需求,围棋高手所下的无理棋有时也是顺应棋局所布的抄手,而非一昧地抄袭定式。
相关推荐
PostgreSQL+Citus分布式集群实战:从零搭建到性能调优
本文详细介绍了如何从零开始搭建并优化PostgreSQL+Citus分布式数据库集群。内容涵盖集群规划、源码编译安装、Citus扩展部署、节点配置、分布式表创建以及核心性能调优策略,为应对海量数据增长提供了完整的部署指南和实战解决方案。
程序的“通用性”和“过度设计”困境
在软件工程的实际操作中,我常常遇到这样一种现象:本可以用简单代码解决的问题,却因为设计者过分关注“通用性”、“可维护性”和“可扩展性”而变得不必要地复杂,难以理解。他们的思维方式是这样的:“这段代码未来可能会在更多场景中使用,所以我现在应该考虑它的可扩展性。”结果,他们在代码中加入了各种“框架结构”,以便在未来有新需求时,无需修改就能在新的地方使用。“通用性”的价值与误区作者并不否认“通用性”的价...
Python大数据舆情分析系统开发实战
舆情监测系统是大数据分析的重要应用场景,通过自然语言处理(NLP)技术解析社交媒体文本情感倾向。基于Python技术栈的解决方案整合了Scrapy爬虫框架进行数据采集,PySpark处理海量文本数据,结合SnowNLP和Jieba实现中文语义分析。系统采用微服务架构设计,包含数据采集层、处理层、存储层和应用层,通过情感分析优化和实时热点检测算法提升监测准确率。典型应用包括企业品牌监测、公共事件预警等场景,开发过程中需特别注意数据合规性和分布式集群的性能调优。
Java:如何优雅地设计我们的代码
工厂模式能让我们更简单地创建基础相同而局部不同的相似对象;适配器模式能让我们在实现接口时更简单地只实现特异性方法;策略模式则能够让我们调用接口时根据不同的条件路由到不同的实现策略上去。上面或许有些东西说的比较主观,有些细节点说的不到位,但我觉得当你真正发现并领悟所有的设计架构都是围绕业务服务和后期维护考虑时,过度设计的问题大体上就解决了。以上是我对于过度设计的理解,随着我工作年限的增加说不定过两年我会再有其他感悟,到时候再分享给大家。
CANoe的安装教程
CANoe的安装教程
ads设计Doherty功放(1)
Doherty功放的设计
聊一聊过度设计!
什么是过度设计?如何避免过度设计?
【探秘】二维异形件重叠移除算法:从度量到消除的实战解析
本文深入解析二维异形件重叠移除算法的核心技术与实战应用,涵盖重叠度量、零件扰动策略及消除方法。通过NFP(临界多边形)技术、空间分区加速等优化手段,有效解决异形件排版中的重叠问题,提升材料利用率和计算效率。适合制造业、CAD软件开发者及算法工程师参考。
代码的冗余设计:过度工程化的陷阱
代码简洁之道
从零到一:STM32G431的DSP库集成与FFT实战避坑指南
本文详细介绍了在STM32G431微控制器上集成CMSIS-DSP库并进行FFT实战开发的完整流程。重点解析了通过CubeMX和Keil环境配置DSP库的关键步骤、编译器宏定义陷阱及解决方案,并提供了FFT算法优化、内存管理及常见问题诊断的实用技巧,帮助开发者高效实现嵌入式信号处理应用。
遗传算法(Genetic Algorithm)详解与实现
遗传算法(Genetic Algorithm, GA)是受自然进化原理启发的一系列搜索算法。通过模仿自然选择和繁殖的过程,遗传算法可以为涉及搜索、优化和学习的各种问题提供高质量的解决方案。同时,它们类似于自然进化,因此遗传算法可以克服传统搜索和优化算法遇到的一些障碍,尤其是对于具有大量参数和复杂数学表示形式的问题。
阿里技术专家:谈谈软件开发中的 “过度设计”
引言写软件和造楼房一样需要设计,但是和建筑行业严谨客观的设计规范不同,软件设计常常很主观,且容易引发争论。设计模式被认为是软件设计的“规范”,但是在互联网快速发展的过程中,也暴露了一些问题。相比过程式代码的简单与易于修改,设计模式常常导致代码复杂,增加理解与修改的成本,我们称之为 “过度设计”。因而很多人认为,设计模式只是一种炫技,对系统没有实质作用,甚至有很大的挖坑风险。这个观点容易让人因噎废食...
Level 4自动驾驶系统设计0——功能与场景0
摘要:当前智能驾驶系统开发存在应试思维误区,过度依赖NCAP标准测试而忽视真实物理世界的复杂工况。随着系统进入L4大模型时代,必须从离散测试转向应对无限连续的长尾场景。关键在于解决传感器输入质量(避免"垃圾进垃圾出"问题),通过逆向定义方法论确保前端数据高置信度。同时采用影子模式收集分歧数据流,结合条件接受机制动态调整感知权重,最终实现功能释放主权(FO)的100%安全闭环。本文揭示了如何为端到端智驾大模型建立物理红线,这是确保L4系统量产的底层法则。
Eclipse .classpath文件浅谈
Eclipse .classpath文件浅谈: 每个新建java工程(Project)都默认存在的。 指定源文件位置, 对应工程属性Java build path中Source项中的一项, kind="src" 指明为源文件, 源文件路径path, output为这条路径中源文件编译以后class文件的输出路径。 指定源文件位置, 对应工程属性Java build path中S
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
浅谈eclipse生成的.classpath文件
<br /> <br />1、.classpath文件时eclipse新建web工程的时候生成的一个文件,改变java Build path的时候或者改变加载的jar包顺序的时候,这个文件也会改变。<br /><br />2、.classpath文件不能随意删除。个人在将已有的工程import进入eclipse工作区的时候将.classpath文件删除了,然后再重新导入jar包,整个工程就会重新编译,也就会产生.classpath文件,但是这个重新生成的.classpath文件的内容可能就会出问题,也就有可
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
[转]Eclipse .classpath文件浅谈
Eclipse .classpath文件浅谈: 每个新建java工程(Project)都默认存在的。 指定源文件位置, 对应工程属性Java build path中Source项中的一项, kind="src" 指明为源文件, 源文件路径path, output为这条路径中源文件编译以后class文件的输出路径。 指定源文件位置, 对应工程属性Java build p
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
Eclipse .classpath文件浅谈:
Eclipse .classpath文件浅谈:<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 每个新建java工程(Project)都默认存在的。<classpathentry kind="src" ōutput="km230/apite
浅谈eclipse生成的.classpath文件 (转
1、.classpath文件时eclipse新建web工程的时候生成的一个文件(就在工程目录下),改变java Build path的时候或者改变加载的jar包顺序的时候,这个文件也会改变。 2、.classpath文件不能随意删除。个人在将已有的工程import进入eclipse工作区的时候将.classpath文件删除了,然后再重新导入jar包,整个工程就会重新编译,也就会产生.clas
【转】Eclipse.classpath文件浅谈
<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 每个新建java工程(Project)都默认存在的。 <classpathentry kind="src" output="km230/apitest/classes" pa
627



被折叠的 条评论
为什么被折叠?



