У меня есть класс камеры, который управляет поведением камеры. Среди его полей есть ссылка на класс Cube для цели (куб - это только один из объектов, но я не буду упоминать других, чтобы они были простыми). Чтобы вычислить матрицу View, мне нужна позиция камеры и позиция цели, поэтому я могу объяснить моей программе, что: «камера размещена здесь, и отсюда она смотрит на этот куб». Если куб будет перемещаться, то и точка зрения камеры автоматически изменится.Два класса, зависящие друг от друга
До сих пор все хорошо: есть класс камеры, который зависит от класса Cube, и есть класс Cube, который ни на что не зависит (в этом примере).
Я добираюсь до проблемы, когда мне нужно нарисовать куб, или что-нибудь else - для того, чтобы нарисовать что-то, среди необходимых значений - матрица вида Camera; это тот, который я только что вычислил в первом абзаце. По сути, это означает, что когда я добираюсь до места, чтобы нарисовать вещи на экране, класс Cube также зависит от класса Camera, и теперь они зависят друг от друга. Это означало бы, что я либо:
- Необходимо сделать поле «Просмотр матрицы» класса «Камера» статическим, поэтому я могу получить к нему доступ непосредственно из класса Cube.
- необходимо выполнить метод (например SetView) в классе Cube, который затем я могу вызвать из класса Camera (так как у меня уже есть ссылка).
- Необходимо сохранить матрицу вида во внешнем пространстве.
- необходимо сделать двунаправленную зависимость.
Но мне не нравится любой из них:
- больше камер, которые обрабатывать несколько представлений (в настоящее время есть 3 из них на экране), и может быть больше (или меньше).
- это делает код немного (иногда, может быть, очень) нечитаемым - например, когда я рисую куб, неясно, откуда взялась матрица View, вы просто используете его и не смотрите назад ,
- Я бы получил доступ к внешнему виду из класса камеры, или внешняя область доступа к камере, и мне это не понравится, потому что внешняя область используется только для обработки механики выполнения.
- Мне нравится сохранять мои ссылочные поля «readonly», поскольку в настоящее время это происходит повсюду в этой системе - ссылки задаются в конструкторе и используются только для получения данных из ссылочных классов.
И, если я не прояснил это, позвольте мне просто повторить, что есть несколько объектов камеры и несколько объектов Cube; в то время как любая Камера может или не может зависеть от любого Куба, но обычно есть, по крайней мере, одна Камера, зависящая от Куба.
Любые предложения будут оценены :)
Спасибо, что заметили ... Мне нужно сделать несколько тестов, прежде чем принимать этот ответ, но теперь вы даете мне представление о том, что мне следует делать - сделайте что-то вроде метода Camera.Attach (IAttachable attachTo) 'в Класс камеры, где я могу заказать камеру, чтобы следить за этим объектом ... и в этом случае я инвертирую текущую зависимость. – avance70
Да, я перекодировал эту часть, и мне кажется, что это лучшее решение. – avance70