Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
3. Как вести знания о предметной области и как формулировать ТЗ, чтобы не было противоречий?
case doctype of
1: case clienttype of
1: do_something1;
2: do_something2;
3: do_something3;
else error (unknownClienttype, clienttype);
end;
2: case clienttype of
1: …
2: …
3: …
else error (unknownClienttype, clienttype);
end;
3: case clienttype of
1: …
2: …
3: …
else error (unknownClienttype, clienttype);
end;
else error (unknownDoctype, doctype);
end;const ORGANIZATION = 1;
…
case clienttype of
ORGANIZATION: do_something1;
{ToDo}do_something1; // clienttype=ORGANIZATION doctype=...еще одну фишку моего подхода — дополнительные действия с минисценариямиOk. Я предложил альтернативное решение. Как часто бывает везде свои ++ / --.
Моя идея — пиши код почти как написано в ТЗ, а умная оболочка разруливает нестыковки. Если использовать свой язык, как Вы предложили, то это будет ближе к моим идеям. Так на программисте меньше ответственности за ошибки.Да, только я использовал не свой язык, а Delphi. Вы отметили важный принципиальный момент: чем больше сходство кода с ТЗ — тем он убедительнее.
Имхо у Вас в самом изначальном примере дублирование знаний (действие можно привязать к типу лица, а можно — к типу договора), и отсюда все проблемы. Атрибуты по-возможности должны быть ортогональны.
Шаблон проектирования “минисценарий с проверкой противоречий”