Generally, MVC frameeworks have a structure that looks something like:
/models
/views
/controllers
/utils
However, in a web application suite, I've decided that clumping all models, views, and controllers together probably wouldn't be the best for clarity, unless I treated the system as one application instead of an application suite. However, some things tie every "application" together, like the notion of users and user roles.
So I have three possible solutions:
(1) Do what I don't really want to do, and keep every model, view, and controller together, regardless of which app it belongs to. This is treating the suite as a single application, since they are tied together by several common threads, including users.
(2) Group the code by application.
/app1
/models
/views
/controllers
/utils
/app2
/models
/views
/controllers
/utils
(3) Group the code by type, letting utility code be shared among all of the applications.
/models
/app1
/app2
/views
/app1
/app2
/controllers
/app1
/app2
/utils
Is there an option I missed? What would be the most logical scheme for future developers? I personally prefer 2 and 3, but perhaps most people would expect 1.