首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则

例如:如果向 Issue 添加 Comment,需要这样做: 从数据库中获取 Issue 包含所有子集合:Comments (该问题的评论列表) 和 IssueLabels (该问题的标签集合)。...用于 EF Core 和 关系型数据库 在 MongoDB 中,自然不适合有这样的导航属性/集合。...一个设计良好的构造函数,担负以下职责: 获取所需的实体属性参数,来创建一个有效的实体。应该强制只传递必要的参数,并可以将非必要的属性作为可选参数。 检查参数的有效性。 初始化子集合。...实体中业务逻辑需要用到外部服务 当业务逻辑只使用该实体的属性时,在实体方法中实现业务规则是很简单的。如果业务逻辑需要查询数据库或使用任何应该从依赖注入系统中获取的外部服务时,该怎么办?...AssignToAsync 获取一个 AppUser 实体,实际上只用到 user.Id,传递实体是为了确保参数值是一个存在的用户,而不是一个随机值。

3.1K30

领域驱动设计,让程序员心中有码(五)

而从领域驱动的角度来说,可以把关系,类比为建筑工程图纸中使用的各种辅助线,也可以把领域驱动中所涉及的各个对象,类比成砖块,这些砖块,大概有两种:一种是实体(Entity),一种是值对象(Value Object...值对象可以作为实体的属性,例如,一个人,是一个完整的实体,而他的名字,则是值对象。当然,也并非意味着值对象是一个单纯的属性,实际上值对象是指某一个特定概念下,具有完整意义的、通过属性进行理解的对象。...例如,地址由省、市、区、街道、邮编等综合属性组成,这些组成对象,实际上也是实体,他们联系起来,就组成了值对象。 5 服务   在软件设计中,并非所有的对象都需要通过标识或属性进行区分。...领域驱动设计,让程序员心中有码 领域驱动设计,让程序员心中有码(二) 领域驱动设计,让程序员心中有码(三) 领域驱动设计,让程序员心中有码(四) 基于SpringBoot的Web API快速开发基础框架...基于SpringBoot-Dubbo的微服务快速开发框架 如何从传统软件开发顺利过渡到互联网技术开发 那些会阻碍程序员成长的细节[7] 30多岁挨踢人要转行的焦虑,是真的吗 学习新技术时你应当掌握的『

47220
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    领域驱动设计(DDD) - 乐享诚美

    领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见这篇文章。...另外,不应该给实体定义太多的属性或行为,而应该寻找关联,发现其他一些实体或值对象,将属性或行为转移到其他关联的实体或值对象上。...另外值对象在判断是否是同一个对象时是通过它们的所有属性是否相同,如果相同则认为是同一个值对象;而我们在区分是否是同一个实体时,只看实体的唯一标识是否相同,而不管实体的属性是否相同;值对象另外一个明显的特征是不可变...从更广义的角度来理解,我们经常会像集合一样从某个类似集合的地方根据某个条件获取一个或一些对象,往集合中添加对象或移除对象。也就是说,我们需要提供一种机制,可以提供类似集合的接口来帮助我们管理对象。...寻找模型中觉得有些疑问或者是蹩脚的地方,比如思考一些对象应该通过关联导航得到还是应该从仓储获取?聚合设计的是否正确?

    41230

    DDD领域驱动设计实践

    有两个实体,如果唯一标识不一样,那么即便实体的其他所有属性都一样,我们也认为他们两个不同的实体;因为实体有生命周期,实体从被创建后可能会被持久化到数据库,然后某个时候又会被取出来。...另外,不应该给实体定义太多的属性或行为,而应该寻找关联,发现其他一些实体或值对象,将属性或行为转移到其他关联的实体或值对象上。...另外值对象在判断是否是同一个对象时是通过它们的所有属性是否相同,如果相同则认为是同一个值对象;而我们在区分是否是同一个实体时,只看实体的唯一标识是否相同,而不管实体的属性是否相同;值对象另外一个明显的特征是不可变...从更广义的角度来理解,我们经常会像集合一样从某个类似集合的地方根据某个条件获取一个或一些对象,往集合中添加对象或移除对象。也就是说,我们需要提供一种机制,可以提供类似集合的接口来帮助我们管理对象。...寻找模型中觉得有些疑问或者是蹩脚的地方,比如思考一些对象应该通过关联导航得到还是应该从仓储获取?聚合设计的是否正确?

    70550

    一文理解 DDD 领域驱动设计

    有两个实体,如果唯一标识不一样,那么即便实体的其他所有属性都一样,我们也认为他们两个不同的实体;因为实体有生命周期,实体从被创建后可能会被持久化到数据库,然后某个时候又会被取出来。...另外,不应该给实体定义太多的属性或行为,而应该寻找关联,发现其他一些实体或值对象,将属性或行为转移到其他关联的实体或值对象上。...另外值对象在判断是否是同一个对象时是通过它们的所有属性是否相同,如果相同则认为是同一个值对象;而我们在区分是否是同一个实体时,只看实体的唯一标识是否相同,而不管实体的属性是否相同;值对象另外一个明显的特征是不可变...从更广义的角度来理解,我们经常会像集合一样从某个类似集合的地方根据某个条件获取一个或一些对象,往集合中添加对象或移除对象。也就是说,我们需要提供一种机制,可以提供类似集合的接口来帮助我们管理对象。...寻找模型中觉得有些疑问或者是蹩脚的地方,比如思考一些对象应该通过关联导航得到还是应该从仓储获取?聚合设计的是否正确?

    68020

    EF基础知识小记一

    (Code First) 之后的版本:提供了重大的性能改进,并支持了枚举类型,表值函数,空间数据类型,存储过程的一系列改进,以及对asp.net MVC框架的深度支持 版本6.0:提供了查询和更新的异步支持...和Phone Numbers的集合。...开发人员不知道也不关心数据库管理员是如何把这个对象分别存储在三张不同的数据库表中的。一旦配置,单一对象和三张数据库之间的映射将被实体框架处理。   ...(Code First).概念层的语法是通过概念架构定义语言(CSDL)来定义的 映射层:映射层定义概念层和存储层之间的映射,该层定义类的属性如何映射到数据表中的列.映射规格语言(MSL)来定义 存储层...6、实体属性 一个实体类型拥有一个或者多个属性,像一个类,属性分为标量属性、导航属性 标量属性:像integer,string等简单类型就是标量属性,也可以是复杂类型 导航属性:是指跟其它实体有关联的属性

    1.7K90

    SSH框架之旅-struts2(3)

    中的参数封装成对象存储在值栈中,并通过 OGNL 表达式来读取值栈中的对象的属性值。...实现步骤: 创建实体类对象 定义实体类对象的变量 生成变量的get方法 将上面 Action 类中的代码改为下面的,实体类的对象自己创建,重新刷新页面,查看debug标签中的结构,发现值栈的属性中多了一个定义的变量的名称...list 集合 实现步骤: 创建实体类对象 定义实体类对象的 list 集合变量 生成变量的get方法 将上面 Action 类中的代码改为下面的,实体类的对象自己创建,重新刷新页面,查看debug...标签中的结构,发现值栈的属性中多了一个定义的list集合的名称,并且该属性的值就是 Action 中添加到list集合的对象。...集合的值 获取 list 集合中的值,有三种方式。

    47360

    EF Core关系配置

    导航属性 由一个属性可以访问到另外一种类型的实体叫做导航属性 单向导航:不设置反向的属性,然后配置的时候WithMany()不设置参数即可。...执行SaveChanges()等方法时,EF Core将会把存储的快照中的值与实体的当前值进行比较。...未改变(Unchanged):DbContext正在跟踪此实体,该实体存在于数据库中,其属性值和从数据库中读取到的值一致,未发生改变。...已修改(Modified):DbContext正在跟踪此实体,并存在于数据库中,并且其部分或全部属性值已修改。...; Tips:一般只有在编写不特定于某个实体类的通用框架的时候,由于无法在编译器确定要操作的类名、属性等,所以才需要编写动态构建表达式树的代码。

    13110

    C# 数据操作系列 - 14 深入探索SqlSugar

    0.前言 在上一篇中,我们知道了如何使用SqlSugar,但是也只是简单的了解了如何使用,仿佛是套着镣铐行走,这明显不符合一个合格的程序员应有的素养。...花式映射 在实际开发中,程序中的实体类和数据库的表名并不能完全一致,造成的原因有很多,例如说团队对数据库的命名和对程序的命名有着不同的要求,数据库是先建立的而程序是后开发的,又或者是程序只使用了数据库中一部分表等等...外键关联 SqlSugar中并没有设置导航属性的正式加载,而是添加了一个Mapper方法:在查询的时候,调用Mapper映射外键关系,以达到导航属性一起加载的功能。...其中,一对一要求必须从主对象开始查询。所谓主对象就是必须持有一个外键指向另一个表。 一对多要求从拥有集合属性的那段(也就是其中的“一”)开始,关联指示为 集合.First().外键 。...还有一点就是SqlSugar的导航属性必须手动加载,不会自动加载进来,所以完全不会出现深度递归的问题。 3.

    2.1K30

    Entity Framework Core 2.0 新特性

    CLR类型,但是由于CLR类型不能被识别,所以必须从另一个实体类型导航到它。...使用所属类型与EF6中使用复杂类型类似,(PS:这里解释一下EF6中的复杂类型,复杂类型是允许在实体中组织标量属性的实体类型的非标量属性。像实体一样,复杂类型由标量属性或其他复杂类型属性组成。)...这些过滤器自动应用于涉及这些实体类型的任何LINQ查询,包括间接引用的实体类型,例如通过使用Include或直接导航属性引用。...,并将更多的逻辑生成SQL让它在数据库中执行(而不是内存中),并且从数据库中检索更少的不必要的数据。...在EF核2.0,我们增加了对插值字符串中的特殊支持,我们接受原始的SQL字符串两个主要的API:FromSql和ExecuteSqlCommand。

    3.9K90

    代数运算对应于认知运算,使用随机向量表示计算函数 VSA到VFA

    在本⽂中,我们讨论如何在向量空间中表⽰连续数据和函数,以及如何通过 VSA 代数来操作它们的问题。我们开发了⼀种新的向 量空间函数计算框架,与 VSA 类⽐,我们将其称为向量函数架构 (VFA)。...VSA是具有向量表示的符号推理模型,具有两个区别属性。第一个是符号由随机的n维向量表示。在经典的VSA模型中,符号由其分量从指定分布中独立同分布抽取的向量编码。...我们从以下定义开始: 定义2:KLPE与VSA绑定操作 ∘∘ 兼容,如果编码变量的两个值的加法可以通过绑定值的个别表示来表示: 函数的逐点加法(14)来源于内积核的线性。...接下来,我们基于先前提出的绑定操作(哈达玛积、循环卷积或局部块循环卷积)定义并分析 FPE 的属性。对于相应的 VFA,这些定义产生了用于计算定理 1 中的函数操作以及图 1 所示集合的具体公式。...例如,六角形sinc核(见图6),可以从三个2-D笛卡尔sinc核组成: 5.4.2 具有周期结构的非笛卡尔核 具有周期结构的核在工程和神经生物学导航系统中扮演着重要角色。

    10910

    大厂技术实现 | 详解知识图谱的构建全流程 @自然语言处理系列

    如前所述,构建知识图谱是一个迭代更新的过程,根据知识获取的逻辑,每一轮迭代包含三个阶段:信息抽取:从各种类型的数据源中提取出实体、属性以及实体间的相互关系,在此基础上形成本体化的知识表达。...3)属性抽取属性抽取的目标是从不同信息源中采集特定实体的属性信息,如针对某个公众人物,可以从网络公开信息中得到其昵称、生日、国籍、教育背景等信息。...◉ 采用数据挖掘的方法直接从文本中挖掘实体属性和属性值之间的关系模式,据此实现对属性名和属性值在文本中的定位。...4.2 知识融合通过信息抽取,我们就从原始的非结构化和半结构化数据中获取到了实体、关系以及实体的属性信息。...图片1)本体抽取本体(ontology)是指工人的概念集合、概念框架,如“人”、“事”、“物”等。本体可以采用人工编辑的方式手动构建(借助本体编辑软件),也可以以数据驱动的自动化方式构建本体。

    25.3K1219

    干货好文!自底向上——知识图谱构建技术初探

    如何存储上面这三类数据类型呢?一般有两种选择,一个是通过RDF(资源描述框架)这样的规范存储格式来进行存储,比较常用的有Jena等。 ?...如前所述,构建知识图谱是一个迭代更新的过程,根据知识获取的逻辑,每一轮迭代包含三个阶段: 信息抽取:从各种类型的数据源中提取出实体、属性以及实体间的相互关系,在此基础上形成本体化的知识表达; 知识融合:...采用数据挖掘的方法直接从文本中挖掘实体属性和属性值之间的关系模式,据此实现对属性名和属性值在文本中的定位。...4.2 知识融合 通过信息抽取,我们就从原始的非结构化和半结构化数据中获取到了实体、关系以及实体的属性信息。...★ 4.3.1 本体构建 本体(ontology)是指工人的概念集合、概念框架,如“人”、“事”、“物”等。

    2K31

    学界 | 纽约大学:参考儿童认知发展,通过简单神经网络学习归纳偏置

    形状、颜色、纹理属性向量被集合并馈送至一个 30 单元的隐藏层,后面是一个分类层。图中展示了 3 个实例输入物体(每次只向网络输入一个物体)。 ? 图 4:感知相似性,作为物理刺激距离的函数。...在每种情况下,通过最后一个隐藏层的特征计算原始刺激与其变化的对应物之间的网络相似性分数。 ? 图 5:实验 2 的训练刺激。(a) 中是不同形状和颜色的新物体(前三个输入通道)。...(a) 中是我们的 CNN(由显式形状偏置 (N=50 & K=18) 进行训练)卷积核。每行对应于 5 个卷积核之一。前 3 个通道分别展示了 R、G、B 列。...作者从有关人类儿童的研究中获得启发,其结果值得注意。然而,我们的工作目标在某些重要方面很不同。本实验中的智能体一起接收视觉和语言的联合输入,并且必须输出导航决策。...在未来的工作中,我们希望通过本文启发的初始化框架,在 ImageNet 一般规模的 DNN 中验证这一假设。 ? 本文为机器之心编译,转载请联系本公众号获得授权。

    57180

    高级框架-springDate-JPA 第二天【悟空教程】

    而在这种实现了 ORM 思想的框架中(如 JPA),可以让我们通过操作实体类就实现对数据库表的操作。所以今天我们的学习重点是:掌握配置实体之间的关联关系。 第一步:首先确定两张表之间的关系。...4.4.1 @OneToMany: 作用: 建立一对多的关系映射 属性: targetEntityClass:指定多的多方的类的字节码 mappedBy:指定从表实体类中引用主表对象的名称...此种查询方式,是根据已知实体,调用该实体中的 getXXX 方法获取到关联对象的信息。...JPQL 语句是 JPA 中定义的一种查询语言。此种语言的用意是让开发者忽略数据库表和表中的字段,而关注实体类及实体类中的属性。更加契合操作实体类就相当于操作数据库表的 ORM 思想。...聚合函数:在 JPQL 中也可以是使用。 它的写法是: 把查询的表名换成实体类名称,把表中的字段名换成实体类的属性名称。

    2.5K10

    java学习与应用(5.1)--Mybatis

    insert保存标签中定义selectKey标签和属性如执行语句的时机,返回值类型等,之间写入如select last_insert_id()方法,用于获取最后保存的id。...查询过程中的实体类属性和SQL查询变量名不同时,需要sql中使用as起别名,便于能够封装数据。...mybatis的连接池与事务控制,在主配置xml中的,指定的type类型为POOLED方式,使用传统DataSource规范中的连接池,从池中获取连接,空闲池中没有连接则选择最老的连接,重新创建新连接。...一般使用如在IAccountDao.xml配置文件中,写入resultMap标签下的id,type,写入原始对应关系后,从表使用association,设置其下的id和result的对应关系,然后设置到...配置对象中的集合映射,使用collection标签,其中写入id和result标签,进行多表查询的数据封装。

    79510

    《Entity Framework 6 Recipes》翻译系列 (1) —–第一章 开始使用实体框架之历史和框架简述「建议收藏」

    存储架构定义语言(SSDL)定义了存储模型的语法。   最后,映射层定义概念层和存储层的之间的映射。除此之外,该层定义实体类的属性如何映射到数据库表中的列。...图1-3 Employee和Task一对多关系的模型   一个实体类型一般拥有一个或多个属性。像一个类,一个属性是一个特定数据类型的指定值。...导航属性(Navigation properties)是指跟其它实体有关联的属性(数据库中的外键关系)。在实体类型中不是导航属性的属性通常叫做标量属性(scalar proerties).   ...上下文对象是实体框架服务的入口,它暴露实体对象,管理数据库连接,生成参数化的SQL语句,从数据库中封送(marshals)数据或封送数据到数据库,缓存对象,维护对象变化跟踪,把无类型的结果集转换到一个强类型的集合对象...更有趣的是,开发团队可以利用实体框架的强大的实用工具(可以从微软官方网站下载)从一个存在的数据库中逆向生成代码优先模型。

    1.4K20

    数据治理专业认证CDMP学习笔记(思维导图与知识点)- 第五章数据建模与设计篇

    实体中属性的物理展现为表、视图、文档、图形或文件中的列、字段、标记或节点等。 标识符 Identifiers,键,是唯一标识实体实例的一个或多个属性的集合。...组合键:一组由两个或多个属性组成的集合,一起达到唯一标识一个实体实例。复合键:包含一 个组织键和至少一个其他单一键、组合键或非键属性。 键的功能类型:超键:唯一标识实体实例的任何属性集。...候选键:标识实体实例的最小属性集合, 可能包含一个或多个属性。最小意味着候选键的任意子集都无法唯一标识实体实例。一个实体可 以有多个候选键。候选键可以是业务键(自然键)。...【域】 域 Domain:某一属性可被赋予的全部可能取值。提供一种将属性特征标准化的方法。有效值与 无效值。可以附加的规则对域进行限制,限制规则称为约束。...此模型中实体之间的连线表示用于说明业务问题的导航路径。 事实表:行对应于特定的数值型度量值,如金额。事实表占据了数据中大部分空间,且有大量的 行。 维度表:表示业务的重要对象,主要留住文字描述。

    1.7K20

    C# API中的模型和它们的接口设计

    基于这个定义,实体可以用属性来修饰,以便更精确地描述数据库列和属性之间的映射关系。它还支持从数据库延迟加载子集合。...ServiceContainer:获取验证服务容器。 关于如何使用这些属性并没有相关的指南。例如,什么时候应该设置MemberName属性? DisplayName属性实际上做了什么?...从理论上讲,CollectionChanged相关事件可以使用单个事件来告诉我们何时已将整组对象添加到集合中或从集合中删除。但实际上,因为WPF中存在的设计缺陷导致无法实现这样的功能。...为此,集合需要在将对象添加到集合或从集合中移除时附加和移除事件处理程序。 变更跟踪和撤消 虽然使用不是很频繁,.NET还是提供了专门用于跟踪对象变更的接口,这些接口甚至还提供了撤消功能。...或者两个对象的每个属性都相同?不管你如何回答这个问题,你的团队中的其他人必定会有不同的答案。

    1.7K20
    领券