I was recently responsible for a project that used the MVC framework of Yii Framework. At first I thought the structure was very robust.
But as we deepened our understanding of business logic, we began to realize the seriousness of the problem.
I misunderstood Controller in MVC, and based on past experience, I took it for granted that all business logic was placed in the action# of Controller ## to implement.
Controller has thousands of lines of code, which is becoming more and more bloated.
Finally, I made up my mind to reconstruct the code. The origin was the need for an open API interface. According to the current architecture, the code is basically impossible to reuse. I need to write many functions over and over again, which is really unacceptable. Object-oriented programming is not just a term in textbooks! Only when I started to practice did I realize how rare it is to have object-oriented awareness and a global perspective.Design framework (design pattern) .
Thegoal of MVC is to separate business logic from user interface considerations.
This way, developers can more easily change each part without affecting the others. In MVC,ActiveRecord(
AR) concept.
table in the database can use the
AR class to conveniently perform addition, deletion, modification and query operations.
models.
AR is just DAO (data access layer), not the Model layer.
Almost all of our business is placed in the Controller:Make various logical judgments on the forms submitted by users, perform calculations, instantiate AR and store the data...
Because there will be multipleaction in a Controller, each
action has such business processing.
Controller, like condoms, should be as thin as possible.
Its responsibility shouldJust accept user input and then immediately forward it to other classes for processing.
In this way, the Controller is only responsible for providing different interfaces, so that we can separate the business logic, and the separated business can be easily reused. Who will handle this separated part of the business? The answer should beModel.
View is relatively clear, it is responsible for display.
Everything that has nothing to do with the display interface should not appear in the view.
Therefore, generallyshould not have complex judgment statements or complex calculation processes in View .
You can have simple loop statements and formatting statements. For example, the text list on the blog homepage is a kind of loop. For PHP web applications,HTML is the main content in View.
Viewshould never call the Model writing method.
In other words, View only reads data from Model but does not rewrite Model.
So we say that View and Model are inseparable.
Furthermore, $_GET
and $_POST
are not directly accessed in View and should be passed to View by Controller.
In addition, View generally does not have any content to prepare data processing, such as querying the database, etc.
These are usually placed in the Controller and passed to the view in the form of variables.
In other words, the data to be used in the view is a variable .
For Model, the most important thing is to save and output information. For example, the Post class must have a
title attribute used to save the title of the blog post, and must have a delete operation. These are all the contents of the Model.
Data, behavior, and methods are the main contents of Model. In actual work,
Model has the largest amount of code in MVC. Model is the most complex part of the logic, because the business logic of the application must also be expressed here.
Pay attention to distinguishing Model from Controller.
Model handles business logic, and Controller simply coordinates the relationship between Model and View. As long as it is related to the business, it should be placed in the Model.
Data verification, publicconstants and variables should all be placed in the model layer,In other words, attributes or methods that may be reused should be placed in the model layer, defined once and used everywhere.
Model should not access request, session and other environment data, these should be injected by the Controller.
Good design should be
fat Model and thin Controller.
5 Responsibilities of Controller, it mainly responds to user requests and decides what view to use, which needs to be prepared What data is used to display . Therefore,
The access code for request should be placed in the Controller , such as $_GET,
$_POST
etc. Controller should be limited to obtaining user request data,
should not perform any operations or preprocessing on data, this should be placed inside the Model. For data writing operations, the method of the Model class must be called to complete.
In response to user requests, view rendering is called.
In addition, generally
There should be no HTML code or other presentation layer things, this should be the content of the View.
6 EnlightenmentIn short,Rich Model is Better
.
The above is the detailed content of Examples to explain the meaning and division of responsibilities of MVC architecture. For more information, please follow other related articles on the PHP Chinese website!