Такие люди, как Александр Степанов и Шон Пэрент, голосуют за формальный и абстрактный подход к проектированию программного обеспечения.
Идея состоит в том, чтобы разбить сложные системы на ориентированный ациклический граф и скрыть циклическое поведение в узлах, представляющих это поведение.
Пэрент проводил презентации. на boost-con и в Google (листы с boost-con , стр. 24 знакомит с подходом, есть также видео выступления Google Talk) .
Хотя мне нравится этот подход и я считаю его необходимым развитием, у меня есть проблема с представлением того, как обращаться с подсистемами с аморфным поведением.
Представьте себе, например, общий шаблон для конечных автоматов: использование интерфейса, который поддерживают все состояния, и наличие разных поведение в конкретных реализациях состояний.
Как бы это решить?
Обратите внимание, что я просто ищу абстрактный подход.
Я могу подумать о том, чтобы скрыть это поведение за узлом и определить разные вложенные DAG для состояний, но это значительно усложняет дизайн, если вы хотите влиять на поведение основной DAG из вложенной DAG.