1、解决的问题:一个客户,有多个销售记录,有多个合同记录,有多个服务记录,有多个......,在这种结构,为了实现松耦合,销售记录、合同记录中,只记录下客户的id和name(以方便展示),但:当一个客户名称更新时,所有和它相关的数据如何同步更新。有一种方法,就是将客户更新的地方写代码更新和它相关的数据,但这样对紧紧耦合在一起。第二种方法,手动写一个类似触发器的东西来实现。
2、bo类结构展示
客户类:
public class Client
{
@Id
@GeneratedValue(generator = "uuidGenerator")
@GenericGenerator(name = "uuidGenerator", strategy = "uuid")
@Column(length = 32)
private String id;//标识
@Column(length = 10)
private String code; //编号
@Column(length = 50)
private String name; //名称
//其他省略
}
客户销售记录类
public class Sell
{
@Id
@GeneratedValue(generator = "uuidGenerator")
@GenericGenerator(name = "uuidGenerator", strategy = "uuid")
@Column(length = 32)
private String id;//标识
@Column
private double price;//单价
@Column
private double amount;//数量
@Column
private double money;//金额
@Column(length = 32)
private String clientId; //客户ID
@Column(length = 50)
private String clientName; //客户名称
//其他省略
}
客户合同记录类
public class Contract
{
@Id
@GeneratedValue(generator = "uuidGenerator")
@GenericGenerator(name = "uuidGenerator", strategy = "uuid")
@Column(length = 32)
private String id;//标识
@Column(length = 20)
private String code; //合同编码
@Column(length = 50)
private String name; //合同名称
@Column(length = 32)
private String clientId; //客户ID
@Column(length = 50)
private String clientName; //客户名称
//其他省略
}
3、客户更新触发器接口的定义
public interface TriggerClientUpdateInf
{
List<TriggerClientUpdateInf> ls=new ArrayList<TriggerClientUpdateInf>(); //存放所有实现该接口的类对象
/**
* 功能描述:客户信息更新后触发
*</br>日期:2012-4-16
*</br>@author : 劲风
*</br>@param dao 数据库操作类
*</br>@param dto 客户DTO,主要传入要更新客户的id和更新后的名称
*/
public void afterClientUpdate(Dao dao,ClientDto dto);
}
4、销售记录对触发器的实现
@org.springframework.stereotype.Service //为了让spring将该类管理,以便将类载入内存,以便执行static中的语句
public class TriggerClientUpdateSell implements TriggerClientUpdateInf
{
@Override
public void afterClientUpdate(Dao dao, ClientDto dto)
{
String hql="update Sell t set t.clientName='"+dto.getName+"' where t.clientId='"+dto.getId+"'";
dao.updateByHql(hql);
}
static
{
TriggerClientDeleteInf.ls.add(new TriggerClientUpdateSell());
}
}
5、合同记录对触发器的实现
@org.springframework.stereotype.Service //为了让spring将该类管理,以便将类载入内存,以便执行static中的语句
public class TriggerClientUpdateContract implements TriggerClientUpdateInf
{
@Override
public void afterClientUpdate(Dao dao, ClientDto dto)
{
String hql="update Contractt set t.clientName='"+dto.getName+"' where t.clientId='"+dto.getId+"'";
dao.updateByHql(hql);
}
static
{
TriggerClientDeleteInf.ls.add(new TriggerClientUpdateContract());
}
}
6、在客户更新处的代码
...
List<TriggerClientUpdateInf> ls =TriggerClientUpdateInf.ls;
for(TriggerClientUpdateInf tr:ls)
{
tr.afterClientUpdate(dao,clientDto); //
}
...
如此,便可用实现TriggerClientUpdateInf来实现构耦合。(1)在客户更新处,会将所有放入list中的实现TriggerClientUpdateInf接口的对象的afterClientUpdate方法执行一遍。谁放的,放的什么,我不关心,我只认这个接口,执行一扁即可。(2)其它关心客户更新的模块,如销售记录,只需要实现接口,并将一个实例放入list中即可!
分享到:
相关推荐
Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、模块化且松散耦合的Web应用程序。它基于Spring框架,提供了模型-视图-控制器(MVC)架构模式,使得开发者可以更专注于业务逻辑,而不是底层的HTTP处理。...
这些模块通过面向对象的设计原则,实现了松耦合、高内聚,便于代码的复用和后期维护。此外,JAVA的异常处理机制和单元测试框架也在代码质量把控上起到了关键作用。 总的来说,这个基于JAVA开发的证交所管理系统B/S...
通过依赖注入(DI)和面向切面编程(AOP),SpringMVC能够实现松耦合和高度模块化的代码结构,便于测试和维护。 Redis是一个高性能的键值存储系统,常被用作数据库、缓存和消息代理。它的特点是数据类型丰富,如...
使用SQL语句进行数据操作,可以实现高效的数据查询和更新。 5. 毕业设计相关论文:项目中包含的毕业设计论文,可能详细阐述了系统的需求分析、设计思路、实现过程及性能评估,是理解项目全貌的重要参考资料。通过...
6. **Spring框架**:Spring框架提供了依赖注入和AOP(面向切面编程)等功能,有助于构建松耦合的系统。Spring MVC是Spring的一部分,用于构建Web应用,简化了前端控制器的实现。 7. **用户认证与授权**:系统可能...
本书是一本方便的开发指南,可以帮助你在当前Java EE5和Java SE6平台上实现Web服务和面向服务的架构(SOA),介绍了如何创建、部署、以及调用Web服力,再将这些服务组合成松散耦合的SOA应用程序,并介绍了一个精心...
可能使用了索引来提升查询速度,触发器来实现自动化的业务规则,以及存储过程来封装复杂的操作逻辑。 导入系统时,开发者需要将提供的压缩包解压,然后在开发环境中导入相应的项目文件。对于Java项目,通常包括src...
【Java + SQL Server 图书管理系统】是一个综合性的项目,它结合了编程语言Java与数据库管理系统SQL Server,旨在实现一个高效、完整的图书管理解决方案。在这个系统中,Java作为后端开发语言,负责处理业务逻辑和与...
《基于JAVA与SQL的办公自动化系统设计与实现》是一篇深度探讨如何利用Java技术和SQL数据库构建办公自动化的专业文档。本文将围绕这个主题,详细阐述Java编程语言在系统开发中的应用,以及SQL数据库在数据存储和管理...
- **SOA**: 学习面向服务的架构理念,实现松耦合的服务组件。 #### 六、实践项目 - **小型项目**: 在学习过程中,尝试独立完成一些小型项目,如BBS论坛、留言系统等,巩固所学知识。 - **集成框架**: 将Spring、...
2. **Spring框架**:Spring是Java企业级应用开发的核心框架,提供了依赖注入(DI)和面向切面编程(AOP)等特性,便于实现模块化和松耦合的系统。 3. **Spring Boot**:基于Spring框架的微服务开发工具,简化了配置...
- 观察者模式:掌握观察者模式下被观察者和观察者之间的松耦合关系。 **2. 框架与工具** - Spring框架:熟悉Spring框架的核心特性如IOC容器管理和AOP面向切面编程。 - MyBatis持久层框架:了解MyBatis如何将SQL...
同时,可能使用了事务处理来确保数据的一致性,以及存储过程和触发器来封装复杂的业务逻辑。 系统的留言功能允许用户发表评论或反馈,这一功能通常需要处理用户注册、登录验证、内容审核等环节。这涉及到用户认证与...
这可能包括服务器端的实现、客户端库、配置文件以及演示如何使用Java_Conductor创建和执行工作流的教程。 为了开始使用Java_Conductor,开发者需要设置工作环境,解压`conductor_main.zip`,然后根据提供的文档或`...
13. 多态:通过多态实现代码的松耦合,提高代码的可扩展性。 14. 异常处理:了解异常的分类,包括checked exception和unchecked exception,以及如何捕获和处理异常。 二、Java 中级知识 1. JDK 5.0新特性:泛型、...
JAVA是一种广泛使用的面向对象的编程语言,以其平台独立性、安全性和可移植性著称,非常适合开发企业级应用。Oracle数据库则是全球领先的数据库管理系统,尤其在处理大量数据和并发事务时表现出色,与JAVA配合能构建...
- 使用Java的类加载机制保证初始化实例时只有一个线程。 - 代码示例: ```java public class Singleton { private Singleton() {} public static Singleton getInstance() { return SingletonHolder.INSTANCE;...
首先,Spring框架作为整个系统的依赖管理和事务控制核心,它通过IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)理念,实现了组件间的松耦合。IoC使得对象的创建和依赖...
在这个图书管理系统中,Spring被用来管理对象的生命周期和事务,以及实现各层之间的松耦合。 4. **SQL Server数据库**:SQL Server是Microsoft提供的关系型数据库管理系统,用于存储图书、读者等信息。数据库脚本...