Все гениально просто

Все гениальное – просто.

Не помню, кто именно так сказал, но это действительно так. Суть:

Я разрабатываю одну очень интересную систему, там есть 2 типа эммм… проектов – технология, и собственно сам проект. Технология описывает базовые отношения между составными частями проекта. Затем, при создании нового проекта, технология копируется в него и де-факто мы имеем шаблон проекта с заданными заранее зависимостями. Так вот, при копировании все ок, зависимости соблюдены. Но, тут возникает вопрос, что делать, если создается что-то новое, или создается что-то по образу уже находящейся в производстве вещи? А если это цепочка вещей, а если внутри цепочки перекрестные зависимости от множества других цепочек?

Немного графики:

Вопрос: как соотнести автоматически зависимости между объектами на уровне цепочек?
Думали, спорили аж с пятницы. Даже матом ругались. Было несколько версий:

  1. Создавать цепочки пообъектно, из кирпичиков-объектов, каждому вручную указывать зависимости – это долго, муторно и сложно
  2. Создавать цепочки по технологии, но технология не хранит данных о зависимости конкретных объектов в проекте!
  3. Создавать цепочки по технологии и указывать в какой цепочке искать объекты для зависимости. А если объектов много, если у каждого перекрестные зависимости, а что будет зависеть от самой цепочки, а что, если какой-то объект в уже существующих цепочках удалили и его вообще нет – куча исключений
  4. Создавать цепочки и объекты по технологии, однако что, если все зависимости уже удовлетворены – будет куча хлама и неиспользуемых объектов
  5. Создавать пустые цепочки и потом все заполнять уже на этапе разработки цепочек – ужаснах, это как-то некошерно
В итоге, пригласив Джорджа (гендир заказчика), сошлись на том, что будем просто копировать уже существующие цепочки, сохраняя зависимости их объектов и добавляя соответственно свежесозданные объекты цепочки туда, где требовались объекты цепочки-прообраза! ???? PROFIT!!!! Просто, ясно, одна кнопка!
Действительно, все гениальное – просто
(C) ZonD80

Leave a Reply

Your email address will not be published. Required fields are marked *