`
jiayq
  • 浏览: 27345 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
引用
文章内容摘自Martin Fowlerhttp://martinfowler.com先生著作的中译本。
英文书名:Patterns of Enterprise Application Architecture
中文书名:企业应用架构模式
翻译:王怀民、周斌
ISBN:9787-111-30393-0

企业应用较多的是和关系数据库打交道。
数据源层的作用是连接数据库和领域逻辑层,他受领域逻辑组织方式的影响。
一个基本的想法是把sql语句从领域逻辑代码中剥离出来,因为应用开发人员不能很好的理解sql,并且这样也有助于数据库管理员得到数据库访问的sql,从而更好的调整和组织索引。
一种较好的做法是把SQL放到独立的类中,并按数据库的表结构组织这些类。这些类相当于数据的入口。有行数据入口和表数据入口两种用法。行数据入口类的查询方法为每一行数据产生一个实例,表数据入口类以记录集(结果集)的形式返回所有结果行。还可以把部分领域逻辑放到行数据入口类中,这样行入口类就演变成活动记录。
上述三种方式还要求应用开发人员理解数据库结构,要明确关系数据库的存在,按照关系数据库的特点是用数据。一种更好的办法是把领域模型完全独立于数据库,让数据映射器处理数据库和领域模型的操作对应。

行入口、表入口、活动记录和数据映射器在一个系统中可以同时出现,但要确定一个首选的方式。如果领域逻辑非常简单且类和表一致,使用活动记录;否则使用数据映射器。不推荐把行入口作为首选。

除了确定映射方法,还要考虑如何从数据库读取对象以及把对象写回数据库。

一个显而易见的方法是让对象的加载和保存方法处理从数据库读取以及写回数据库。

加载对象时,必须避免同一个数据行映射到两个或多个对象,否则很容易在分别更新不同对象后发现数据行变得混乱。标识映射专门用来记录读取的行,每次读入数据时都去标识映射里检查一下是否已经存在,如果存在就返回一个对象引用。

如果加载了对象并在内存中修改,就要记录每个修改过的对象,并保证把它们写回数据库。如果仅仅加载两条记录,这很容易。一旦加载的对象越来越多,这就不太容易了。工作单元是专门解决这个问题的一种模式,它能记录从数据库读取后对象的任何形式修改,并负责以适当的操作顺序把更新提交到数据库。

还有个棘手的同步问题,因为先读取对象再修改,所以要保证数据库状态的一致性,防止读取过程中有其他进程修改这条数据,也就是要使读取过程是独占的,否则就可能得到状态不一致或无效的数据。

若使用领域模型,还需合理安排关联对象的加载。如,加载订单对象时加载关联的客户对象。为避免关联大量对象时的低效读取,需要采用[i]延迟加载[i]。[i]延迟加载[i]的主要思想是给引用对象一个占位符,仅当需要通过引用访问时才去数据库读取实际对象。

关系数据库结构和对象结构天然的不匹配。首先是对关系的表达不同。对象通过运行时保存内存地址的引用表达关联关系,关系数据库通过外键表达;对象可以通过集合表达多个引用,范式要求关系数据库中连接必需是单值的。其次,对象有继承而关系数据库没有。

分享到:
评论

相关推荐

    SpringBoot配置多数据源实现动态切换数据源

    在数据库操作的Service层,你可以使用自定义注解来指定使用哪个数据源: ```java @Service public class UserService { @Autowired @Qualifier("primaryUserService") private UserRepository ...

    mybatis-plus多数据源/动态数据源配置示例代码

    - 另一种方式是在Service层或DAO层的接口上添加自定义注解,使用AOP拦截器来动态切换数据源。 5. **事务管理**: - 在多数据源环境下,需要注意事务的正确传播。Spring的`@Transactional`注解默认不支持多数据源...

    ssm实现多数据源配置

    5. **Service和DAO层**:在Service层,可以通过`@Transactional`注解指定使用的事务管理器,从而选择对应的数据源。在DAO层,MyBatis的Mapper接口或XML配置文件需要与特定的数据源关联。 6. **代码示例**:例如,你...

    spring boot 2多数据源,里面有hibernate和mybatis的多数据源代码

    5. **在业务层注入数据源**:在Service层或DAO层,通过`@Qualifier`注解指定要使用的数据源。 6. **测试与验证**:编写测试用例确保多数据源配置正确,能正常执行查询、插入等数据库操作。 在提供的`common-muldb-...

    springmvc_mybatis_多数据源

    4. **Service层**:在业务逻辑中,使用`@Transactional`注解并指定数据源,确保事务管理正确。 5. **Controller层**:接收HTTP请求,调用Service层的方法,实现多数据源的切换。 为了实现多数据源的切换,通常会在...

    SpringBoot+Atomikos+动态多数据源+事务+2种切换数据源的方式

    在现代企业级应用程序开发中,数据源的管理与事务处理是至关重要的部分。SpringBoot以其简洁的配置和强大的集成能力,成为了许多开发者的首选框架。本主题将深入探讨如何利用SpringBoot结合Atomikos实现动态多数据源...

    SpringMVC配置多数据源实战

    在Controller层,根据业务需求,调用对应的Service方法,Service方法中通过`@Transactional`注解来指定使用哪个数据源。 7. **注意点** - 确保数据库驱动已添加到项目依赖。 - 在实际业务中,可能需要根据具体...

    Spring+SpringMVC+Mybatis动态链接多数据源

    5. **业务层调整**:在Service层,根据业务逻辑选择对应的数据源进行操作,可以通过ThreadLocal等手段存储当前应使用的数据源标识。 6. **Controller层处理**:在Controller层,可以设置请求上下文中的数据源信息,...

    基于 SpringBoot 多数据源 动态数据源 主从分离 快速启动器 支持分布式事务

    基于 SpringBoot 多数据源 动态数据源 主从分离 快速启动器 支持分布式事务。一个基于springboot的快速集成多数据源的启动器。支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。支持数据库...

    spring mvc 配置多数据源

    ### Spring MVC 中配置多数据源详解 在Spring框架中配置多数据源的需求比较常见,尤其在需要处理不同类型的数据库或需要实现数据隔离的应用场景中。本文将详细介绍如何在Spring MVC项目中配置并使用多数据源。 ###...

    springboot连接池、动态配置多数据源连接池,特别适合大数据部门、数据中台服务的多数据源连接池.zip

    6. **使用数据源**:在Service或Repository层,可以通过@Autowired注解注入数据源,然后进行数据库操作。 最后,对于大数据部门和数据中台服务,这种动态数据源连接池的实现具有以下优势: - **灵活性**:可以轻松...

    asp.net数据源控件与数据库绑定控件

    asp.net 数据源控件与数据库绑定控件 Asp.net 数据源控件是 Asp.net 框架中的一种重要组件,用于将数据绑定到 Web 应用程序中。数据源控件可以与数据库进行交互,获取数据,并将其绑定到数据绑定控件中,以实现数据...

    springmvc多数据源连接

    5. 如果需要,可以在Controller层根据业务逻辑动态切换数据源。 以上就是在Spring MVC项目中实现Oracle数据库多数据源连接的方法,这使得我们可以灵活地管理和切换不同数据库,以满足复杂的企业级应用需求。

    mybatis-plus+动态数据源

    在IT行业中,数据库管理是核心任务之一,而动态数据源技术则是实现多数据库灵活切换的重要手段。本项目涉及的关键技术是"Mybatis-Plus"与"动态数据源"的结合使用,以及一系列相关的配置和扩展。下面将详细阐述这些...

    基于springboot整理的分布式事务及动态数据源切换

    整理的分布式事务 及动态数据源切换 基于数据库XA协议 maven 包可直接使用 maven 引入路径: ... <artifactId>... @DynamicDBSource("run") 可标注在server层也可以标注在Dao层 即可指定方法内使用的数据源

    SpringBoot实现动态切换数据源(含源码)

    这样,在DAO层中,通过`ThreadLocal`获取到的数据源信息,就能确保操作发生在正确的目标数据库上。 `AbstractRoutingDataSource`是MyBatis-Plus提供的一种抽象数据源路由类,它可以根据特定的条件动态选择数据源。...

    数据源切换

    在数据源切换的场景中,Druid可以作为中间层,管理多个数据库连接,并根据配置或编程方式实现动态数据源切换,确保业务在不同数据库间平滑过渡。 实现数据源切换的步骤通常包括以下几个方面: 1. **配置多数据源**...

    springboot 多数据源

    在服务层或者DAO层的方法上使用`@Transactional`注解,并指定数据源。例如,`@Transactional(value = "primaryDataSource")`或`@Transactional(value = "secondaryDataSource")`。 8. **使用JdbcTemplate或JPA**:...

    SSM(Spring+SpringMVC+MyBatis)多数据源配置框架

    5. **代码结构**:通常,我们会为每个数据源创建一个独立的服务层和DAO层,以便于管理和维护。 6. **注解驱动**:SpringMVC和Spring允许使用注解来简化配置,如@Controller、@Service、@Repository等,使代码更简洁...

    spring boot多数据源配置

    在Spring Boot应用中,多数据源配置是一项关键的技术,它允许我们同时管理多个数据库,比如主库和从库,或者不同类型的数据库。本教程将详细阐述如何在Spring Boot项目中实现这一功能,从数据源配置、实体管理到...

Global site tag (gtag.js) - Google Analytics