JavaEE架构上的思考
2016-10-14 17:40
190 查看
许是我孤陋寡闻吧,我知道Java是面向对象思想的,我也知道Web项目很多都采用MVC架构以及三层架构什么的……
但是,这架构本身与面向对象思想是相背离的!
面向对象思想绝不是"调用任何方法前都要使用对象打点的形式",而是"充分的抽象、利用多态的方式重用代码"
然而在进入到实际工作中我发现,在经典的架构上使用面向对象思想几乎是不可能的。
第一,快速。
不是指的代码运行速度上的快速,而是指开发速度。项目刚开始的时候总是时间紧迫,要快速开发,需求什么的当然有,也都会把工作做好,可是真正投入到工作中之前,谁都不会明白真正的需求是什么。
为了快速开发,Spring自动装载的时候,我们只会去装载一个impl,不会尝试装载多个,甚至没机会去编写另一个impl作为传说中的"候补方案"
这当然有它的好处,毕竟直线逻辑是我们所有人都最容易理解的,这样直线写下来,比一层套一层的接口+实现更容易理解
而作为代价,当业务发生扩展时,我们只能在原来的代码上修修补补,很快就出现了一层又一层的if……这时候再转,你们都懂得,重构是怎样一个可怕的工作——尤其是这并非局部的重构,而是整个项目的重构。
第二,框架。
依据分层原理,一层和数据库打交道,我没记错的话它叫DAO,一层处理业务逻辑,叫Service,一层和页面打交道,叫Action
其中Service层要处理大量的业务逻辑,面向对象想要重载的话,就得从Action中调用各种不同的Service实现
然而,Action是单例的,它只应当Autowired一个Service,这就失去了面向对象的意义
或许"候补方案"的意义仍然存在吧,但我认为这实在不如从SVN上拉个分支出去
想要解决这个问题,这是架构上的问题,就得从架构上解决。
为了快速开发,前期的代码逻辑必然是直线结构,只有当业务出现分支时才开始变复杂
这样,框架就得将"不同的Service实现"这玩意隐藏在框架内部
我知道Spring的Autowire可以择定某一个特定的实现,但我却没想清除该如何将这个功能与面向对象思想联系起来
总之,在Action中Autowire同一个Service的不同实现这样的做法简直不可理喻
依然在想,嗯……想清楚了再说。
但是,这架构本身与面向对象思想是相背离的!
面向对象思想绝不是"调用任何方法前都要使用对象打点的形式",而是"充分的抽象、利用多态的方式重用代码"
然而在进入到实际工作中我发现,在经典的架构上使用面向对象思想几乎是不可能的。
第一,快速。
不是指的代码运行速度上的快速,而是指开发速度。项目刚开始的时候总是时间紧迫,要快速开发,需求什么的当然有,也都会把工作做好,可是真正投入到工作中之前,谁都不会明白真正的需求是什么。
为了快速开发,Spring自动装载的时候,我们只会去装载一个impl,不会尝试装载多个,甚至没机会去编写另一个impl作为传说中的"候补方案"
这当然有它的好处,毕竟直线逻辑是我们所有人都最容易理解的,这样直线写下来,比一层套一层的接口+实现更容易理解
而作为代价,当业务发生扩展时,我们只能在原来的代码上修修补补,很快就出现了一层又一层的if……这时候再转,你们都懂得,重构是怎样一个可怕的工作——尤其是这并非局部的重构,而是整个项目的重构。
第二,框架。
依据分层原理,一层和数据库打交道,我没记错的话它叫DAO,一层处理业务逻辑,叫Service,一层和页面打交道,叫Action
其中Service层要处理大量的业务逻辑,面向对象想要重载的话,就得从Action中调用各种不同的Service实现
然而,Action是单例的,它只应当Autowired一个Service,这就失去了面向对象的意义
或许"候补方案"的意义仍然存在吧,但我认为这实在不如从SVN上拉个分支出去
想要解决这个问题,这是架构上的问题,就得从架构上解决。
为了快速开发,前期的代码逻辑必然是直线结构,只有当业务出现分支时才开始变复杂
这样,框架就得将"不同的Service实现"这玩意隐藏在框架内部
我知道Spring的Autowire可以择定某一个特定的实现,但我却没想清除该如何将这个功能与面向对象思想联系起来
总之,在Action中Autowire同一个Service的不同实现这样的做法简直不可理喻
依然在想,嗯……想清楚了再说。
相关文章推荐
- Java Web技术架构的思考
- 构建iOS稳定应用架构时方案选择的思考,主要涉及工程结构,数据流思想和代码规范
- 推荐书籍<大型网站技术架构-核心原理与案例分析>--结合内容思考产品架构
- 秀野堂主:HTML5游戏架构思考
- 林仕鼎:架构设计的一些思考
- Android开发架构模式MVP的简单思考
- SOA架构中的思考
- Java基础之《JavaEE架构简介与Java Web新特性》
- 引擎新架构设计及思考
- 游戏服务器架构的思考
- JavaEE体系架构概述、MyBatis总结
- Memcache架构新思考
- javaEE设计思想和技术架构
- JavaEE应用的分层模型和架构
- IOS应用架构思考二(网络图片库)
- 【转自: http://blog.csdn.net/liuxiaotao008/archive/2008/06/29/2595391.aspx 】各种JavaEE架构图汇总!
- (JavaEE-09)JSP中的MVC与三层架构
- JavaEE 3层架构的的 DAO, Service, Web 简单封装
- php语言在Web开发三种主流WEB架构的思考
- A段架构设计_隽语集(IT+設計思考_1901)