Architecture 在进行域驱动开发时对数据进行排序

Architecture 在进行域驱动开发时对数据进行排序,architecture,domain-driven-design,Architecture,Domain Driven Design,在开发数据模型时,我没有注意底层数据库级别。我在域类的属性中封装了一些逻辑(例如:计算订单利润的方法)。在我需要对数据进行排序之前,一切都很好。排序纯粹是一种数据库功能(主要是因为性能原因,我无法从表中检索所有行并在域级别对它们进行排序)。 事实证明,我必须重复以前在数据库级别封装在域级别的逻辑(不仅要重复,还要将其转换为数据库语言)。 这似乎很糟糕,我不想做这件事。 有没有办法绕过这个问题 编辑 我正在尝试做的示例: 我的域名: class Order { var lines; pr

在开发数据模型时,我没有注意底层数据库级别。我在域类的属性中封装了一些逻辑(例如:计算订单利润的方法)。在我需要对数据进行排序之前,一切都很好。排序纯粹是一种数据库功能(主要是因为性能原因,我无法从表中检索所有行并在域级别对它们进行排序)。
事实证明,我必须重复以前在数据库级别封装在域级别的逻辑(不仅要重复,还要将其转换为数据库语言)。
这似乎很糟糕,我不想做这件事。
有没有办法绕过这个问题

编辑
我正在尝试做的示例:
我的域名:

class Order {
  var lines;

  profit() {
    return lines.sum(line => line.sellPrice * line.quantity) - 
      lines.takeAllOutcomesAndSum(outcome => outcome.buyPrice * outcome.quantity)
  } 
}

class Line {
  var outcomes;
  var sellPrice
}

class Outcome {
  var buyPrice;
  var quantity;
}
问题是,当我想按利润对订单进行排序时,结果是sql代码中有许多联接和计算(它们重复Order.profit()方法中已经编写的逻辑)。
实际上,我想到了在数据库中存储计算值,而不是计算它们,而不是这样:

class Order {
  lines;

  profit() {
    return lines.sum(line => line.sellPrice * line.quantity) - 
      lines.takeAllOutcomesAndSum(outcome => outcome.buyPrice * outcome.quantity)
  } 
}

class Line { outcomes; sellPrice }    
class Outcome { buyPrice; quantity; }
写下:

class Order {
  lines; profit;
  void Order(lines){
    profit = lines.sum(line => line.sellPrice * line.quantity) - 
      lines.takeAllOutcomesAndSum(outcome => outcome.buyPrice * outcome.quantity)
  }
}

class Line { outcomes; sellPrice; }    
class Outcome { buyPrice; quantity; }


只要确保它是有效的(每次order.lines发生变化时更新它),它就应该可以了。

一般的解决方案是在域级别声明您需要的内容,并从中生成相关的数据库代码

你为什么要重复逻辑?您需要对不同的值进行排序吗?你在做什么的一个模拟示例?我已经在我的帖子中添加了一个示例,为什么你不实现一个具有该实现的层呢?我的意思是,您可以使用依赖注入将逻辑与域分离。这正是我已经实现的。现在编写查询既简单又直接。有一点需要注意:我已经使这些对象不可变,以避免可能的数据冲突