Запрашиваете разные значения в совокупном подмножестве в дизайне, управляемом доменом? - PullRequest
0 голосов
/ 22 мая 2018

Предположим, у меня есть совокупность, Фу.Этот агрегат представлен простой плоской таблицей в БД ...

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, но настолько далеко, что я не могу придумать интерфейс, который заставляет их всех говорить об одних и тех же свойствах.

Есть ли стандартный способ решения этой проблемы?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Вы можете использовать какую-то общую спецификацию , хотя в зависимости от вашего контекста отображение на SQL может быть более или менее сложным.Я считаю, что PHP - достаточно податливый язык, поэтому он не будет слишком сложным.

0 голосов
/ 23 мая 2018

Моя первая идея состояла в том, чтобы создать полностью отдельный агрегат для моделирования результатов вышеупомянутого запроса или подобных ему.

Вы не создаете агрегаты, если вам нужно простонайти другие агрегаты или их атрибуты.Для этого вы можете создавать доменные службы с интерфейсом, определенным на уровне домена, и реализацией на уровне инфраструктуры.Их методы могут возвращать объекты Value (например, DistinctFooProperties) или даже полностью загруженные агрегаты, в зависимости от их назначения.

В качестве побочного узла запрос SELECT DISTINCT * FROM Foo WHERE prop1 = 'a'; всегда будет возвращать различные строки с * или без DISTINCT если id уникально.

...