moved dependency logic (requires, requiredBy) into its own model