当前位置: 首页 > 知识库问答 >
问题:

聚合 DTO 中的字段

沈琛
2023-03-14

我有一些架构/模式问题。假设我有一个有两个类的域模型。我使用代码优先和存储库模式。(为了使示例更简单,我只使用字段,而不使用属性)

public class Person {
    public int Id;
    public string Name;
    public string Surname;
    public virtual ICollection<Pet> Pets;
}
public class Pet {
    public string Name;
    public int BirthYear;
    public int OwnerId;
    public Person Owner;
}

我还有PersonDto和PetDto类,唯一不同的是,PersonDto中的Pets字段是一个简单的List。我使用Automapper将模型类转换为dto。接下来通过REST Api将Dto发送给客户端。现在,如果在某个视图中,我需要为每个人显示其姓名、姓氏和宠物计数(假设有太多宠物,从数据库中提取它们并简单地在视图中计数会非常低效),该怎么办。

现在,介绍PetCount的正确方法是什么?我是否应该将这个字段放在PersonDto和Person类中,并阻止它在数据库中创建列(对我来说似乎不太合适)。或者也许我应该只在PersonDto中创建PetCount字段——但是什么时候计算这个值,在存储库方法中或者也许在映射时(后者对我来说似乎也不太合适)。另一个问题是,我是否应该在PetDto中创建一个额外的字段,或者我是否应该用persontwithpetcoundto继承PersonDto,或者我是否应该在没有继承的情况下创建persontwithpetcoundto类,但使用PetCount字段和PersonDto中的所有字段

共有1个答案

高鸿振
2023-03-14

如果您的宠物计数属性为“人”,则可以通过“所有者”属性从“宠物”访问它。因此,问题归结为我们是否想要“人”的“宠物计数”属性。答案将是选择的结果。如果您问自己正确的问题,则可以明智地做出选择:

    < li >该值的使用频率如何? < li >更新此号码需要多长时间? < li >这个数字多久变化一次?

一般来说,如果您得出需要PetCount的结论,那么您需要确保:

  1. 插入宠物时,您也会更新其主人宠物计数
  2. 在更新宠物时,如果主人更改,您将确保其旧主人和新主人宠物计数更新
  3. 删除宠物后,其主人的宠物计数已更新
  4. 您可以使用事务来确保在上述操作中出现任何类型的故障时,状态将回滚到以前的状态

如果得出的结论是不需要< code>PetCount属性,那么每次需要时都需要计算它。

您也可以使用混合解决方案,包括缓存系统。最佳选择取决于你。

 类似资料:
  • 我在elasticsearch中有一个文档索引,每个文档有480个字段。我试图做的是搜索一个词(例如“Apple”),并获得所有其值与搜索词匹配的唯一字段名。所以如果我的文档是: 作为查询的结果,我希望得到如下所示的聚合: 由于每个文档都有480个字段,所以我更喜欢执行multi_match查询,而不是使用包含所有字段的筛选器: 这个查询在ElasticSearch中可能吗?

  • 问题内容: 我想在字段上使用stats或extended_stats聚合,但是找不到完成此操作的任何示例(即,似乎只能将聚合与实际文档字段一起使用)。 是否有可能计算出“元数据”在ElasticSearch查询响应每个命中字段请求集合(例如,,,,等等)? 我假设答案是“否”,因为未对类似字段进行索引… 问题答案: 注意:就最新版本的Elasticsearch而言,原始答案现在已过时。使用Groo

  • 问题内容: 有人可以告诉我如何编写将汇总(汇总和计数)有关我的文档内容的Python语句吗? 脚本 输出值 是什么原因造成的?“ aggregations”关键字是否错误?我还需要导入其他软件包吗?如果“出勤”索引中的文档有一个名为emailAddress的字段,我将如何计算哪些文档具有该字段的值? 问题答案: 首先。现在我注意到,我在这里写的内容实际上没有定义聚合。对我来说,有关如何使用它的文档

  • 在这里,我得到了错误: “无效的术语聚合顺序路径[price>price>price.max]。术语桶只能在子聚合器路径上排序,该路径由路径中的零个或多个单桶聚合和路径末尾的最终单桶或度量聚合组成。子路径[price]指向非单桶聚合” 如果我按持续时间聚合排序,查询可以正常工作,如 那么,有什么方法可以通过嵌套字段上的嵌套聚合来排序聚合吗?

  • 基本上,我试图通过名字和姓氏找到重复的联系人 我错过了什么吗?任何帮助都将不胜感激。 下面是示例文档之一 我试图对Elasticsearch进行如下查询:

  • 我想根据top hits聚合中第一个元素所拥有的属性,从terms聚合中订购Bucket。 我的尽力而为查询如下(有语法错误): 有人知道如何做到这一点吗? 例子: 按“a”分组,按“id”(desc)排序存储桶,并按“b”(desc)排序最热门的内容,将给出: