整理电脑磁盘发现N年前的资料,发布下留个记忆!

当前小型网站架构MVC基本上足够使用了,但是对于习惯性MVC的编码人员来说,学习下大型编码架构经验也是必须掌握的技能!

== 以下是笔记

PHP MVC架构是一种常用的Web应用程序开发模式,它将应用程序分为三个主要部分:模型、视图和控制器。在此基础上,我们可以进一步拆分业务逻辑,引入验证器、服务、逻辑层、枚举类、异常类和中间件等组件,以实现更加灵活和可扩展的应用程序。

控制器是MVC架构中的一个重要组件,它负责处理用户请求并返回响应。控制器通常会调用模型层来获取数据,并将数据传递给视图层进行渲染。在实际开发中,我们可以将控制器进一步拆分为多个子控制器,以实现更加细粒度的业务逻辑处理。

模型类是MVC架构中的另一个重要组件,它负责与数据库进行交互,获取和存储数据。在实际开发中,我们可以引入多个驱动选择,如MySQL、Redis等,以实现更加灵活和高效的数据存储。

验证器是用于验证用户输入数据的组件,它可以帮助我们避免一些常见的安全漏洞,如SQL注入、XSS攻击等。验证器通常会在控制器中被调用,以确保用户输入的数据符合我们的期望。

服务层是用于处理业务逻辑的组件,它可以帮助我们将业务逻辑与控制器分离,使应用程序更加易于维护和扩展。服务层通常会被控制器调用,以实现业务逻辑的处理和数据的存储。

枚举类是用于定义常量的组件,它可以帮助我们避免在代码中硬编码常量,使代码更加易于维护和扩展。枚举类通常会被其他组件调用,以获取常量的值。

异常类是用于处理异常情况的组件,它可以帮助我们避免应用程序因为异常情况而崩溃。异常类通常会被其他组件调用,以处理异常情况并返回错误信息。

中间件是用于处理HTTP请求和响应的组件,它可以帮助我们实现一些常见的功能,如身份验证、日志记录、缓存等。中间件通常会被控制器调用,以处理HTTP请求和响应。

文件上传是Web应用程序中常见的功能之一,它可以帮助我们将文件上传到服务器或云存储中。在实际开发中,我们可以引入多个驱动选择,以实现更加灵活和高效的文件上传。

综上所述,PHP MVC架构可以帮助我们实现灵活、可维护和可扩展的Web应用程序。在实际开发中,我们可以根据具体业务需求引入不同的组件,以实现更加完善的功能。

架构基类

具体来说:

  • 控制器基类可以封装一些常用的操作,比如获取用户信息、验证用户权限等,以便在具体的控制器中直接调用。
  • 模型基类可以封装一些常用的数据库操作,比如增删改查等,以便在具体的模型中直接调用。
  • 验证器基类可以封装一些常用的验证规则,比如判断是否为空、是否符合正则表达式等,以便在具体的验证器中直接调用。
  • 服务基类可以封装一些常用的业务逻辑,比如生成订单、发送邮件等,以便在具体的服务中直接调用。
  • 中间件基类可以封装一些常用的中间件逻辑,比如记录日志、设置请求头等,以便在具体的中间件中直接调用。
  • 视图层基类可以封装一些常用的视图操作,比如渲染模板、设置模板变量等,以便在具体的视图层中直接调用。

服务层和逻辑层都是 MVC 中的一层逻辑,但它们的职责不同。

服务层主要负责封装业务逻辑和业务数据,提供给控制器或其他服务使用,它的职责包括:

  • 封装业务逻辑:服务层负责封装业务逻辑,比如生成订单、发送邮件等,以便在控制器或其他服务中直接调用。
  • 封装业务数据:服务层负责封装业务数据,比如订单信息、用户信息等,以便在控制器或其他服务中直接调用。
  • 处理业务流程:服务层负责处理业务流程,比如根据用户输入的信息生成订单、调用支付接口等,以便在控制器或其他服务中直接调用。

逻辑层则是整个 MVC 应用的核心部分,它主要负责实现业务逻辑,包括:

  • 处理业务逻辑:逻辑层负责处理业务逻辑,比如根据用户输入的信息判断是否符合要求、根据用户权限判断是否可以进行某个操作等。
  • 处理数据操作:逻辑层负责处理数据操作,比如从数据库中查询数据、向数据库中添加数据等。
  • 处理业务流程:逻辑层负责处理业务流程,比如根据用户输入的信息生成订单、调用支付接口等。

总的来说,服务层主要负责封装业务逻辑和数据,提供给其他层使用,而逻辑层则负责实现具体的业务逻辑,处理业务流程和数据操作。

在逻辑层和服务层中,使用静态类的情况主要有以下几种:

  1. 工具类:如果某个类中的方法都是静态方法,而且这些方法都是一些通用的工具方法,比如日期格式化、字符串处理等,那么可以将这个类定义为静态类,方便其他类直接调用。

  2. 配置类:如果某个类中的属性都是静态常量,而且这些属性都是一些配置信息,比如数据库连接信息、系统设置参数等,那么可以将这个类定义为静态类,方便其他类直接访问这些配置信息。

  3. 单例类:如果某个类只需要创建一个实例,并且这个实例需要在整个应用程序中共享,那么可以将这个类定义为静态类,并使用静态属性来保存这个实例。

需要注意的是,静态类中的变量和方法都是共享的,因此在多线程环境下需要考虑线程安全问题。如果静态类中的方法需要访问共享的数据,需要使用线程安全的方式访问。