- 浏览: 27342 次
- 性别:
- 来自: 北京
最新评论
引用
文章内容摘自Martin Fowlerhttp://martinfowler.com先生著作的中译本。
英文书名:Patterns of Enterprise Application Architecture
中文书名:企业应用架构模式
翻译:王怀民、周斌
ISBN:9787-111-30393-0
英文书名:Patterns of Enterprise Application Architecture
中文书名:企业应用架构模式
翻译:王怀民、周斌
ISBN:9787-111-30393-0
企业应用较多的是和关系数据库打交道。
数据源层的作用是连接数据库和领域逻辑层,他受领域逻辑组织方式的影响。
一个基本的想法是把sql语句从领域逻辑代码中剥离出来,因为应用开发人员不能很好的理解sql,并且这样也有助于数据库管理员得到数据库访问的sql,从而更好的调整和组织索引。
一种较好的做法是把SQL放到独立的类中,并按数据库的表结构组织这些类。这些类相当于数据的入口。有行数据入口和表数据入口两种用法。行数据入口类的查询方法为每一行数据产生一个实例,表数据入口类以记录集(结果集)的形式返回所有结果行。还可以把部分领域逻辑放到行数据入口类中,这样行入口类就演变成活动记录。
上述三种方式还要求应用开发人员理解数据库结构,要明确关系数据库的存在,按照关系数据库的特点是用数据。一种更好的办法是把领域模型完全独立于数据库,让数据映射器处理数据库和领域模型的操作对应。
行入口、表入口、活动记录和数据映射器在一个系统中可以同时出现,但要确定一个首选的方式。如果领域逻辑非常简单且类和表一致,使用活动记录;否则使用数据映射器。不推荐把行入口作为首选。
除了确定映射方法,还要考虑如何从数据库读取对象以及把对象写回数据库。
一个显而易见的方法是让对象的加载和保存方法处理从数据库读取以及写回数据库。
加载对象时,必须避免同一个数据行映射到两个或多个对象,否则很容易在分别更新不同对象后发现数据行变得混乱。标识映射专门用来记录读取的行,每次读入数据时都去标识映射里检查一下是否已经存在,如果存在就返回一个对象引用。
如果加载了对象并在内存中修改,就要记录每个修改过的对象,并保证把它们写回数据库。如果仅仅加载两条记录,这很容易。一旦加载的对象越来越多,这就不太容易了。工作单元是专门解决这个问题的一种模式,它能记录从数据库读取后对象的任何形式修改,并负责以适当的操作顺序把更新提交到数据库。
还有个棘手的同步问题,因为先读取对象再修改,所以要保证数据库状态的一致性,防止读取过程中有其他进程修改这条数据,也就是要使读取过程是独占的,否则就可能得到状态不一致或无效的数据。
若使用领域模型,还需合理安排关联对象的加载。如,加载订单对象时加载关联的客户对象。为避免关联大量对象时的低效读取,需要采用[i]延迟加载[i]。[i]延迟加载[i]的主要思想是给引用对象一个占位符,仅当需要通过引用访问时才去数据库读取实际对象。
关系数据库结构和对象结构天然的不匹配。首先是对关系的表达不同。对象通过运行时保存内存地址的引用表达关联关系,关系数据库通过外键表达;对象可以通过集合表达多个引用,范式要求关系数据库中连接必需是单值的。其次,对象有继承而关系数据库没有。
发表评论
-
基本模式
2010-11-21 10:37 643入口 封装外部系统或资源访问的对象 包装器模式 映射器模式 ... -
会话状态模式
2010-11-21 10:25 789客户会话状态 将会话状态保存在客户端 数据传输对象,URL参数 ... -
离线并发模式
2010-11-21 10:12 888乐观离线锁 通过冲突检测和事务回滚来防止并发业务事务中的冲突 ... -
分布模式
2010-11-21 10:04 633远程外观 为细粒度对象提供粗粒度的外观来改进网络上的效率。 ... -
Web表现模式
2010-11-21 09:53 655模型、视图、控制器 模型是表示领域信息的对象,它包含除了用于U ... -
对象关系元数据映射模式-资源库
2010-11-21 09:13 722协调领域和数据映射层,利用类似于集合的接口来访问领域对象 -
对象关系元数据映射模式-查询对象
2010-11-21 09:06 878描述一次数据库查询的对象 -
对象-关系元数据映射模式
2010-11-21 07:46 945引用文章内容摘自Martin Fowlerhttp://mar ... -
对象-关系结构模式-具体表继承
2010-11-20 22:28 724引用文章内容摘自Martin Fowlerhttp://mar ... -
对象-关系结构模式-类表继承
2010-11-20 21:46 660引用文章内容摘自Martin Fowlerhttp://mar ... -
对象-关系结构模式-单表继承
2010-11-20 21:44 650引用文章内容摘自Martin Fowlerhttp://mar ... -
对象-关系结构模式-序列化LOB
2010-11-20 21:42 717引用文章内容摘自Martin Fowlerhttp://mar ... -
对象-关系结构模式-嵌入值
2010-11-20 21:38 615引用文章内容摘自Martin Fowlerhttp://mar ... -
对象-关系结构模式-依赖映射
2010-11-20 21:35 597引用文章内容摘自Martin Fowlerhttp://mar ... -
对象-关系结构模式-关联表映射
2010-11-20 21:34 676引用文章内容摘自Martin Fowlerhttp://mar ... -
对象-关系结构模式-外键
2010-11-20 16:44 716引用文章内容摘自Martin Fowlerhttp://mar ... -
对象-关系结构模式-表示域
2010-11-20 16:39 609引用文章内容摘自Martin Fowlerhttp://mar ... -
对象-关系行为模式-延迟加载
2010-11-20 16:31 821引用文章内容摘自Martin Fowlerhttp://mar ... -
对象-关系行为模式-表示映射
2010-11-20 16:19 662引用文章内容摘自Martin Fowlerhttp://mar ... -
对象关系行为模式-工作单元
2010-11-20 16:14 1223引用文章内容摘自Martin Fowlerhttp://mar ...
相关推荐
在数据库操作的Service层,你可以使用自定义注解来指定使用哪个数据源: ```java @Service public class UserService { @Autowired @Qualifier("primaryUserService") private UserRepository ...
- 另一种方式是在Service层或DAO层的接口上添加自定义注解,使用AOP拦截器来动态切换数据源。 5. **事务管理**: - 在多数据源环境下,需要注意事务的正确传播。Spring的`@Transactional`注解默认不支持多数据源...
5. **Service和DAO层**:在Service层,可以通过`@Transactional`注解指定使用的事务管理器,从而选择对应的数据源。在DAO层,MyBatis的Mapper接口或XML配置文件需要与特定的数据源关联。 6. **代码示例**:例如,你...
5. **在业务层注入数据源**:在Service层或DAO层,通过`@Qualifier`注解指定要使用的数据源。 6. **测试与验证**:编写测试用例确保多数据源配置正确,能正常执行查询、插入等数据库操作。 在提供的`common-muldb-...
4. **Service层**:在业务逻辑中,使用`@Transactional`注解并指定数据源,确保事务管理正确。 5. **Controller层**:接收HTTP请求,调用Service层的方法,实现多数据源的切换。 为了实现多数据源的切换,通常会在...
在现代企业级应用程序开发中,数据源的管理与事务处理是至关重要的部分。SpringBoot以其简洁的配置和强大的集成能力,成为了许多开发者的首选框架。本主题将深入探讨如何利用SpringBoot结合Atomikos实现动态多数据源...
在Controller层,根据业务需求,调用对应的Service方法,Service方法中通过`@Transactional`注解来指定使用哪个数据源。 7. **注意点** - 确保数据库驱动已添加到项目依赖。 - 在实际业务中,可能需要根据具体...
5. **业务层调整**:在Service层,根据业务逻辑选择对应的数据源进行操作,可以通过ThreadLocal等手段存储当前应使用的数据源标识。 6. **Controller层处理**:在Controller层,可以设置请求上下文中的数据源信息,...
基于 SpringBoot 多数据源 动态数据源 主从分离 快速启动器 支持分布式事务。一个基于springboot的快速集成多数据源的启动器。支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。支持数据库...
### Spring MVC 中配置多数据源详解 在Spring框架中配置多数据源的需求比较常见,尤其在需要处理不同类型的数据库或需要实现数据隔离的应用场景中。本文将详细介绍如何在Spring MVC项目中配置并使用多数据源。 ###...
6. **使用数据源**:在Service或Repository层,可以通过@Autowired注解注入数据源,然后进行数据库操作。 最后,对于大数据部门和数据中台服务,这种动态数据源连接池的实现具有以下优势: - **灵活性**:可以轻松...
asp.net 数据源控件与数据库绑定控件 Asp.net 数据源控件是 Asp.net 框架中的一种重要组件,用于将数据绑定到 Web 应用程序中。数据源控件可以与数据库进行交互,获取数据,并将其绑定到数据绑定控件中,以实现数据...
5. 如果需要,可以在Controller层根据业务逻辑动态切换数据源。 以上就是在Spring MVC项目中实现Oracle数据库多数据源连接的方法,这使得我们可以灵活地管理和切换不同数据库,以满足复杂的企业级应用需求。
在IT行业中,数据库管理是核心任务之一,而动态数据源技术则是实现多数据库灵活切换的重要手段。本项目涉及的关键技术是"Mybatis-Plus"与"动态数据源"的结合使用,以及一系列相关的配置和扩展。下面将详细阐述这些...
整理的分布式事务 及动态数据源切换 基于数据库XA协议 maven 包可直接使用 maven 引入路径: ... <artifactId>... @DynamicDBSource("run") 可标注在server层也可以标注在Dao层 即可指定方法内使用的数据源
这样,在DAO层中,通过`ThreadLocal`获取到的数据源信息,就能确保操作发生在正确的目标数据库上。 `AbstractRoutingDataSource`是MyBatis-Plus提供的一种抽象数据源路由类,它可以根据特定的条件动态选择数据源。...
在数据源切换的场景中,Druid可以作为中间层,管理多个数据库连接,并根据配置或编程方式实现动态数据源切换,确保业务在不同数据库间平滑过渡。 实现数据源切换的步骤通常包括以下几个方面: 1. **配置多数据源**...
在服务层或者DAO层的方法上使用`@Transactional`注解,并指定数据源。例如,`@Transactional(value = "primaryDataSource")`或`@Transactional(value = "secondaryDataSource")`。 8. **使用JdbcTemplate或JPA**:...
5. **代码结构**:通常,我们会为每个数据源创建一个独立的服务层和DAO层,以便于管理和维护。 6. **注解驱动**:SpringMVC和Spring允许使用注解来简化配置,如@Controller、@Service、@Repository等,使代码更简洁...
在Spring Boot应用中,多数据源配置是一项关键的技术,它允许我们同时管理多个数据库,比如主库和从库,或者不同类型的数据库。本教程将详细阐述如何在Spring Boot项目中实现这一功能,从数据源配置、实体管理到...