`
letitbe
  • 浏览: 235240 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring的缺点(转)

阅读更多
来自:http://www.iteye.com/topic/17518?page=1
问题是我觉得rich domain object 和domain Dao双向依赖的关系我也很不喜欢。我觉得那么就像现在那么样,thin domain object,外加Dao层和Service层,单向依赖,分层很清楚,要么就向rails那样,就是一个model,管你dao还是service,全 部都在model里面。
赫赫,请问,没有domain model ,何来dao ,何来敲击键盘而来的代码?
dao依赖domain model是很理所当然的。 不过让domain model依赖于dao,确实很拗口,所以dao肯定需要一个接口,domain model依赖于dao的接口也是很合理的。这里的关键在于:
把DAO已经published的接口作为整个领域模型比较核心的一部分。 如果设计比较好的ORM 关联可能会把引入query 导致的双向依赖的危险减至最小,不会因为DAO接口实现的失败导致整个领域模型的错误,而把这种错误转变为领域模型关联关系的设计错误。

这里有个publish接口容易导致被误用的危险,DAO接口如果是领域模型提出的请求实现,那么这个设计就会很冒风险,因为如果一旦你的DAO接 口publish了,你就要冒着别的正在写domain model的开发人员会耦合于你的接口,一旦你的接口publish了,改动就非常困难了,而且如果一旦发现因为需求分析不够导致的DAO接口逻辑有问 题,那么这个将是非常痛苦的重构/修改过程。
所以关键在于让合理的关联代替复杂的查询。

说到接口,顺便说说对满天飞的interface的反感,我以前就是那样满天飞的,先在感觉飞的太高了。

接口其实就等同于代码隐藏,说句不好听的话就是代码私有化。 我发布一个接口,加上一些比较清晰的说明。 调用着一般都会只看接口说明感觉合适就直接IOC进来用了,久而久之就有可能被误用接口的危险。 如果没有接口,依赖代码就是文档的和相互可以修改的原则,那么大家都可以直入对方的正体,看一下对方代码的具体实现逻辑,有问题可以直接提出来探讨,这样 就减少了程序风险,而且也省去了来来回回反反复复修改interface 和实现的麻烦。
接口就如同是一个盖子,盖住了很多东西,然而在代码极度共享和互改的环境中,还是少用为妙。

我的观点是一个重要的接口都应该提供一个抽象类来实现基本的骨架!这样当你的接口改动时只影响你的抽象类。而对实现接口的继承抽象类的子类没有影响。 其实接口只是定义mixin(混合类型)的理想选择(java中接口才允许多继承), 例如:一个教练本身也是球员。那么我们可以定义一个mixin接口,组合一些新的方法让实现这个mixin的抽象类不仅具有Train和Play的职责, 还有组合产生的特性。
一个缺点:不支持分布式部署。无法把一个bean给fail over或者re-deploy。
实际上,所有轻量级ioc容器真用起来都没什么用处,因为它们都无法应付分布式的需求。(jboss mc的作者跟我说的)

呵呵?谁有分布式的需求?

spring不是支持集群了吗?分布式就用不着了吧

有一个收费的T字头的方案能帮助spring实现分布式吧,没有免费的实现是挺麻烦的。

我们的做法是在5台tomcat服务器前面放一台四层交换机之类的硬件,这样,相同的ip来访问时会被指派到同一台tomcat,因此不需要http session共享,也能达到类似的分布式效果,还节约了session共享的消耗。

说到接口,顺便说说对满天飞的interface的反感,我以前就是那样满天飞的,先在感觉飞的太高了。

一直觉得interface就是C++里的.h 头文件,好不容易java里不需要.h,脱了苦海,现在大家又争先恐后再入火坑。

其实如果把interface用于动态proxy, cglib已经提供了解决方案,spring的OAOP,测试时的easyMock,都有cglib实现,性能比基于interface proxy的更高一点点。

如果是代码设计方面的,一定要看清楚实际情况再决定是否抽象interface。我觉得interface在代码设计方面最主要的应用其实是多重继承吧和firebody说的盖子功能吧。

所以springside里只有几个用到多重继承和webservice盖子的时候才用了interface. 比如dao, appfuse等sample为了演示多种dao方案才用interface阿,我们没事又不会换orm方案的,忙活这个接口没意义呀。


分享到:
评论

相关推荐

    Spring中IoC优点与缺点解析

    Spring 中 IoC 优点与缺点解析 IoC(Inversion of Control)是 Spring 框架中的一种设计模式,它的主要思想是将对象的创建和管理交给容器,从而解耦合对象之间的依赖关系。今天,我们将详细解析 IoC 的优点和缺点。 ...

    Spring的优缺点及工作原理

    ### Spring的优缺点及工作原理 #### Spring框架概述 Spring框架是Java平台上最受欢迎的企业级应用程序开发框架之一。它提供了一套全面的编程和配置模型,旨在简化企业级应用的开发。Spring的核心特性主要包括依赖...

    Struts,Spring,Hibernate优缺点

    Struts、Spring 和 Hibernate 是Java Web开发中三大主流的开源框架,它们各自有着独特的功能和优缺点。在构建企业级应用程序时,理解这些框架的核心特性以及它们如何相互补充至关重要。 Struts 是一个基于MVC...

    strut spring hibernate 优缺点

    ### Struts, Spring, Hibernate 三大框架的优缺点分析 #### Struts框架 **优点:** 1. **组件模块化与灵活性:** Struts框架强调组件的模块化设计,这使得开发者可以根据项目的不同需求灵活地选择和组合这些组件。...

    ssh框架优缺点 struts hibernate spring

    ### SSH框架:Struts、Hibernate、Spring 的优缺点分析 #### Struts **优点:** 1. **MVC模式的支持**:Struts框架遵循MVC(Model-View-Controller)设计模式,它将应用程序分为模型层、视图层和控制器层,这样的...

    Struts,Spring,Hibernate优缺点_fly.mht

    Struts,Spring,Hibernate优缺点_fly.mht

    Spring事务优缺点及使用详解.docx

    【Spring 事务管理详解】 一、事务简介 事务是数据库操作的基本单位,它确保一组SQL语句要么全部成功,要么全部失败,以维护数据的一致性。在MySQL中,事务通常涉及INSERT、UPDATE、SELECT和DELETE等操作。当操作...

    Spring Data JPA的优点和难点.pdf

    Spring Data JPA是Spring生态中的一个强大ORM框架,它极大地提高了Java开发者在处理数据库操作时的效率。Spring Data JPA的主要优点在于其高度的开发效率、成熟的语法结构以及与Spring框架的紧密集成。 1. **开发...

    JAVA中spring介绍:JAVA spring的优缺点详解

    JAVA spring的优缺点详解

    springcloud学习笔记.pdf

    Spring Cloud 学习笔记 本笔记主要介绍了从单体架构到微服务架构的演变过程,以及 Spring Cloud 中的微服务架构搭建。下面是本笔记的详细知识点总结: 一、单体架构 单体架构是指整个系统只有一个工程,打包往往...

    spring cache

    spring cacke spring cacke

    详尽的Spring2.0学习提纲

    3. 构造器注入与setter注入:比较两种注入方式的优缺点,选择合适的注入策略。 4. Bean的作用域:掌握singleton、prototype、request、session等不同作用域的概念及其应用场景。 三、AOP(面向切面编程) 1. AOP...

    想学习的看过来了spring4.0、springboot、springcloud详细视频课程(硅谷)

    07.硅谷学习_SpringCloud_微服务优缺点 08.硅谷学习_SpringCloud_微服务技术栈有哪些 09.硅谷学习_SpringCloud_为什么选择SpringCloud作为微服务架构 10.硅谷学习_SpringCloud_SpringCloud是什么 11.硅谷学习_...

    Spring Boot参考手册 中文版

    Spring Boot 的缺点包括: * 学习曲线陡峭:Spring Boot 的使用需要有一定的 Spring 框架基础知识,学习曲线陡峭。 * 配置复杂:Spring Boot 的配置可以非常复杂,需要开发者具有深入的配置经验。 6. Spring Boot...

    spring-roo-docs

    - **缺点:** - 开发效率降低:需要手动编写原本由SpringRoo自动生成的代码。 - 维护成本增加:缺少SpringRoo提供的自动化功能。 **6.3 移除步骤** 移除SpringRoo的步骤包括: - **第一步:推入重构**:将Spring...

    SSH(Spring Struts Hibernate)的优缺点

    SSH,即Spring、Struts和Hibernate,是Java开发中一种常见的技术栈,用于构建企业级Web应用程序。这个组合提供了模型-视图-控制器(MVC)架构的支持,以及数据库访问和业务逻辑处理的能力。让我们详细分析一下SSH的...

    Struts,Spring,Hibernate优缺点.

    ### Struts、Spring、Hibernate 的优缺点分析 #### 一、Struts 框架 **优点:** 1. **实现 MVC 架构模式:**Struts 通过 Model-View-Controller (MVC) 设计模式,使得业务逻辑与表示层分离,便于维护和扩展。 2. ...

Global site tag (gtag.js) - Google Analytics