Предположим, что ваш код правильно разработан для DI и IOC посредством внедрения в конструктор любых зависимостей. Тогда использование контейнера IOC или DI вручную в корне композиции не имеет большого значения для этой проблемы. Я думаю.
В любом случае, я снова и снова нахожусь в мысленной борьбе с тем, как мне лучше всего работать с сервисами, основанными на области видимости, такими как транзакции или другие очевидно временные операции. Есть ограничения, которые я хочу соблюдать:
На платформах GraphDB (Neo4j, OrientDB, FlockDB, HyperGraphDB ...) можно определить отношения между узлами.
Мне нужно определить направленные отношения, такие, что отношение имеет разные имена в зависимости от его направления.
Например:
Parent(A,B) := Sibling(B,A).
Затем я хочу пройти или запросить график, используя как термины, так и направления.
Конечно, я не хочу определить два отношения, но только одно.
Иногда я даже хочу использовать ненаправленное имя, например:
Call(A,B) := Answer(B,A);
TalkWith(A,B) := Call(A,B) || Call(B,A)
И использовать направленные или косвенные обходы / запросы
Например, я могу захотеть просить:
Get any X that TalkWith(A,X))
,
Get any X that Call(A,X))
или
Get any X that Answer(A,X))
Какие существующие платформы GraphDB поддерживают его?