Вопрос о дизайне: «универсальное приложение / процесс» для нескольких клиентов, который окажется полон «но» - PullRequest
1 голос
/ 31 октября 2010

Я собираюсь создать приложение для моего клиента. Несколько его клиентов (моего клиента) войдут в это приложение и сделают то же самое. Таким образом, с этой точки зрения у нас есть «универсальное приложение»: написанное один раз, удовлетворяющее потребности каждого клиента.

Но до того, как будет написана первая строка кода, у нас есть первое исключение: когда клиент A выполняет действие A, вы должны сделать то же самое, что и для клиентов B, C и D, но также и .....

И, конечно, мы можем дождаться новых модификаций первого продуманного «единого потока для всех».

Нет проблем, не могу предвидеть все, а исходный код гибкий.

Но я предвижу свой исходный код со всеми видами операторов if:

if (client == "a")
{
  SetEndDate(+1);
}

else if (client == "b")
{
  SetEndDate(+10);
}
else //no enddate modification needed for other clients

if (client == "d" || client == "E" )
{
  DoExtraCheck1();
}
else if (client = "b")
{
  if ( DoExtraCheck1())
   {
       DoExtraCheck2();
   }
}
else //no checking needed for other clients

и я боюсь этого!

Что может быть хорошим элегантным решением для оптимизации этого?


Следующее, что нужно решить, конечно, если пользовательский интерфейс также меняется между клиентами, но это вопрос V2:)

1 Ответ

2 голосов
/ 31 октября 2010

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

Дополнительная обработка (например, проверка инвариантов или тому подобное), которая не меняет интерфейс, может быть реализована с использованием шаблона decorator .

Разница между ними состоит в том, что шаблон декоратора предназначен для расширения функциональности, где с помощью шаблона стратегии вы можете фактически изменить реализацию.

Оба изВ этом решении предполагается, что вы можете определить один интерфейс для всех клиентов и, таким образом, использовать полиморфизм.

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