小议领域模型(Domain Model)补充以及更新

Author: Anders小明

[b]为何要Domain Model[/b]
传统的开发方式:基于数据库的设计开发。数据库提供的设计模型是表和字段两种粒度,这两种粒度有时并不合适于系统设计:
1. 模型的结构化能力
1.1. 同一模块组件下的设计优势;一个model可以来自多张表的数据聚合而成,一张表可以聚合多个Model;一个逻辑是由几个固定字段或者非固定字段聚合;Model间的关联关系也是使用表无法展示的(外键的约束对于系统开发来说实在太有限了)。而这些不论表还是字段粒度都无法支持的!
1.2. 采用Model方式容易解决项目的集成问题(两个不同模块组件访问同一张表的情况)

2. 架构的结构化能力
事务脚本直接访问到表。换句话说,其架构只有Service + Database Table,这样的架构下Database Table可以说就是我们的模型。
这里看看在逻辑设计上Domain Model对于架构影响
A. Service, Model和Repository,model的重建和关联交由Repository完成,单个数据逻辑交给Model(支持泛化)
B. 测试的好处

3. 分析和设计的统一
沟通的问题,客户关注于其业务,分析的模型接近于客户需求,设计也采用model的方式,避免分析和设计的割裂。有助于IT间,IT和BA(客户)间的沟通

4. 其它好处
4.1.采用Domain Model可以屏蔽持久化信息。持久化设计的表设计是和DBA相关的,DBA对于表设计有权力的,采用Model可以有效隔离各自工作;
4.2.Model可以通过很多的手段透明的解决性能问题,而采用表做模型导致容易导致性能问题,当然不是没有办法解决,一种是通过DataSet的方式,但这样的切换成本较高。

[b]应用Domain的体系结构[/b]
如前所述,逻辑设计上Domain Model的实施使得架构分为Service,Model和Repository;其中Model的持久化,重建和关联交由Repository完成;而单数据逻辑(依赖自身数据信息以及关联数据)则归于Model(支持泛化);Service则关注于任务处理,相当于一个macro flow,包括了多个model处理,以及其它服务的调用。
以下是示意图:
Domain Service | Repository
Domain Object |

[b]Repository和Dao[/b]
Repository是一种特殊的Service,不做任务处理;而是提供Model的持久化,重建和查询工作。由于企业应用大都通过数据库实现持久化,因而Repository和传统的Dao间的集成设计就非常重要。

已知的有三种设计方式:
1. 两个接口两个实现类。Repository和Dao各自独立接口,而通过Repository实现类转发请求给Dao实现类。
这种方式虽然正统,但是维护成本太高;一次更新最多要改四处地方。
2. 两个接口一个实现类。Repository和Dao各自独立接口,一个实现类同时实现两个接口。
这种方式就大大简化维护成本;一次更新最多只改一个接口和一个实现类。
3. 两个接口一个实现类。与上面不同是,Dao接口继承Repository接口,一个实现类实现Dao接口。
这种方式的维护成本和上一种差不多,但是当接口方法在这个两个接口间流动时,可以通过开发工具完成。

另外Dao实现类本身也是工作中开发维护成本较高的一部分,可以通过代码生成降低开发成本,更多资料可以参考ibatis。
【ISAR成像定标方法(1)—转台目标的RD成像算法MATLAB仿真】 ISAR成像定标方法的研究具有重要意义,但是与之相关的学习资料以及仿真对于小白来说很难找或者很杂乱,本人作为小白之一在研究过程中苦不堪言,现在自己所要研究的定标内容已经完成,以后还学不学雷达也不一定,因为后面的路更难,现在打算把一些相关推导和仿真结果列出来,以供小白交流学习使用,希望能有点帮助。(PS:由于公式和符号的原因,采用图片形式说明) 阅读详情

相关推荐

树莓派计算模块摄像头连接与配置全攻略:从硬件跳线到软件驱动

在嵌入式视觉项目中,摄像头模组的连接与驱动是图像采集和视频分析的基础。其核心原理是通过CSI-2高速串行接口协议传输图像数据,并依赖I2C总线进行传感器寄存器配置。这一技术方案的价值在于为工业控制、机器人等嵌入式设备提供了稳定、高性价比的视觉感知能力。在实际应用中,开发者常面临摄像头无法识别、I2C通信失败等挑战,尤其是在使用树莓派计算模块时,其硬件接口需要通过I/O板引出,配置过程涉及设备树参数调整等关键步骤。本文聚焦于解决这些实际问题,详细拆解了从硬件连接到软件驱动的完整流程,特别是针对CM4、CM3+

weixin_29184075的博客 336

Nacos 数据模型(领域模型)

Namespace命名空间、 Group分组、集群这些都是为了进⾏归类管理,把服务和配置⽂件进⾏归类, 归类之后就可以实现⼀定的效果,⽐如隔离 ⽐如,对于服务来说,不同命名空间中的服务不能够互相访问调⽤ Namespace:命名空间,对不同的环境进⾏隔离,⽐如隔离开发环境、测试环境和⽣产环境 Group:分组,将若⼲个服务或者若⼲个配置集归为⼀组,通常习惯⼀个系统归为⼀个组 Service:某⼀个服务,⽐如简历微服务 DataId:配置集或者可以认为是⼀个配置⽂件 Namespace + Group

小城我家 1360

(UE4 4.27) HISM性能优化:从空间剔除到合批渲染的实战解析

本文深入解析了UE4 4.27中HISM(UHierarchicalInstancedStaticMesh)组件的性能优化原理与实战技巧。核心在于利用其N叉树空间结构实现高效的CPU视锥剔除,并结合GPU实例化进行合批渲染。文章详细探讨了从控制叶子节点粒度、平衡剔除精度与渲染效率,到结合LOD系统等关键参数的调优方法,为开放世界或大场景的植被性能瓶颈提供了系统解决方案。

weixin_29015051的博客 327

领域模型层次划分

业务代码由于需要经过好几层的处理,每层需要封装对应的模型, setter/getter代码量不少,而且基本上字段都是相同的,所以在上层模型中使用BeanMapper.map(obj, Class)方法转换,会消耗些许性能,但代码量减少。 模型对象的作用范围也讨论出来一个规范: 1:上层模型提供转换方法。 2:简单的转换使用BeanMapper转换,复杂的实现BeanConvertor接口,在

Mr_rain的专栏 4126

跟着团子学SAP CO:揭秘结果分析码在项目结算中的实战应用(一)KKA2/CJ88

本文深入解析了SAP CO模块中结果分析码在项目结算中的核心作用。以KKA2(方法10)和事务代码CJ88为例,详细阐述了如何在项目完工后一次性确认收入的场景下,通过结果分析功能实现收入与成本的精准匹配,将项目成本暂估为在制品,确保各期利润的准确反映。

gamma的博客 685

Python 爬虫实战:抓取新闻网站上的新闻标题和内容

随着信息化的进展,新闻网站已经成为人们获取新闻和时事资讯的主要途径。许多新闻网站提供了丰富的内容,涵盖了社会、政治、科技、娱乐等多个领域。通过抓取新闻网站的内容,我们可以分析新闻的趋势,获取某一领域的最新动态,甚至为数据分析和机器学习提供数据支持。本文将详细介绍如何使用 Python 编写爬虫,抓取新闻网站上的新闻标题和内容。requests:发送 HTTP 请求,获取页面内容。:解析 HTML 页面并提取数据。Selenium:抓取动态加载的网页内容。新闻API。

2201_76125261的博客 3407

(软件工程复习核心重点)第十章面向对象设计-第三节:系统分解和设计问题域子系统

文章目录一:系统分解(1)分解思想(2)子系统A:定义B:划分原则(3)分解面向对象设计模型A:表示B:子系统间交互方式①:客户-供应商关系(Client-supplier)②:平等伙伴关系C:组织系统的方案①:层次组织②:块状组织③:层次和块状的结合④:设计系统的拓扑结构二:设计问题域子系统(1)概念(2)对问题域模型进行的处理A:调整需求①:需要进行调整的情况②:方法B:重用已有的类C:把问题域类组合在一起D:增添一般化类以建立协议E:调整继承层次 一:系统分解 (1)分解思想 在设计比较复杂的应用系统

快乐江湖的博客 6547

YOLO11实战优化:长尾分布解决 | 引入Seesaw Loss配合YOLO11分类头,完美应对类别极其不平衡的现实业务场景

摘要: YOLO11在工业缺陷检测等长尾分布场景中面临尾部类别检测失效的问题,根源在于头部类别样本的负样本梯度压制了尾部类别的学习。传统方法如重采样、Focal Loss等效果有限。Seesaw Loss通过动态调整缓解因子和补偿因子,平衡类别间的梯度分布,结合YOLO11的解耦分类头、Anchor-Free设计和C2PSA/C3K2模块,显著提升尾部类别识别能力。文章详细解析了Seesaw Loss的数学原理,并提供了可直接集成到YOLO11的PyTorch实现代码,为长尾分布下的目标检测提供了实用解决方

2601_95807009的博客 253

[总结转贴]领域模型

内容转自ROBBIN的 http://forum.iteye.com 为了补大家的遗憾,在此总结下ROBBIN的领域模型的一些观点和大家的补充,在网站和演讲中,robbin将领域模型初步分为4大类: 1,失血模型 2,贫血模型 3,充血模型 4,胀血模型 那么让我们看看究竟有这些领域模型的具体内容,以及他们的优缺点: 一、失血模型 失血模型简单来说,就是domain object只有属性...

潜龙勿用 384

被搜狗输入法背刺了!偷偷装的 “AI 汪仔” 狂占 CPU!手把手教你如何彻底关闭删除搜狗AI功能AI汪仔

手把手教你如何彻底关闭删除搜狗输入法的AI汪仔🚀

XiaoqiangClub的博客 2万+

【GlobalMapper精品教程】001:GlobalMapper23+24+25 Pro-x64中文汉化版安装教程(附软件包下载)

Global Mapper 23+V24+V25中文汉化版安装教程及免费下载地址,是一款非常专业的地图绘制软件,功能非常的丰富,内置距离和面积计算,包括光栅混合、对比度调节、海拔高度查询、视线计算以及一些高级功能,通过地表数据观察分水岭、对3Dpoint数据转换为三角多边形和网格化等设置。本文讲解GlobalMapper23.1 Pro-x64安装过程。

智慧空间实验室 3万+

领域模型的价值与困境

很久以前大家就关于这个方面有很多讨论了。前两天我又挖了一个坑来集思广益,非常感谢没有把我的帖子投为新手帖的同志。我不是在装傻,只是想让大家跳出自己的立场,从根本的价值出发来考虑问题。之前有很多讨论,都是在讨论我又发明了一种新方法可以让领域模型充血啦,等等之类的。当提出一个解决方案的时候,一定要有明确的问题。那么领域模型的价值是什么?为什么没有被广泛应用,其困境在哪里? [size=x-la...

TaoWen's Blog 216

在 Fiori Elements Object Page 的表格中用 UI.Hidden 隐藏列:语义、边界与落地实践全解析

摘要: Fiori Elements的Object Page表格中,UI.Hidden注解支持静态和动态隐藏列。动态隐藏分为两种:基于父实体属性隐藏整列,或基于子实体属性按行隐藏单元格。关键约束包括:支持服务端操作的列禁止使用动态隐藏,否则会导致UX不一致。ABAP CDS不支持路径式UI.Hidden,需改用XML注解。该功能需与UI.Importance、个性化等机制明确区分,避免混淆。对于可能参与排序/过滤的列,建议仅使用静态隐藏。实际应用中需注意注解位置(整列或单元格级)和业务场景的匹配。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 205

领域模型(Domain Model )

http://www.blogjava.net/AndersLin/archive/2006/06/15/53086.html小议领域模型(Domain Model)> 和>,令Domain 这个词很火,也引起了广泛争论。我这里也乱谈一把。什么是领域模型(Domain Model )   我以为Domain分两个含义:Domain Object和Domain Service。那

1643

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

小议领域模型(Domain Model)

(同步自http://www.blogjava.net/AndersLin/archive/2006/06/15/53086.html)  > 和>,令Domain 这个词很火,也引起了广泛争论。我这里也乱谈一把。什么是领域模型(Domain Model)   我以为Domain分两个含义:Domain Object和Domain Service。那么什么样的系统是面向Domain的系

Anders小明的Blog 2293

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

领域驱动架构

什么是领域模型? 为解决场景下的问题而形成的一套模型,然后使用这套模型来解决业务问题。 根据重复劳动经验我们会形成一套模式。领域模型也一样会形成一套模式,他包括:实体、值对象、模块、领域服务 领域模型是怎么更新到数据库的呢? 使用资源库(repository)将领域模型更新到数据库。 在一个一对多的实体,例如:用户组(Group)和用户(User),用户组内有N个用户, 如果用户非常多,一次加载Group肯定会造成性能损失,这种问题怎么设计呢? 如果不使用领域模型依靠经验你会想到拆分,现在你使用了领域

ITLYL的博客 972

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

使用领域模型(domain object)来进行索引、搜索

对于讲domain object 映射到关系型数据库中,hibernate等持久性框架做了很多的工作,使得业务逻辑只需要和hibernate等持久层进行交互,而不需要直接和具体的数据库进行交互。 这给程序员带来了很大的方便,在业务逻辑处理上,只要针对domain object就可以。 使用Lucene进行索引、搜索开发的的时候,最经常碰到的概念就是Document 和Field,在程序中一个不得...

一点一点的努力~~~ 408

领域模型中的实体类分为四种类型:VO、DTO、DO、PO

领域模型中的实体类分为四种类型:VO、DTO、DO、PO

arthur.dy.lee的专栏 3万+

一文教你认清领域模型和数据模型

依稀记得我第一次设计一个系统的时候,画了一堆UML图,面对Class Diagram(其实就是领域模型),纠结了好久,不知道如何落地。因为,如果按照这个类图去落数据库的话,看起来很奇怪,有点繁琐。可是不按照这个类图落库的话,又不知道这个类图画了有什么用。 现在回想起来,我当时的纠结源自于我对领域模型和数据模型这两个重要概念的不清楚。最近,我发现对这两个概念的混淆不是个例,而是非常普遍的现象。其结果就是,小到会影响一些模块设计的不合理性,大到会影响像业务中台这样重大技术决策,因为如果底层的逻辑、概念、理论基础

我的新书《代码精进之路:从码农到工匠》 1万+

真正的领域模型是不能通过继承性描述的

双鱼座在我的一篇《从LinQ看我们的ORM设计》一文中的评论中,对“真正的领域模型是不能通过继承性描述的”提出了质疑。 在说明我的理由之前,我需求先向他道歉,因为我武断的说他“抱着课本是天书”。 OK,回到话题,假设我们正在开发一个进销存系统,我们总结出所有的文档都需要修改记录(RichDocument),而所有的树都需要ParentId(TreeDocument),而大多数的文档需要Co...

weixin_33795833的博客 247

APDPlat中领域模型的自描述机制与事件通知机制

APDPlat中的Model抽象类是所有领域对象的基类,对领域模型的CRUD操作都会触发事件,监听这些事件是实现实时搜索、业务审计、权限验证、模型预处理等功能的基础。   我们先看看Model的设计要点:   1、模型的自描述机制。 2、统一的事件通知接口。   Model类定义了一个抽象方法getMetaData(),子类需要实现该方法来描述领域模型的具体业务含义,如下所示: ...

220

【软件工程】面向对象的设计

面向对象分析是获取和认识用户需求,对问题领域进行分析、确认并建立问题域概念模型的一个过程。而面向对象设计(OOD)则是从计算机技术的角度,将分析阶段得到的概念模型转换成软件系统的技术实现方案,并在功能、性能及成本方面满足用户和质量要求的过程。是一个将问题空间中的面向对象模型转换为求解空间中的技术实现模型的过程。     分析是提取和整理用户需求,并建立问题域精确模型的过程。设计则是把分析阶段得到

随心更博 3856
上一篇: 软件架构乱弹——问题域及其解决方法(2007.12.14更新)
下一篇: 基于业务模块组件的系统架构
林仪明
博客等级 码龄25年 313粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值