My Implementation
Based on the previously mentioned definition, I implemented the architecture from scratch for my final year project. However, I also modified the MVC architecture so that the structure also resembles three-tiers architecture in some way. The reason is that I am more familiar with three-tier architecture as I studied that in my college days and found some similarities in between these two architectures.
Therefore the product of my implementation becomes (the codes are being re-written at the moment but basically will be the same as the one posted here and they are for illustration purpose only and may not work)
Model
Basically a model is used to store business logic (methods/functions) and data (attributes/characteristics/field) but I don’t want the logic and data got all mixed together and make the model class file extremely complex and long. Hence, I took out the data and place them in the entity. Therefore a typical model class would look something like the following:
<?php
class TypicalModel extends Model
{
/*
* $dao = data access object
*/
public function __construct($dao)
{
parent::__construct($dao);
}
public function TypicalMethod()
{
// some method
}
public function AddRecord()
{
// some code to add record to database through the data access object
}
public function DelRecord()
{
// some code to delete record from database
}
// there maybe some other methods but I think you have got the idea already
}
?>
Entity
The entity class, as mentioned above, is just a class storing the attribute. I am still working on this part to simplify the declaration of the mutators and accessors.
<?php
class TypicalEntity
{
public $var1;
public function __construct($var1)
{
$this->SetVar1($var1);
}
private function SetVar1($var1)
{
$this->var1 = $var1;
}
public function GetVar1()
{
return $this->var1;
}
}
?>
View
The view is used to display output to the user by pulling information from the model. But to pull information from the model, I need to call methods from the view class, Therefore I separate the method declarations and the actual output codes into a view class and a template file. The only problem with this implementation so far is the speed decrease as message passing through method calling is slow.
<?php
class TypicalView extends View
{
public function __construct($model)
{
parent::__construct($model);
}
public function Display()
{
include 'TypicalTemplate.tpl';
}
public function DisplayTypicalParagraph()
{
return '<p>This is a typical sentence in a paragraph tag.</p>';
}
}
?>
Templates
Although the template can be in any format, I use a simple html page for demonstration purpose.
<html>
<head>
<title>A Typical Page</title>
</head>
<body>
<?php $this->DisplayTypicalParagraph(); ?>
</body>
</html>
Controller
<?php
class TypicalController extends Controller
{
public function __construct($dao)
{
parent::__construct($dao);
}
public function Execute()
{
/*
* because I am taught with ASP.NET initially,
* so you may see me working it somehow in
* ASP.NET way
*/
parent::SetModel(new TypicalModel($dao));
$this->model->TypicalMethod();
if(count($this->model->errorMsg) == 0)
{
// IsPostBack in PHP
if(count($_POST) == 0)
{
parent::SetView(new TypicalView($this->model));
$this->view->Display();
}
}
}
}
?>
Front Controller
Because I am going to build a site with many modules and I wish users to visit my site through the only entrance which is the index.php lilly deutschland cialis. Therefore I use a front controller to redirect my users to the respective module at the specific controller.
<?php
class FrontController extends Controller
{
public function __construct($dao)
{
parent::__construct($dao);
}
public function Redirect()
{
switch($_POST['request'])
{
case 'module/action/':
SetController(new TypicalController($dao));
}
}
}
?>
Finally, the index.php file
To make the website work, one would only add a few lines into the index.php file to make the site work. One advantage with using my implementation is that I can put only the index.php and .htaccess file in the public_html folder and the above files are stored out of the public_html folder to prevent other people from accessing them regardless of their intention.
<?php
// basically, one line should do
FrontController::Redirect($dao);
?>
Other Notes
Of course the above part does not really work but just a demonstration of my implementation for MVC architecture. I purposely omitted the inclusion of files, validation, passing of http post and get information etc. because they are not relevant. Next, I will touch briefly on CI’s implementation for MVC architecture.