Существует ли имя для антипаттерна, в котором только определенные перестановки значений свойств равны действительному объекту? - PullRequest
2 голосов
/ 06 ноября 2019

Я не знаю, как описать это одними словами.

Это похоже на то, что у нас есть иерархия, подобная

  • IFoo
    • Foo1
    • Foo2
  • IBar
    • Bar1
    • Bar2
    • Bar3

и объект типа

public class Baz
{
   public IFoo Foo { get; set; }
   public IBar Bar { get; set; }
}

и бизнес-правило типа

=================================
Foo type | Bar type | Valid Baz?
=================================
| Foo 1  |  Bar 1   |  false   |
---------------------------------
| Foo 1  |  Bar 2   |  false   | 
---------------------------------
| Foo 1  |  Bar 3   |  true    |     
---------------------------------
| Foo 2  |  Bar 1   |  true    | 
---------------------------------
| Foo 2  |  Bar 2   |  true    | 
---------------------------------
| Foo 2  |  Bar 3   |  false   | 

(или это даже анти-pattern?)

1 Ответ

0 голосов
/ 08 ноября 2019

Это не похоже на анти-паттерн. Вы описали это на том уровне абстракции, что я могу предположить только то, что Baz имеет смысл только с некоторыми реализациями IFoo и IBar интерфейсов. В этом случае вам нужно реализовать дополнительный класс, который защищает систему от «плохих» Baz объектов. Вы можете использовать Builder или другой Шаблон создания для создания только допустимых Baz объектов.

С Builder это может выглядеть так:

Baz validBaz = new BazBuilder().withFoo(foo).withBar(bar).build();

Вы можете проверять экземпляры в методе или создавать набор методов с разрешенными типами:

public BazBuilder withBar(Bar1 bar) { ... }

и

public BazBuilder withBar(Bar2 bar) { ... }

Таким образом, пользователь может предоставить только Bar1 иBar2 экземпляров. Bar3 не допускается. Конечно, в этом сценарии класс Baz не может быть создан другим способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...