That was really helpful, I'll look into a similar approach and I'll try to apply these suggestions to other designs I'll have to implement.
I see that the problem is definitely my way of thinking about the project structure/architecture (which is no surprise given I have a C++ background). I guess I'll study a bit more how to avoid "bad OOP" and reason in a "cleaner" way (i.e. like the "prefer composition over inheritance" I read everywhere ). If you happen to have any specific blog post/book/article worth mentioning, that would be amazing. But I'll find stuff myself. I hope I can come back to this thread if I have other questions or I need more advice/help in the future.