情况是这样的:
1 一个架构为struts2,spring,hibernate的web应用。
2 采用充血的领域模型,即领域bean里含有一些简单的业务逻辑,例如CRUD之类的操作。这些操作需要hibernate的session factory以便访问数据库。
3 Spring中定义了session factory,因此可以将它注入任何需要的地方。同样也可以注入领域bean和service类中。
但问题是领域bean因为比较小(其实也不小,如果充血的话),一般用new的方式生成,因此无法从Spring中获得session factory。像service类比较大,一般是从Spring中获得实例,因此注入了session factory,没有问题。
如果是失血模型的话,领域类里只有getter 和setter方法,因此不存在注入session factory的问题。
当然我也可以用BeanFactory.getBean("beanName")的方式获得session factory,但这样就不够好看了,出现了applicationContext和BeanFactory并存的局面,感觉不优雅( 我现在的Spring是通过web.xml在Web服务器启动时载入的,因此是application context)。
难道大家不用充血模型?
在Spring reference的3.9. Glue code and the evil singleton中,似乎有些提示,但不怎么明白。
分享到:
相关推荐
综上所述,"充血模型设想实现"这一主题涵盖了软件设计的核心思想,即如何通过领域模型来表达和实现业务逻辑。在2010年的讨论中,可能深入探讨了如何利用充血模型提升代码质量、可维护性以及业务逻辑的一致性。结合...
1. 学习曲线:理解和实现充血模型可能需要对领域建模有较深的理解。 2. 测试复杂性:由于领域对象包含了复杂的业务逻辑,测试可能更为复杂。 【胀血模型】 胀血模型是对充血模型的一种扩展,领域对象不仅包含业务...
该项目为Freedom框架,是一款基于六边形架构的充血领域模型设计源码,采用Go语言开发,总计包含200个文件。文件类型涵盖了178个Go源文件、6个Markdown文档、4个TOML配置、4个YAML配置、2个SQL脚本、1个Git忽略规则、...
本资料主要关注的是使用Go语言实现的一个六边形架构框架,它特别适用于支持充血的领域模型范式。让我们深入探讨这些概念以及它们如何相互关联。 首先,我们来了解什么是六边形架构,也被称为端口和适配器架构。这种...
Spring框架提供了灵活的依赖注入和面向切面编程(AOP)机制,允许开发者更容易地实现充血模型。这种方式更接近人的思维习惯,有助于代码的清晰和业务逻辑的集中管理。然而,充血模型也有它的挑战,比如可能会造成...
在软件开发领域,模型设计是核心部分之一,它有助于我们理解和表述复杂的业务逻辑。领域模型(Domain Model)和贫血模型(Anemic Domain Model)是两种常见的模型设计模式,它们各有特点,适用于不同的场景。本资料...
领域模型分为贫血模型和充血模型两种。 - 贫血模型指的是领域对象只包含了数据访问方法(get和set方法)和一些简单的CRUD(创建、读取、更新、删除)方法,而所有的业务逻辑都放在了BusinessLogic层。 - 充血模型则...
在Asp.net开发中,"充血模型"是一种提倡领域对象拥有丰富行为和业务逻辑的设计模式,相对应于传统的"贫血模型"。"贫血模型"通常将数据模型、业务逻辑和数据访问分离,使得领域对象仅包含属性,而业务逻辑和数据操作...
领域模型是业务逻辑的抽象表示,它包含了业务领域的实体(Entities)、值对象(Value Objects)、领域服务(Domain Services)和仓储(Repositories)等元素。在充血模式下,这些组件拥有丰富的业务逻辑,而不仅仅是...
领域模型可以分为失血模型、贫血模型和充血模型三种类型。 失血模型 失血模型是基于数据库的领域设计方式,它指的是使用 POJO 数据对象来存储业务数据。在失血模型中,业务逻辑是分散的,分布在多个地方。 贫血...
2. **限界上下文(Bounded Context)**:限界上下文是DDD中的一个重要概念,它定义了领域模型的边界,明确了模型在特定业务领域的适用范围和语义。 3. **领域统一语言(Ubiquitous Language)**:领域统一语言是...
第2章 领域分析模型 核心域,支撑子域,通用子域 微服务和DDD是什么关系? 传统模式下如何合理的划分各种域 基于DDD的方式进行域划分 什么是通用语言 什么是限界上下文? 限界上下文和子域的关系 基于电商系统按流程...
领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法论,由Eric Evans在其同名著作中提出,旨在帮助开发者更好地理解和处理复杂的业务逻辑,通过深入挖掘领域知识来构建高质量的软件系统。DDD的核心是...
背景:在我们所在的重症监护病房中,充血性心力衰竭(CHF)的数据很少。 这项研究旨在为雅温得大学教学医院的重症监护病房提供更好的CHF模式和预后知识。 方法:我们进行了为期21个月的描述性和回顾性研究。 我们从...
4. **限界上下文**:为了管理复杂度,DDD引入了限界上下文(Bounded Context)的概念,每个限界上下文定义了一组相关的领域模型和业务规则,它们之间通过接口和服务进行通信。 5. **事件溯源(Event Sourcing)**:这是...
2. 领域驱动设计:在需要紧密贴合业务领域模型的项目中,充血模型能够更好地体现业务实体及其行为。 3. 提升代码质量:追求更高质量的代码,减少不必要的转换和重复代码,提高整体系统的稳定性。 总的来说,选择...
那么领域模型的作用微乎其微,甚至可以忽略,数据转换的成本比领域模型带来的好处还多,这种情况其实就是在原有的分层架构中多加了一层,增加了项目的复杂性和工作量。 “领域驱动开发DDD”只有被正确地运用,才能...
然而,遵循DDD的原则,我们应尽可能使领域模型丰满,保持“充血模型”,即将所有领域逻辑保留在领域层。因此,处理实体间关系的逻辑更适合放在领域服务中。 以权限管理为例,假设我们需要实现一个功能,将指定用户...
自由DDD框架自由是一个基于六边形架构的框架,可以支撑充血的领域模型范式。总览集成虹膜HTTP / H2C服务器和客户端集成普罗米修斯AOP工作者和无侵入上下文可扩展组件依赖注入&依赖倒置&开闭原则DDD和六边形架构...