Если совсем глобально, то обычно есть как минимум два "слоя", но иногда больше: модель и "представление".
В "простом" случае 3D рисовалки в модели будут лежать объекты геометрического ядра (наприрмер, C3D), а в представлении будут 3D-меши, пригодные для визуализации.
На практике представление может состоять из набора (дерева) объектов, которые иногда один в один, а иногда не один в один отображают объекты модели.
В эти объекты можно тыкать (через еще один слой, связанный непосредственно с визуализацией) и вызывать на них команды.
Должны ли объекты-представления сами знать о своих командах, или команды знают о представлениях (или только о моделях) -- решайте. В разных случаях удобно по-разному.
Там вам советовали конфиг-файлы с командами. Так обычно и делают, но мне всегда больше нравилось иметь фактически то же самое, только в коде.
Без возможности заменить без компиляции; зато с проверками, навигацией и пр.
Тем более, что и миллениалы недавно изобрели "configuration as code"
Вам рассказывали про геометрические ядра и решатели. С учетом того, что у вас "геология", скорее всего твердотельного моделирования у вас и нет, и оно не нужно.
Вам советовали Фаулера и Мартина. Лично мне нравятся книжки, в которых рассказывается про
General
Responsibility
ASsignment
Principles.
Может быть понравятся и вам, тем более, что вопросы у вас именно токого рода, типа как чья ответственность предоставлять команды.