Home Backend Development PHP Tutorial Principles of division of responsibilities in MVC architecture

Principles of division of responsibilities in MVC architecture

Jan 10, 2019 am 10:02 AM

I was recently responsible for a project that used the MVC framework of the 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 the Controller in MVC, and took it for granted that based on past experience, all business logic was implemented in the Action of the Controller.

As a result, each 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.

Principles of division of responsibilities in MVC architecture

MVC design principles

1. What is the MVC

model- View-Controller (MVC) is a design framework (design pattern).

The goal 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, Model represents data and business rules; View contains user interface elements, such as text, forms, etc.; Controller manages the communication between models and views.

MVC is implemented in various programming languages. For example, in J2EE application development,

View may be implemented by jsp; Controller is a servlet, now generally implemented with Struts; Model is implemented by An entity bean to implement.

2. What problems did I encounter

Yii Framework is a popular PHP framework that draws on the ActiveRecord(AR) concept of Ruby on Rails.

Every table in the database can use the AR class to easily perform addition, deletion, modification and query operations.

It treats AR as a Model and recommends placing it under a directory called models.

So, after I automatically generated the AR corresponding to the table, I took it for granted that I already had the Model layer.

In fact, AR is just a DAO (data access layer), not a Model layer.

Almost all of our business is placed in the Controller: making various logical judgments on the forms submitted by users, performing calculations, instantiating AR to store data...

Because of a Controller There will be multiple actions, and each action has such business processing.

Finally, I found that my Controller code had exceeded 1000 lines.

Suddenly one day, the leader said that our system should open APIs for existing old systems to call and provide third-party interfaces.

The third party only needs to give a parameter, and the system only gives a result value. It does not care about the business processing.

The bad thing is that the Controller has already implemented those services, but it accepts form submissions. How can it also accept SOAP xml documents?

Controller, like condoms, should be as thin as possible.

Its responsibility should only be to 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 be Model.

3. View’s responsibilities

The View part 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, complex judgment statements and complex calculation processes should generally not appear 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.

View should never call the Model's write method.

In other words, View only reads data from Model but does not rewrite Model.

So we say that View and Model are inseparable.

Moreover, $_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 preparation for 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.

4. Model’s responsibilities

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 business, it should be placed in the Model.

Data verification, public constants and variables should all be placed in the model layer.

That is to say, attributes or methods that may be reused should be placed in the model layer, once Definition, 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

For Controller, it mainly responds to user requests, decides what view to use, and what data needs to be prepared for display.

Therefore, the access code for the request should be placed in the Controller, such as $_GET, $_POST, etc.

Controller should be limited to obtaining user request data and should not perform any operations or preprocessing on the 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 and other presentation layer things. This should be the content of the View.

6. Enlightenment

The official documentation of Yii Framework has this paragraph:

In a well-designed MVC application, controllers are often very thin, containing probably only a few dozen lines of code; while models are very fat, containing most of the code responsible for representing and manipulating the data.
Copy after login

In short, Rich Model is Better.

The above is the detailed content of Principles of division of responsibilities in MVC architecture. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1666
14
PHP Tutorial
1273
29
C# Tutorial
1253
24
Explain secure password hashing in PHP (e.g., password_hash, password_verify). Why not use MD5 or SHA1? Explain secure password hashing in PHP (e.g., password_hash, password_verify). Why not use MD5 or SHA1? Apr 17, 2025 am 12:06 AM

In PHP, password_hash and password_verify functions should be used to implement secure password hashing, and MD5 or SHA1 should not be used. 1) password_hash generates a hash containing salt values ​​to enhance security. 2) Password_verify verify password and ensure security by comparing hash values. 3) MD5 and SHA1 are vulnerable and lack salt values, and are not suitable for modern password security.

PHP and Python: Comparing Two Popular Programming Languages PHP and Python: Comparing Two Popular Programming Languages Apr 14, 2025 am 12:13 AM

PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners.

PHP: A Key Language for Web Development PHP: A Key Language for Web Development Apr 13, 2025 am 12:08 AM

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

PHP in Action: Real-World Examples and Applications PHP in Action: Real-World Examples and Applications Apr 14, 2025 am 12:19 AM

PHP is widely used in e-commerce, content management systems and API development. 1) E-commerce: used for shopping cart function and payment processing. 2) Content management system: used for dynamic content generation and user management. 3) API development: used for RESTful API development and API security. Through performance optimization and best practices, the efficiency and maintainability of PHP applications are improved.

How does PHP type hinting work, including scalar types, return types, union types, and nullable types? How does PHP type hinting work, including scalar types, return types, union types, and nullable types? Apr 17, 2025 am 12:25 AM

PHP type prompts to improve code quality and readability. 1) Scalar type tips: Since PHP7.0, basic data types are allowed to be specified in function parameters, such as int, float, etc. 2) Return type prompt: Ensure the consistency of the function return value type. 3) Union type prompt: Since PHP8.0, multiple types are allowed to be specified in function parameters or return values. 4) Nullable type prompt: Allows to include null values ​​and handle functions that may return null values.

The Enduring Relevance of PHP: Is It Still Alive? The Enduring Relevance of PHP: Is It Still Alive? Apr 14, 2025 am 12:12 AM

PHP is still dynamic and still occupies an important position in the field of modern programming. 1) PHP's simplicity and powerful community support make it widely used in web development; 2) Its flexibility and stability make it outstanding in handling web forms, database operations and file processing; 3) PHP is constantly evolving and optimizing, suitable for beginners and experienced developers.

PHP vs. Other Languages: A Comparison PHP vs. Other Languages: A Comparison Apr 13, 2025 am 12:19 AM

PHP is suitable for web development, especially in rapid development and processing dynamic content, but is not good at data science and enterprise-level applications. Compared with Python, PHP has more advantages in web development, but is not as good as Python in the field of data science; compared with Java, PHP performs worse in enterprise-level applications, but is more flexible in web development; compared with JavaScript, PHP is more concise in back-end development, but is not as good as JavaScript in front-end development.

PHP and Python: Different Paradigms Explained PHP and Python: Different Paradigms Explained Apr 18, 2025 am 12:26 AM

PHP is mainly procedural programming, but also supports object-oriented programming (OOP); Python supports a variety of paradigms, including OOP, functional and procedural programming. PHP is suitable for web development, and Python is suitable for a variety of applications such as data analysis and machine learning.

See all articles