Предположим, у меня есть совокупность, Фу.Этот агрегат представлен простой плоской таблицей в БД ...
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
, но настолько далеко, что я не могу придумать интерфейс, который заставляет их всех говорить об одних и тех же свойствах.
Есть ли стандартный способ решения этой проблемы?