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

从责任分离的思想理解oo dp orm aop

阅读更多

I

在整个古代,随着物质生产力发展水平的提高,在原始社会后期和奴隶社会形成的过程中,先后出现了三次社会大分工:第一次社会大分工是农业和畜牧业的分离,以及原始人群分化为农业部落和游牧部落;第二次社会大分工是手工业和农牧业的分离,以及专业手工业工匠的形成;第三次社会大分工是商业和物质生产领域的分离,以及特殊商人阶层的形成。在三次社会大分工的基础上造成了城市和乡村的分离,逐渐形成了物质生产和精神生产、体力劳动和脑力劳动以及体力劳动者和脑力劳动者之间的分工,即社会基本分工。
                               
社会大分工对人类社会产生了巨大影响.责任分离就是其中重要的思想.

联系到软件行业,责任分离又是如何指导我们的发展的呢? 让我们从责任分离的思想来看看当今的技术.

 

对于软件行业, 从过程化语言到面向对象语言无疑是一场巨大的变革.

II面向对象和设计模式

从过程化的模型转变面向对象, 发生了什么样的变化?

一个功能的完成不再是一气呵成了,而是通过一个个对象之间进行协作,相互之间发送消息以完成一个复杂的任务.咋看之下,这个过程似乎变的复杂了,然而如同人类社会的分工,每个个体充分发挥了各自的作用,专注于自己的任务,脱离了外界的复杂联系,提高了效率, 也给我们带来了可复用的软件.  
                                     

记得<<Design Patterns>>一书的副标题吗? Elements of Reusable Object-Oriented Software 

设计模式充分发挥了责任分离的思想.看看这本书对模式的分类:Creational Patterns, Structural Patterns, Behavioral Patterns,这样的分类就是基于责任分离的原则所做的,将对象的创建,组织和行为交互分开,从三个方面来谈如何使用对象.


再来看几个具体的模式
,Visitor模式可以方便的为原有的对象扩展新的功能.这样就可以更好的组织对象的责任, 一些重要的与本身联系密切的责任由自己实现,而一些与本身联系不太紧密的或者将来想扩充的一些责任就可以交由其他对象来通过Visit原来的对象完成.
 

Bridge模式则更是将一部分责任抽出新建了一个对象,由它来完成那部分责任.为什么要这样? 因为那部分责任是多变的,完成的方法有很多种.将责任分离可以使得每个对象关注的变化少一些,也就更容易控制和管理,这和人类社会的分工思想没有太大的差异.


谈到设计模式免不了谈到一些设计的原则
.单一责任原则从名字上就可以看出它和本文的联系,每个对象专注于一个责任这是最理想的状况, 最方便管理. 依赖倒置原则似乎看不出它与责任分离的联系,但是在下面的文章中你将会看到依赖倒置原则是如何为责任分离所服务的.

 

开源领域中最为炙热的ORM, 为联系现实的对象世界和关系型数据库搭起了一座桥梁
III ORM

在当今软件的世界里,面向对象技术一统天下,渗透到几乎所有软件设计领域、应用领域和工程领域。与此同时,在数据库领域中,虽然关系数据库占据了绝大部分的市场份额,OracleDB2SQLServerInfomix成为数据库中的霸主,但关系数据库究竟还是是数据的一种存储方式,它不属于面向对象领域。当以关系数据库为数据存储方式时,由于关系概念与面向对象概念是完全不同的两个概念,它们之间存在严重的“阻抗失谐(Impedance Mismatch)”。为了解决这个问题,面向对象技术和数据库技术自然而然开始交流和结合,应用上层的面向对象要求渗透到数据库,甚至是数据库底层,并开始影响未来数据库的发展。


现代技术的发展,使得我们不得不不停地学习。我们不仅要学习面向对象、
UML、设计模式等知识,而且还需要学习Sql ServerADO.NETDataSetDataReader等知识。而在实际的开发中,真正对客户有价值的是其独特的业务功能,而现在的现状是我们花费了大量的时间在编写数据访问,CRUD方法,包括后期的Bug查找,维护等也会花费相当多的时间在数据处理上。这就是说,我们在实际的开发中很多的时间都被浪费在根本不创造价值的非业务事件上了。                                                                       


在使用ORM之后,我们将不需要再浪费太多的时间在ADO.NETSql语句上。ORM框架已经把数据库转变成了我们熟悉的对象,我们将只需要了解面向对象开发就可以实现数据库应用程序的开发。

将业务建模和数据存储的责任分开来, 可以使我们更加关注于我们需要关注的东西. 每次的开发变化在于业务模型的变化而不是数据的存储, 业务建模才使我们需要关注的东西.

责任的分离一方面使得业务开发人员减少需要编写的代码, 获得更高的开发效率, 同时将ORM交给对数据库更加在行的专业开发人员, 还能提高数据访问的性能, 速度和质量都获得了,这正是责任分离能给我们带来的最大的好处.


OOP之后的AOP又给我带来了什么新的东西

IV AOP

现在考虑一个简单的MVC应用。我们有个很简单、清晰、单一的设计需求,就是说:当model类的某个状态发生变化时,所有注册了与之相关联的view类要被(以某种方式)通知到这一变化。一般来说,在一个典型的实现中,你可能会在Model类管理状态改变的方法中看到散布各处的一大堆类似notifyObservers()的调用。Model的责任应该只是管理状态, 现在却要负责通知view, 这个责任就应该被分离,不然就不会有那么多的notifyObservers()调用, 这样不方便对程序的维护和修改(比如你要把notifyObservers()改成notify()).                                                

这时候就是AOP就出场了, 它可以对Model状态进行一个横切,然后插入notifyObservers().它的实现就是将责任分离的思想发挥到了一个更高的境界. OOP对此没有办法,AOP就提供了在更多的情况下实现责任分离的可能.


权限的管理
, 日志的记录, 事务的管理, 这些责任都应该脱离于业务对象, AOP的最大目的就是实现此种情况下的责任分离.所带来的好处和ORM有着完全类似的效果. 目前多是依靠J2ee来帮助我们做这些事,以后可能更多的是由Spring JBoss等等来帮助我们.


AOP
还有一个特性就是实现完全的依赖倒置.在目前的OOP下我们可以在某种程度下实现依赖倒置. 比如 A -> I <- B , 通过I这个接口我们实现了将AB的依赖转为BA的依赖. 然而在AOP下我们可以实现真正的将A -> B变为 A <- B.

如果将AOP的这一特性应用于ORM, 你能想象出什么样的结果? 我们是不是可以完全脱离数据库,就象没有数据库一样直接使用我们的业务对象, 和目前的ORM是不是又不一样了呢?

分享到:
评论

相关推荐

    ORM思想的深入学习ORM.zip

    4. **自定义ORM框架**:在深入理解ORM思想后,开发者可以尝试仿照Hibernate和MyBatis创建自己的简单ORM框架。这通常涉及到实体类的设计、映射关系的定义、数据访问接口的构建以及数据库操作的封装。这样的实践有助于...

    springaop多数据库读写分离

    以下将详细讲解如何利用Spring AOP来实现多数据库的读写分离。 首先,了解读写分离的基本概念。读写分离是指在一个数据库系统中,将读操作和写操作分配到不同的数据库服务器上,通常读操作远大于写操作,这样可以...

    开发人员必须学会的ORM三层构架思想

    ORM(Object-Relational Mapping,对象关系映射)三层架构是一种常见的软件设计模式...学习过程中,可以创建一个简单的示例项目,从数据模型的设计、ORM配置到业务逻辑实现,再到前端展示,全面体验ORM三层架构的魅力。

    Spring框架Jar包里面有ioc、aop、mvc、dao、orm几项

    Spring框架是Java开发中最常用的轻量级开源框架之一,它为开发者提供了强大的依赖注入(IOC)、面向切面编程(AOP)、模型视图控制器(MVC)、数据访问/对象关系映射(DAO/ORM)等功能。以下是这些核心概念的详细...

    JFinal 是基于 Java 语言的极速 WEB + ORM + AOP + Template Engine 框架.rar

    JFinal 是基于 Java 语言的极速 WEB + ORM + AOP + Template Engine 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有 Java 语言所有优势的同时再拥有 ruby、python...

    spring-orm源码

    通过阅读和理解Spring-ORM的源码,我们可以深入理解Spring如何与ORM(对象关系映射)框架进行交互,以及Spring如何简化数据访问层的开发。 1. **IoC容器与数据源** Spring的核心是IoC(Inversion of Control)容器...

    ORM映射与WEB的应用

    ORM的核心思想是通过创建一个映射文件或使用注解,将数据库的表与程序中的类关联起来,每个表对应一个类,表中的字段对应类的属性。这样,当我们在程序中操作对象时,实际上是在操作数据库中的数据,反之亦然。ORM...

    aop示例spring 的aop思想解决项目中多次出现的同一个问题

    总的来说,Spring的AOP思想极大地提升了代码的整洁性和可维护性,使得开发者能够更加专注于业务逻辑,而不是重复的公共服务。在实际项目中,合理利用AOP可以显著提高开发效率,并降低系统复杂度。通过深入理解和熟练...

    Hibernate入门讲义,理解ORM概念

    Hibernate入门讲义,理解ORM概念Hibernate入门讲义,理解ORM概念Hibernate入门讲义,理解ORM概念Hibernate入门讲义,理解ORM概念Hibernate入门讲义,理解ORM概念Hibernate入门讲义,理解ORM概念

    Spring整合其他ORM框架

    整合 Spring 与其他 ORM 框架,需要理解 Spring 的核心概念,如 Bean 容器、依赖注入以及 AOP 等,同时也需熟悉 ORM 框架自身的特性和使用方式。正确配置相关 jar 包,如 `spring-orm-3.2.0.RELEASE.jar`,是确保...

    spring-orm.jar

    《Spring ORM框架详解》 Spring ORM(Object-Relational Mapping)是Spring框架的重要组成部分,它为开发者提供了在Java应用中集成各种ORM框架的...理解并掌握Spring ORM,对于提升Java企业级应用开发的能力至关重要。

    基于Springboot结合aop实现读写分离实例工程系统-源码

    本项目“基于Springboot结合aop实现读写分离实例工程系统”旨在提供一个实际的应用示例,帮助开发者理解和实施这一技术。以下是关于这个项目的详细知识点介绍: 1. **Spring Boot**: Spring Boot是Spring框架的一个...

    ORM对象关系映射

    对象关系映射(ORM)是一种概念性的、易于理解的模型化数据的方法,基于三个核心原则:简单、传达性、精确性。ORM 方法论提供了概念性的模型化数据的方法,基于数据模型创建正确标准化了的结构。ORM 专门被设计为...

    org.springframework.orm.jar.zip

    例如,可以使用AOP实现通用的日志记录、性能监控、异常处理等功能,将这些横切关注点与业务逻辑分离,提高代码的复用性和可维护性。 五、Spring ORM实战应用 在实际项目中,Spring ORM常用于以下场景: - 创建DAO层...

    Spring+AOP全套jar包

    这样,开发者可以将关注点从业务逻辑中分离出来,例如日志记录、事务管理、安全检查等,这些都可以作为切面来实现。 在实际开发中,为了使用Spring+AOP,还需要一些额外的库,例如Spring JDBC和Spring ORM,它们...

    php中的orm

    在这些ORM框架中,"源码"标签可能意味着博客会深入到ORM的内部实现,探讨如何阅读和理解ORM的代码,这对于想要自定义或优化ORM行为的开发者非常有用。而"工具"标签可能涵盖了如何集成和使用这些ORM工具到项目中的...

    Introducing Delphi ORM.zip

    【标题】"Introducing Delphi ORM.zip" 是一个关于Delphi ORM(对象关系映射)技术的资源包,其中特别提到了TMS Aurelius这一框架。ORM是一种编程技术,它允许开发人员使用面向对象的方式来操作数据库,而无需直接...

    hibernate-aop

    而AOP则是一种编程范式,旨在简化复杂系统中的横切关注点,如日志、事务管理等,通过分离核心业务逻辑和辅助功能来提高代码的可维护性和复用性。 在将AOP与Hibernate结合使用时,我们通常会利用Spring AOP框架,...

    手写orm

    【描述】:虽然没有具体的描述,但可以推测这篇博客可能探讨了作者自己实现ORM框架的过程,可能涉及了以下内容:理解ORM的基本原理,设计数据模型与数据库表之间的映射,如何处理对象的持久化,以及事务管理等核心...

Global site tag (gtag.js) - Google Analytics