There are already many PHP open source free frameworks for MVC. We don’t need to develop a lightweight MVC to reinvent the wheel. , the purpose of this article is to learn the structural preparation and MVC ideas of MVC, so that you can better apply the open source MVC framework.
Note: The following definitions are narrow and are used to limit the problem domain to be solved this time. You can also define your own standards. This is not an industry standard.
(1) Lightweight MVC definition:
1. The framework has no intrusion into the application and does not rely on any interface classes
2. Zero configuration of the framework, zero annotations
3. Simple to use and easy to understand. Let’s not engage in RESTful for the time being to avoid complexity
(2) Lightweight MVC interface:
1. Controller uses setter to inject request parameters and supports hierarchical injection, such as: book.title.
2. Controller uses getter to supply data to View, and the corresponding attribute value can be directly obtained in View, such as: ${property}.
3. Controller uses any non-setter and getter functions to process requests.
4. The Controller uses the function return value to control the jump. It is only allowed to jump to another Controller. One Controller is not allowed to correspond to two Views.
5. Controller’s dependence on Model is automatically assembled using setters, including dependencies between Models.
6. Session parameters, such as: loginUserId, are also injected into the Controller through setters. If there are request parameters injected into loginUserId, they will also be overwritten by the Session parameters.
7. View and Controller are one-to-one, mapped through names, and support various View template type extensions, such as: JSP, Velocity, FreeMarker, CommonTemplate, etc.
8. View can also be executed without a Controller, which is equivalent to an implicit Controller.
9. The framework should provide a COC interface. Based on the rules, it is agreed that a certain package name is model, a certain package name is controller, and a certain directory is view, such as: com.company.module.controller, automatically discover the module, and use Load the model in singleton mode and the controller in prototype mode.
All in all, the interface has nothing but setters, getters, and automatic mapping rules.
(3) Lightweight MVC access:
http://hostname[:port][/application name]/module name/controller name/function name.html[?parameter name=parameter value]
Note: The square brackets can be omitted
(4) Lightweight MVC implementation:
Any implementation that conforms to the above interfaces is acceptable.
(5) Advantages of lightweight MVC:
Business logic does not depend on any framework and can be adapted to any framework without affecting the business code. When the old framework is eliminated and no one maintains it, it can be migrated to a new more stable framework in the fastest way.
Ideals are beautiful, but reality is cruel. The above are purely personal thoughts. In reality, it is much more difficult. It is always good to have a beautiful vision.