起源:zhihu.com/question/277243683/answer/393676961
这问题你应该去问企业级 Java 架构师。
就比方 print 一句 hello world 吧。main 函数里 print 一下?太面向过程,太 low 了。
得封装一个类。叫 Printer. Printer 有个成员办法,叫 print。
然而!光一个类太 low 了,当前要是有不同的实现怎么办?所以得加一个接口。PrinterInterface。
然而!interface 是没有实现的,还是要有默认实现才行。所以得加个虚构类,AbstractPrinter 实现 PrinterInterface,而后 Printer 继承 AbstractPrinter。
然而!你有了那么一套,该怎么创立实例呢?间接 new Printer()?太 low 了,那叫实现依赖。必定不行的,所以要搞一个工厂类,PrinterFactory,PrinterFactory 用 PrinterInterface 返回实例,这样就暗藏了实现细节了。
然而!PrinterFactory 自身也是实现类啊,太 low 了,所以得有 PrinterFactoryInterface, AbstractPrinterFactory.
而且在 PrinterFactory 外面该怎么写呢?间接 new Printer()? 太 low 了。还是实现依赖。
最初,你要把这一堆玩意在代码里组装起来,也太难看了,各种 new 实现类。太 low!
好在咱们有个高级玩意,叫依赖注入!把程序对象构造全写到配置文件外面。这一套当然是不能自己造轮子的。配置 Spring 吧。搞了那么多 lib,靠命令行或者 IDE 的项目管理必定不够啊,得有依赖治理。Maven 啊 Gradle 啊使劲上。
最最初,要 print 的货色怎么传给程序呢?硬编码?命令行传参数?太 low!当然得写在 XML 外头。
光是 XML 当然还不够企业级,再加上 DTD 验证吧。
而后就波及到了 XML 解析的问题了。代码里间接操起 parser 吗?太 low! 当然要写个 parser 的包装类,interface, abstract class, implementation class, factory class 再来一套。毕竟,不能依赖实现啊,当前我要是换 parser 了怎么办。
所以最初是成品是一堆配置文件,一堆 jar,compile 进去的程序 200MB。
IDE 得装上 300 个插件,关上我的项目硬盘响老半天吃掉 2GB 内存,而后一堆插件弹提醒要求降级。
哦对了,在这所有产生之前,还得画 UML 图呢。
三年后我的项目竣工了,部署到客户的服务器上一跑,立马解体,一地的 stack trace。原来客户服务器上用的是 JDK 5 而新我的项目须要 JDK 6. 而后问客户你们不能降级吗,答案是不行,因为另外一个企业级开发组给做的企业级解决方案只反对 JDK 5。接着客户把你们的架构师臭骂了一顿,你搞了那么多设计就没有想过可能会换 JDK 吗?
近期热文举荐:
1.1,000+ 道 Java 面试题及答案整顿 (2022 最新版)
2. 劲爆!Java 协程要来了。。。
3.Spring Boot 2.x 教程,太全了!
4. 别再写满屏的爆爆爆炸类了,试试装璜器模式,这才是优雅的形式!!
5.《Java 开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞 + 转发哦!