Я пишу код переноса частиц.В этом коде физические объекты реализуют интерфейс Volume.Один из примеров реализации Volume представляет интерес для этого кода - класс Particle.В моем дизайне Тома содержат другие Тома вплоть до самого маленького реализатора Тома, Particle.Это будет прекрасно работать до тех пор, пока Частицы хотят летать без наблюдения через тома, имеющие взаимодействия.
Однако, в тот момент, когда я хочу реализовать какой-то объем детектора частиц, который будет записывать информацию о частице, у меня возникла проблема.Интерфейс Volume не содержит способа получить специальный тип информации, которую имеет Particle.Если Частица пробьется в Объем детектора, мне нужно будет сделать что-то вроде проверки ее типа с помощью отражения, прежде чем я приведу ее к Частице из Объема и вызову методы Частицы.Обычно (из того, что я видел) этот тип вещей помечается меткой «плохой дизайн».
Я мог бы сделать так, чтобы только Частицы могли пересекать границы Тома в интерфейсе Тома (привязать интерфейс кчастный случай), но я не хочу навязывать это ограничение моему коду.Возможно, я захочу разрешить громкости перемещаться и присоединяться позже.
Так это звучит как плохой дизайн?Есть ли другой очевидный способ справиться с этой проблемой?Я приложу код, если это необходимо, но общая проблема кажется независимой от моих данных (и довольно независимой от языка).
Заранее спасибо.Я действительно ценю все знания здесь, на SO.