Assuming you have to deal with a non-trivial project, I think that your problem has two aspects that need to be considered together to configure the architecture and quality of the code:
For naming purposes, I try to have the highest grip in each namespace and follow the General Closure Principle and the General Reuse Principle .
For modulation, I try to use a module for each architectural main problem of the project and it is convenient to use its packages.
MVC is a presentation module template that aims to separate how the presentation module controls the flow, which data models it is based on, and which is the logic associated with the presentation.
In my java IDE (e.g. Eclipse) I use a project on a module, so the web module will be a project and the desktop will be another project. In a web project, for example, I have a common prefix, for example:
com.mycompany.app.web
and in it I have .controllers (or actions) a descendant, a descendant of .models, etc.
com.mycompany.app.web.models com.mycompany.app.web.actions
If I use a database, I rely on the DAO module, another project. The DAO module does not have a presentation, so it does not have an MVC approach. It saves domain objects, so maybe it relies on a domain module. In these modules, I use prefixes as follows:
com.mycompany.app.domain com.mycompany.app.dao
I try not to confuse the Model in MVC with the Domain application; they are not the same thing.
Another common mistake is the controller confusion with business logic ; business logic should be placed in a module and shared through presentation modules, a controller in the namespace of the presentation module (website or desktop).
A Model (in MVC, a view model) is an object used by a view to show something to the user: it can contain one, a combination, or a collection of Domain . The controller uses the available modules (DAO, etc.) to create the Model view, and then passes it to the View .
View , then you can rely only on the Model (only one explicitly created by the controller) and request models only for controllers (only for models). Viewing , especially for web presentations, is often encoded in a combination of languages, so part of the code may remain outside of naming conventions.