【发布时间】:2018-05-22 17:52:31
【问题描述】:
假设我有一个聚合,Foo。该聚合由数据库中的一个简单平面表表示...
Foo
------------------------------
| id | prop1 | prop2 | prop3 |
| 1 | a | b | c |
| 2 | a | bb | cb |
| 3 | ac | bc | cc |
------------------------------
现在我想在前端过滤 Foo。我有一个表单,需要将 foo 的不同属性显示为列表并从中进行选择。选择属性后,我需要查询 Foo 并找到具有所选属性的行子集。然后我需要为搜索查询选择的行子集中的每个属性选择不同的值。
例如,假设用户选择a 作为prop1 的值...
SELECT DISTINCT * FROM Foo WHERE prop1 = 'a';
在 DDD 中对此建模的适当方法是什么?我的第一个想法是创建一个完全独立的聚合,用于对上述查询或类似查询的结果进行建模......
class DistinctFooProperties
{
private $prop1;
private $prop2;
private $prop3;
public function __construct(
StringCollection $prop1,
StringCollection $prop2,
StringCollection $prop3
) {
$this->prop1 = $prop1;
$this->prop2 = $prop2;
$this->prop3 = $prop3;
}
public function getProp1Possiblities() {
return $this->prop1;
}
public function getProp2Possiblities() {
return $this->prop2;
}
public function getProp3Possiblities() {
return $this->prop3;
}
}
class DistinctFooPropertiesMySQLMapper
{
public function findBySearchObject(FooSearchjObject $fooSearch) {
// Search and return DistinctFooProperties
}
}
这会导致一些复杂性。 DistinctFooProperties 和 FooSearchObject 将非常接近地反映 Foo 聚合的属性,但远远不够,我想不出一个接口来强制它们都应该谈论相同的属性。
有解决这个问题的标准方法吗?
【问题讨论】:
标签: search model domain-driven-design aggregate distinct-values