search
HomeBackend DevelopmentPHP TutorialPrinciples of division of responsibilities in MVC architecture

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.

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
This article is reproduced at:awaimai. If there is any infringement, please contact admin@php.cn delete
PHP: An Introduction to the Server-Side Scripting LanguagePHP: An Introduction to the Server-Side Scripting LanguageApr 16, 2025 am 12:18 AM

PHP is a server-side scripting language used for dynamic web development and server-side applications. 1.PHP is an interpreted language that does not require compilation and is suitable for rapid development. 2. PHP code is embedded in HTML, making it easy to develop web pages. 3. PHP processes server-side logic, generates HTML output, and supports user interaction and data processing. 4. PHP can interact with the database, process form submission, and execute server-side tasks.

PHP and the Web: Exploring its Long-Term ImpactPHP and the Web: Exploring its Long-Term ImpactApr 16, 2025 am 12:17 AM

PHP has shaped the network over the past few decades and will continue to play an important role in web development. 1) PHP originated in 1994 and has become the first choice for developers due to its ease of use and seamless integration with MySQL. 2) Its core functions include generating dynamic content and integrating with the database, allowing the website to be updated in real time and displayed in personalized manner. 3) The wide application and ecosystem of PHP have driven its long-term impact, but it also faces version updates and security challenges. 4) Performance improvements in recent years, such as the release of PHP7, enable it to compete with modern languages. 5) In the future, PHP needs to deal with new challenges such as containerization and microservices, but its flexibility and active community make it adaptable.

Why Use PHP? Advantages and Benefits ExplainedWhy Use PHP? Advantages and Benefits ExplainedApr 16, 2025 am 12:16 AM

The core benefits of PHP include ease of learning, strong web development support, rich libraries and frameworks, high performance and scalability, cross-platform compatibility, and cost-effectiveness. 1) Easy to learn and use, suitable for beginners; 2) Good integration with web servers and supports multiple databases; 3) Have powerful frameworks such as Laravel; 4) High performance can be achieved through optimization; 5) Support multiple operating systems; 6) Open source to reduce development costs.

Debunking the Myths: Is PHP Really a Dead Language?Debunking the Myths: Is PHP Really a Dead Language?Apr 16, 2025 am 12:15 AM

PHP is not dead. 1) The PHP community actively solves performance and security issues, and PHP7.x improves performance. 2) PHP is suitable for modern web development and is widely used in large websites. 3) PHP is easy to learn and the server performs well, but the type system is not as strict as static languages. 4) PHP is still important in the fields of content management and e-commerce, and the ecosystem continues to evolve. 5) Optimize performance through OPcache and APC, and use OOP and design patterns to improve code quality.

The PHP vs. Python Debate: Which is Better?The PHP vs. Python Debate: Which is Better?Apr 16, 2025 am 12:03 AM

PHP and Python have their own advantages and disadvantages, and the choice depends on the project requirements. 1) PHP is suitable for web development, easy to learn, rich community resources, but the syntax is not modern enough, and performance and security need to be paid attention to. 2) Python is suitable for data science and machine learning, with concise syntax and easy to learn, but there are bottlenecks in execution speed and memory management.

PHP's Purpose: Building Dynamic WebsitesPHP's Purpose: Building Dynamic WebsitesApr 15, 2025 am 12:18 AM

PHP is used to build dynamic websites, and its core functions include: 1. Generate dynamic content and generate web pages in real time by connecting with the database; 2. Process user interaction and form submissions, verify inputs and respond to operations; 3. Manage sessions and user authentication to provide a personalized experience; 4. Optimize performance and follow best practices to improve website efficiency and security.

PHP: Handling Databases and Server-Side LogicPHP: Handling Databases and Server-Side LogicApr 15, 2025 am 12:15 AM

PHP uses MySQLi and PDO extensions to interact in database operations and server-side logic processing, and processes server-side logic through functions such as session management. 1) Use MySQLi or PDO to connect to the database and execute SQL queries. 2) Handle HTTP requests and user status through session management and other functions. 3) Use transactions to ensure the atomicity of database operations. 4) Prevent SQL injection, use exception handling and closing connections for debugging. 5) Optimize performance through indexing and cache, write highly readable code and perform error handling.

How do you prevent SQL Injection in PHP? (Prepared statements, PDO)How do you prevent SQL Injection in PHP? (Prepared statements, PDO)Apr 15, 2025 am 12:15 AM

Using preprocessing statements and PDO in PHP can effectively prevent SQL injection attacks. 1) Use PDO to connect to the database and set the error mode. 2) Create preprocessing statements through the prepare method and pass data using placeholders and execute methods. 3) Process query results and ensure the security and performance of the code.

See all articles

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

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat Commands and How to Use Them
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.