views:

339

answers:

1

Fairly straightforward question:

I know that Codeigniter is a MVC framework - however what design pattern is Codeigniter using?

From first look it seems like Facade, but I could be wrong.

Edit:

Perhaps I should describe Codeigniter for those who don't use it.
In Codeigniter you have a concept of a Controller and a Model, which each has their own separate folder. In each of the folders you create a file: cart.php:

<?php

class Cart {
 //...
}
?>

Then you can also have a model:

<?php

class User {
    function login(){...}
}
?>

Inside of the class Cart, you can use the login function in User by simply using $this->user->login()

I find this interesting because the framework makes an object of the User object and the programmer does not.

+2  A: 

In Codeigniter you have a concept of a Controller and a Model, which each has their own separate folder.

They have setup their main router class such that it searches for corresponding controller and model files, it can even go recursive. This has nothing to do with any design pattern, it is just a folder organization.

I find this interesting because the framework makes an object of the User object and the programmer does not.

Yup, they have created a lot of stuff ready-made and to be used any time you want. The User class is used to control whole user system.

Basically, as you said, the main design pattern used is MVC, rest of the things are controlled by different core classes for a specific task.

Sarfraz
I would stamp MVC on Codeigniter also - but I don't see listed on http://en.wikipedia.org/wiki/Design_pattern_(computer_science) - which I think it should. Though I still think it is modeled a little after Facade because instead of having $user->login() you have a single class that has basically subclasses...which just happens to be the calling class.
Nathan Adams