Dan
Dan

Reputation: 12096

Can you have too many models in a PHP mvc?

I'm currently creating my own PHP mvc for a site that I run so that it will include just the code needed yo be as light and fast as possible.

The site has quite a large range of functions and user features so working out which actions go where in which models controlled by which controllers is starting to get quite complex.

Example

Say I have the following member features

Each of those can be controlled by the membercontroller but then my question is whether to have them all inside one model or a model for each.

Each of those three has sub many actions such as:

...etc

At the moment I'm thinking a model for each (favourite, friends, history) is probably the best way, but can it get to a point where you have too many models?

At the moment the whole site has 6 controllers, 17 models and 25 views

Upvotes: 0

Views: 375

Answers (3)

hakre
hakre

Reputation: 197943

Yes you can technically have too many models, there is a limit (as always) of how many classes can exist in PHP. But it's pretty large, so keep on going. You can not only have many but also different kind of models at once. So keep on going, don't restrain your coding by thinking there might be a limit you don't see so far.

So not the count of files, but how nicely written your code is, e.g. is everything grouped properly that belongs together? See as well Domain Model.

Upvotes: 1

Oerd
Oerd

Reputation: 2303

I suggest you let ModelController deal with actions that somehow modify Model.

I.e. FavoritesController deals with adding, removing and showing favorites (stored on FavoritesModel). Keeps your controllers lean/slim, is a lot easier to test (less methods) and keeps logical app parts together.

Also, you could divide the application into smaller apps that deal each with:

  • Auth/Login
  • Social/Sharing
  • add/read/show articles (main app)

Upvotes: 1

shrikeh
shrikeh

Reputation: 661

In such scenarios there is no "right" answer, so all I can give you is my own interpretation. I would use a service to do bind one or more models together. So, a User service would use the User model and the Favourite model to manipulate and display user favourites.

Upvotes: 0

Related Questions