> However, the modularity they provide out of the box is mostly cosmetic
Isn't being cosmetic pretty much true with everything in Ruby/Rails? You can override constants/classes, override method definitions (public/private), access "private" variables, call "private" methods, etc. There are gems that prevent these types of things, but then you're just fighting the language.
I feel like they are solving the standard problem that happens with Rails apps. You use Rails so you can iterate quickly when you don't know exactly what you're building. Eventually you reach the point where your code is hard to reason about and maintain, but the core of you business logic is now more understood. So then you want to start turning knobs to tighten up your code and disallow the shortcuts that used to make you more productive but are now slowing you down. Then you start adding more code that fights back against Ruby/Rails and disallows you from doing things in your application code that's making it hard to reason about.
Isn't being cosmetic pretty much true with everything in Ruby/Rails? You can override constants/classes, override method definitions (public/private), access "private" variables, call "private" methods, etc. There are gems that prevent these types of things, but then you're just fighting the language.
I feel like they are solving the standard problem that happens with Rails apps. You use Rails so you can iterate quickly when you don't know exactly what you're building. Eventually you reach the point where your code is hard to reason about and maintain, but the core of you business logic is now more understood. So then you want to start turning knobs to tighten up your code and disallow the shortcuts that used to make you more productive but are now slowing you down. Then you start adding more code that fights back against Ruby/Rails and disallows you from doing things in your application code that's making it hard to reason about.