`
calmness
  • 浏览: 354009 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

框架设计时强制性依赖以及非依赖式约定的考虑

    博客分类:
  • Java
阅读更多
    在框架的设计中,例如struts,我们知道对于每个用户定制action都需要继承strtus的action,此乃典型的方式,这种方式的弊端是对框架依赖严重,不利于系统的移植,另一种方式是针对用户的类,不进行任何框架接口类的继承或者实现,只通过形式上进行约束,例如针对每个execute方法,框架不提供任何超类,只是口头的约定用户需要使用框架则必须自行实现该方法,不提供任何强制性的约束,这种方式的好处是用户定制的action可在代码实现上避免对框架的依赖,然而却因为没有固定约束,导致容易出现错误。

    第一种方式是传统的解决方案,利弊大家也都知道,第二种方式虽然容易让使用的用户犯错,不过可以减轻应用对框架的依赖程度,而且通过框架详细指导可以减少用户犯错的机会,为了减少框架依赖此种做法是否有可取的价值?在此希望各位高手不吝赐教。
分享到:
评论
6 楼 taowen 2007-05-04  
框架的侵入性并不影响可测试性,也不一定影响灵活性。开发效率在企业应用中才是一锤子定音的东西。代码写的少,好维护,那就行了。不要给低侵入性蒙住了眼睛。
5 楼 calmness 2007-05-03  
JJYAO 写道

宽松,自由度大,没有侵入性等等并不是POJO带来的益处,很直接的,POJO能带来测试的方便性和降低在不同框架,不同访问方式下代码移植的成本


宽松,自由度大,没有侵入性自然就利于测试以及移植等,这并不冲突。

JJYAO 写道

另外,在我看来,这二种方式如果只是简单的依靠约定,而框架不提供额外的功能,它们并没有本质的区别,也没有压倒性的优点(除了上面优点)

上面所说的优点还不够吗?很多框架在宣传时往往都是以这些优点为主,但是最终能够很好的做到这些优点的好象并不多。

JJYAO 写道

而真正发挥框架能力的应该是客户端+框架本身

这句我还无法很好的理解,客户端是指。。。。。。?
4 楼 JJYAO 2007-05-03  
xly_971223 写道
就现在的趋势看第一种方式逐渐被第二种方式所取代 像 struts2 就是采用
个人认为约定跟继承其用意是一样的 都是为了规范客户端,让客户端遵守一定的规则

那么约定比继承到底好在那儿呢?
在struts1.X中我们要实现的方法是execute(....)参数是钉死的
在struts2中要实现的方法似乎比较简单String doXXX(),对方法的约束非常的宽松

约定比继承更加的宽松 自由度更大
约定没有侵入性


宽松,自由度大,没有侵入性等等并不是POJO带来的益处,很直接的,POJO能带来测试的方便性和降低在不同框架,不同访问方式下代码移植的成本

另外,在我看来,这二种方式如果只是简单的依靠约定,而框架不提供额外的功能,它们并没有本质的区别,也没有压倒性的优点(除了上面优点)
而真正发挥框架能力的应该是客户端+框架本身
3 楼 xly_971223 2007-05-03  
就现在的趋势看第一种方式逐渐被第二种方式所取代 像 struts2 就是采用
个人认为约定跟继承其用意是一样的 都是为了规范客户端,让客户端遵守一定的规则

那么约定比继承到底好在那儿呢?
在struts1.X中我们要实现的方法是execute(....)参数是钉死的
在struts2中要实现的方法似乎比较简单String doXXX(),对方法的约束非常的宽松

约定比继承更加的宽松 自由度更大
约定没有侵入性
2 楼 calmness 2007-05-01  
我没有说不使用框架啊,我是说换种更轻便的约束方式来设计框架,尽量避免依赖框架,例如我们不对请求处理的方法进行任何类型上的约束,而是通过一种口头的约定,或者通过annotation指定请求处理的action,而不进行action的继承,这样就可以使用任何用户定制的bean来作为action,而不需要继承框架的action,只是这样对于用户定制的bean就没有任何类型上的约束,不知道我是否说得够清楚。
1 楼 lujh99 2007-05-01  
框架可以减少用户的编程量,把复杂的事情变简单,加快开发速度,使用框架没什么不好的。

相关推荐

    NET设计规范:约定 惯用法与模式 第2版

    《NET设计规范:约定、惯用法与模式 第2版》这一书主要聚焦于.NET框架下的软件设计准则、约定以及最佳实践。对于那些希望在.NET平台上构建高质量、可维护的应用程序的开发人员来说,这本书提供了宝贵的指导。接下来...

    84丨开源实战四(上):剖析Spring框架中蕴含的经典设计思想或原则1

    低侵入性意味着Spring框架并不会强制改变或限制应用的结构,而是通过依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)来管理对象间的依赖关系,降低了组件间的耦合度。...

    无涯教程网-Spring-Boot电子教程.pdf

    Spring框架最初被设计为一个轻量级的、非侵入式(不强制要求继承框架提供的类或实现特定接口)的容器。它的优势在于,它不仅可以用于任何Java应用程序,而且对构建基于Java企业版(Java EE)的应用程序提供了大量的...

    类的设计--接口

    7. **默认方法**:Java 8还引入了默认方法,接口中可以定义带默认实现的方法,为接口提供了一种非强制性的实现方式。 通过合理地设计和使用接口,开发者可以构建出更加灵活、可扩展且易于维护的软件系统。在实际...

    后端开发框架是用于构建和管理服务器端应用程序的软件框架,它们提供了一系列工具和库,帮助开发者简化后端应用的开发、部署和维护 以下

    后端开发框架是构建和管理服务器端应用程序...选择合适的框架时,需要根据项目的具体需求、团队的技术背景等因素综合考虑。无论选择哪种框架,它们都能为开发者提供强大的工具集,帮助他们更快地构建高质量的应用程序。

    SPRING面试宝典

    这是一种强制性的注解,确保Bean的所有属性都被正确设置。 **4.5 `@Autowired`注解** `@Autowired`注解用于自动装配Bean。它可以应用于字段、构造函数和setter方法等。 **4.6 `@Qualifier`注解** `@Qualifier`...

    55道Java面试题及答案

    - 构造器注入适用于强制依赖,setter注入适用于可选依赖,后者提供更高的灵活性。 10. **设计模式的区别**: - 工厂模式专注于创建对象,依赖注入关注对象间的依赖关系。 - 适配器模式和装饰器模式都涉及对象...

    ActiveJDBC官方说明手册.pdf

    - **设计理念**:旨在解决现有 ORM 框架如 Hibernate、JPA 等的复杂性和难用性问题,提供更为简洁高效的解决方案。 #### 二、ActiveJDBC与传统ORM框架对比 - **对传统ORM框架的不满**: - **Hibernate**:虽然强大...

    阿里云 专有云企业版 V3.8.0 分布式任务调度ScheduleX 开发指南 20190621.pdf

    例如,警告信息用于提示可能引起系统故障或人身伤害的操作,说明则提供非强制性的补充信息和最佳实践。 **目录结构** 完整的开发指南应包含详细的接入指南,介绍如何初始化和配置ScheduleX,以及API概览和列表,...

    网站开发一般流程说明

    选择工具时,团队应考虑兼容性、效率和团队成员的熟悉程度,不一定要求全团队使用同一套工具,但要确保最终能顺利整合。 3. **项目开发流程**: - 需求分析:由项目经理引导,团队共同讨论确定用户需求,规划网站...

    接口:从协议到抽象基类1

    Python的文化鼓励使用协议,即通过文档和约定定义的接口,而不是强制性的接口约束。 Python的接口通常是类公开的属性,包括方法和数据属性,以及特殊方法,比如`__getitem__`或`__add__`。尽管如此,Python中并不...

    基于Springboot+vue的动漫商城管理系统

    【Spring Boot基础知识】 Spring Boot是由Pivotal团队提供的全新框架,其设计目标是用来...在实际开发过程中,需要关注接口设计的合理性、前后端数据交换的安全性以及用户体验的优化,以此确保系统的稳定性和易用性。

    chapter19【杰】1

    Chapter 19主要探讨了软件开发中的架构、实施和测试之间的关系,以及如何保持代码与架构的一致性,防止架构侵蚀。在这个过程中,提到了几种关键的技术和实践。 首先,将设计嵌入到代码中是确保一致性的重要手段。这...

    21春东财《审计学概论》单元作业二_2参考答案.docx

    #### 独立审计准则体系中哪项内容不具有强制性? - **知识点**:独立审计准则体系通常由独立审计基本准则、独立审计具体准则、执业规范指南和独立审计实务公告等构成。这些组成部分各有其作用和定位。 - **独立...

    1,Java编程规范(第三版).rar

    4. **异常处理**:Java中异常处理是强制性的,理解何时使用try-catch-finally,何时抛出异常,以及如何使用checked和unchecked异常,都是重要的编程技巧。 5. **对象和类的设计**:书中详细讨论了面向对象设计原则...

    最强软件测试面试题!!

    25. 接口自动化测试框架一般基于Selenium、Appium、JMeter等,设计时要考虑可扩展性、维护性、复用性。 以上内容详细解答了软件测试面试中涉及的各种知识点,覆盖了Web自动化测试、APPUI自动化测试以及接口测试的...

    DownloadsDownloads

    它的核心特性可以自动配置Spring框架,同时提供了一组非强制性的约定,使得开发者能够快速创建独立的、生产级别的基于Spring的应用。 1. **Spring Boot的优势** - 快速启动:内置Tomcat服务器,无需额外配置。 - ...

    设计模式1

    这对于依赖注入、反射以及在运行时创建未知类型对象的场景非常有用。 总的来说,接口在设计模式中扮演着至关重要的角色,它促进了代码的模块化,支持了面向接口编程,增强了程序的多态性,并有助于实现松耦合的设计...

    SpringBoot 47道面试题和答案.docx

    SpringBoot的核心设计理念是“约定优于配置”,通过自动配置和起步依赖,使得开发者可以快速创建生产级别的Java应用。它消除了大量手动配置工作,同时也保留了Spring的灵活性,使得开发过程更为高效。 SpringBoot的...

    【狂神说】Spring全面详细笔记.md

    2. **轻量级和非侵入式**:引入Spring框架并不会对现有的应用程序结构产生显著影响,因为它并不强制开发者遵循特定的设计模式或者架构风格。 3. **控制反转(IoC)**:通过将对象的创建权交给Spring容器,减少了代码...

Global site tag (gtag.js) - Google Analytics