`
leogao_emcom
  • 浏览: 82941 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

约定优于配置的一个思考

阅读更多


   为什么必须用IOC(DI),实际上是出于在设计上的一种关注分离观念,使得系统各部分独立演化,不相互影响,使得系统能够适应环境变化的要求。
   但是问题是:A:依赖的判定,现在依赖于XML配置文件的事先说明,大量的XML造成加载变慢,测试时虽然只关注涉及到的对象,但是全部加载了定义数据,使得速度很慢,另外XML臃肿带来的问题也不小。本来是为了简化系统的构建,但是我们除了在开发Bean的工作量,还不得不更多的维护配置。

     对IOC容器改进的想法(有待实现):
     采用Coc(约定优于配置),这个SpringX已经先前一步了,对于明确类型的依赖关系,采用反射判断属性类型并实例化后注入。
     对于基于接口的依赖,因为没有指明具体的依赖目标类,只能通过XML说明,那么这样做就能大大简化XML配置文件,另外因为在获得“主”对象,Bean.Factory.CreateBean(TargetType.class)可以指明一个依赖注入的方向,就是针对target type的,那么IOC容器就没有必要把所有BeanDefinition导入,测试一个Bean也只加载和此Bean相关的东西,速度很快,配置也简单。
      
     不过Coc的IOC也有问题,就是我们注入不是对象而是值,如果全部采用Coc,只能初始值为0或空,也许你会说不是还有XML来指明吗?但是这样的注入值会有多少?你无法假定,这和具体的功能实现有关,根本无法假定,不过>1个或者超出100个都有可能,注定在特定情况下会使XML配置再度臃肿,虽然启动速度仍然可能很快,但是针对XML的维护量也是不少的。这样的话,我的想法是,分析一下很多时候确实需要几个初始化的固定数值注入到目标对象中,比如想初始化一个列表的大小为10,不过还有其他一些值,是依赖于运行时的,比如一个值由另外一个东东获得,那么可不可以做一个可以注入注出变量的中间地带,在另个对象的提供的数值变化后,本对象就能自动获得?即使是在初始化的时候,而提供值的对象被设计成不需要固定值初始化的, 它可以根据某些逻辑自己提供值,这样也能大大简化XML配置和BeanDeiniftion加载的情况。

    不知道其他人的想法如何?讨论一下

分享到:
评论
2 楼 沙舟狼客 2011-03-23  
其实在开发中有好多都是固定模式的,所以应该用约定;这样维护起来很方便;但缺点是对于新手来说这些约定太多,记着太慢!
1 楼 幽梦新影 2011-03-23  
适用自己的才是最好的

相关推荐

    写一个框架的详细步骤.docx

    1. 零配置启动,遵循约定优于配置的原则,支持代码和配置文件两种扩展方式。 2. 仅依赖Servlet,通过插件与Spring等框架集成。 3. 优化项目结构,简化代码和资源的组织。 4. 提供多层次的拦截器,增强控制和过滤功能...

    devops落地思考以及规范参考

    使用Maven或Gradle的约定优于配置原则,可以使项目结构更加一致。 7. 异常规范:异常处理是保证程序健壮性的关键。应明确区分异常类型,避免空指针、数组越界等常见错误,使用try-catch-finally语句捕获和处理异常...

    stripes英文文档(全部)

    Stripes通过利用Java 5的新特性,比如注解(Annotations),遵循“Convention over Configuration”(约定优于配置)的设计原则,大大简化了配置过程。开发者只需在Java代码中添加少量的注解即可完成原本需要在XML...

    某开源项目Guns技术文档+个人总结

    该项目以JavaWeb技术为基础,旨在通过提供约定优于配置、减少编码量、提高开发效率和减少项目维护成本的特点,吸引开发者的注意。本技术文档将详细探讨Guns项目的各个方面的使用方法、开发实践以及一些高级配置选项...

    springboot209基于web的大学生一体化服务平台的设计与实现.zip

    它集成了大量常用的第三方库配置(如DataSource、JPA、MVC等),通过“约定优于配置”的原则,极大地提高了开发效率。 2. **Web应用程序开发**:SpringBoot主要用于快速开发基于Java的Web应用。它包含内嵌的Servlet...

    java版电商源码-data-engineering:如何建立一个优秀的数据工程团队

    java版电商源码数据工程 您将如何引导数据团队? 下面是关于如何建立梦想数据团队的任务、资源、工作...约定优于配置优于编码。 多思考少打字 把事情简单化 重用而不是集成而不是构建。 面向服务(CLI、Web HTTP API、

    Software Build Systems- Principles and Experience

    Maven 通过约定优于配置的原则,使得构建过程更加简洁明了。 2. **C 和 C++ 构建工具**:C/C++ 领域常见的构建工具有 Make、CMake 和 Bazel。 - **Make**:基于 Makefile 文件,是最早的构建工具之一。虽然功能...

    基于SpringBoot的大学生就业信息管理系统源码.zip

    它集成了大量常用的Java企业级应用功能,如数据访问、安全、缓存、消息等,通过“约定优于配置”的方式,大大减少了开发者的工作量。SpringBoot的核心特性包括自动配置、内嵌Web服务器(如Tomcat)、起步依赖等。 2...

    大厂面试必备Java核心题

    - Spring Boot是一种约定优于配置的Spring扩展,旨在简化Spring应用的初始搭建及开发过程。 10. **SpringCloud**: - Spring Cloud是一系列框架的集合,用于快速构建分布式系统中的一些常见模式。 11. **...

    The rails way

    Rails的核心理念在于遵循“约定优于配置(Convention over Configuration)”的原则,使得开发者能够在更少的代码量下完成更多的工作。 Rails的出现极大地推动了敏捷开发(Agile Development)和测试驱动开发(Test...

    Real World Java EE Patterns Rethinking Best Practices

    1. **约定优于配置**:在Java EE中,通过减少显式配置的需求,使开发过程更加简洁高效。 2. **依赖注入**:依赖注入是一种将对象的依赖项通过构造函数、方法或字段自动注入的设计模式,可以提高代码的可测试性和解耦...

    think-in-spring:对spring原始解析的各种分析和实践

    Spring Boot简化了Spring应用的启动和配置,通过“约定优于配置”的原则,极大地提高了开发效率。配合Spring Cloud,Spring Boot可以轻松构建微服务架构,提供服务发现、配置中心、负载均衡等功能,实现服务间的解耦...

    Thoughts:关于我的想法的博客文章

    5. **Ruby on Rails**:Ruby最著名的应用是Web框架Ruby on Rails,它遵循“约定优于配置”和“Don't Repeat Yourself (DRY)”的原则,极大地简化了Web应用开发。 在压缩包文件名称列表中,我们看到"Thoughts-main...

    ruby 入门教程

    Ruby on Rails(简称Rails)是Ruby最著名的Web开发框架,遵循“约定优于配置”的原则,极大地提高了开发效率。 十、实践与学习资源 学习Ruby,除了官方文档外,还可以参考《Programming Ruby》、《The Well-...

    LeaoFramework:纯娱乐

    在Ruby社区中,有许多知名的框架,如Ruby on Rails,它以其MVC(模型-视图-控制器)架构和约定优于配置的理念深受喜爱。Leao Framework虽然可能规模较小,但同样采用了类似的模式,帮助开发者组织代码,提高开发效率...

    培训课程

    Rails以其“约定优于配置”和“DRY(Don't Repeat Yourself)”的原则,提高了开发效率。 7. **Ruby的异常处理**:在Ruby中,异常处理通过`begin`、`rescue`、`else`和`ensure`关键字进行。这使得开发者能够优雅地...

    Zheng7426.github.io

    4. **Rails框架**:Ruby on Rails(简称Rails)是Ruby的一个流行Web开发框架,遵循“约定优于配置”原则,提供了一套完整的工具链,简化了Web应用的开发过程。 5. **GitHub仓库**:在GitHub上,每个项目都被称为...

    forge:Jeremy Hajek教授的个人博客-The Forge

    3. **Ruby on Rails框架**:作为Ruby最著名的Web开发框架,Rails的强大功能和“约定优于配置”原则可能会是讨论的重点。Hajek教授可能会介绍路由、控制器、模型、视图的概念,以及如何快速开发Web应用。 4. **元...

Global site tag (gtag.js) - Google Analytics