В чем преимущество возможности отображения системных зависимостей в виде DAG (ориентированный ациклический граф)? - PullRequest
2 голосов
/ 17 декабря 2010

Если бы я организовал набор зависимостей объектов в группу обеспечения доступности баз данных, в каких ситуациях это было бы более желательно, чем в другой структуре данных, такой как BDD (диаграмма двоичных решений)?

Ответы [ 2 ]

3 голосов
/ 17 декабря 2010

DAG имеет несколько свойств, которые идеально подходят для анализа зависимостей.

Во-первых, вы можете легко определить компоненты «базового уровня» вашей системы. Это узлы в DAG, в которые не входят ребра. Знание относительных уровней вашей системы означает, что вы знаете влияние рефакторинга. (Все по цепочке.)

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

1 голос
/ 18 декабря 2010

Я не очень хорошо разбираюсь в бинарных диаграммах решений, но в Википедии, похоже, говорится, что они являются фундаментально ориентированными, ациклическими, графами.Я немного знаю о DAG.Если вы можете представить свою проблему как DAG, вы можете убедиться, что у вас нет циклов (как упоминал Крис Смит ранее).

Еще один атрибут бинарного дерева решений, который может (или не может) иметь здесь значение, заключается в том, что они являются двоичными.Тем не менее, я не уверен, как вы хотели бы смоделировать вашу проблему на диаграмме двоичного решения.Похоже, что BDD имеют ноль, один или два варианта на каждом узле.Мне трудно понять, как я могу сопоставить зависимости с этим.Отображение зависимостей в график имеет для меня гораздо больше смысла.

В основном, я думаю, что это зависит только от того, какие алгоритмы вы хотите запустить в своем представлении.Если вы не уверены, что у вас есть группа обеспечения доступности баз данных, вы можете запустить алгоритм обнаружения циклов , чтобы узнать, есть он или нет.Если вы хотите найти кратчайшие пути, вы можете запустить Dijkstra's на нем.Я думаю, что это действительно зависит от того, что вы хотите сделать, и я знаю, что вы можете сделать с общим графиком, который в основном включает доказательство того, что это DAG.Как только вы получите DAG, большинство вещей, которые я хотел бы установить, уже созданы.Это только я.

-Брайан Дж. Стинар-

...