I'm moving the question here from IRC.

The problem: I have jumped in into a code base that I want to take on good shape. Don't we always?

In that spirit, after adding some coverage (as in test coverage) I've applied several known refactorings/improvements to help with this task. Here's what I've done (actually I've done a lot more, but these are the relevant bits to my question):

Added some PORO objects to offload some tasks being performed in models, controllers, even in views. Used *decent_exposure* to get rid of the instance variable hell the view layer was in. Implemented some for-views decorators using draper to avoid having so much logic in views. Added presenters for actions spawing multiple models.

Now, I (optimistically) expected all this will pay off. It is better in deed, but after throwing everything but the kitchen sink, I would have expected it to be lots better. It's not.

Since I have a view layer that literally is rendering like 10-15 partials on a single action, I'm concerned about my ability to change things in the controller or the view layer. I don't want to go through all this partials whenever I decide the members for an account are called "members" or just "users". I'm caring about this because the model layer is scheduled to suffer more significant change.

What I initially thought (and still stand on) is to have dumb views. I want most part of my view layer to avoid knowing about the models they're rendering at all. I want an intermediary object that will know how to do two things: extracting the data it needs from the model, and rendering the HTML. And before you tell me I'm violating SRP here, the real responsability for this object can be read as "displaying a model to the end user".

In an over-simplification, I would like my views (at least these aforementioned ones) to look like this:

= some_object.render = another_object.render

It does sound like the decorator pattern, and it does also sound like the presenter pattern, at least this is what I've though.

Then I started thinking I would be debiating significantly from MVC (at the least the MVC that rails exposes), so I wanted to know whether this would be the best solution (other than the obvious, nearly impossible with this time-constrains, REWRITE), so I'm more confident about making the shot.

So, with that context, my real questions boils down to:

a) Is switching to MVP, MVVM, MV-whatever the right solution for this problem?

b) If it is, can you tell me about the best solution I could use for this some_object.render view style?

c) If not, can tell you tell how to avoid the hard dependency between those partials and views in general, with a model layer that's could be hours away from being significantly rewritten?

d) Hope you don't get here: YAGNI, so fix afterwards? I'm pretty sure I'm gonna need it.

There's another option that crossed my mind and brought to IRC, not really with the spirit of the title but a valid one (although I'd think overkill for the task at hand):

e) Add a service layer, and make my views map to the "logical" models on that service layer, so I'm able to change the physical models independently of the views.