关注点分离 (SoC)

关注点分离 (soc)

关键实施示例

1. 数据库层分离

// bad - mixed concernsclass user {    public function save() {        $db = new pdo('mysql:host=localhost;dbname=app', 'user', 'pass');        $stmt = $db->prepare("insert into users (name, email) values (?, ?)");        $stmt->execute([$this->name, $this->email]);    }}// good - separated database logicclass user {    private string $name;    private string $email;}class userrepository {    private pdo $db;    public function save(user $user) {        $stmt = $this->db->prepare("insert into users (name, email) values (?, ?)");        $stmt->execute([$user->getname(), $user->getemail()]);    }}

这个很好的例子将数据结构(user)与存储逻辑(userrepository)分开。这使得代码更易于维护,并且允许在不修改 user 类的情况下更改存储方法。

2. 验证分离

// bad - mixed validation and business logicclass order {    public function process() {        if (empty($this->items)) {            throw new exception('order cannot be empty');        }        if ($this->total getitems())) {            $errors[] = 'order cannot be empty';        }        if ($order->gettotal() < 0) {            $errors[] = 'invalid total amount';        }        return $errors;    }}class order {    public function process() {        // only handles order processing    }}

验证逻辑移至专用验证器类,使 order 类能够专注于业务逻辑。

3.视图/模板分离

// bad - mixed html and logicclass productpage {    public function show($id) {        $product = $this->getproduct($id);        echo "

{$product->name}

"; echo "

price: ${$product->price}

"; }}// good - separated presentationclass productcontroller { public function show($id) { $product = $this->productrepository->find($id); return $this->view->render('product/show', ['product' => $product]); }}// product/show.php template

name) ?>

price: $price) ?>

爱克网络企业网站建设系统 No.090730
爱克网络企业网站建设系统 No.090730

系统特点:功能简洁实用。目前互联网上最简洁的企业网站建设系统!原创程序代码。非网络一般下载后修改的代码。更安全。速度快!界面模版分离。原创的分离思路,完全不同于其他方式,不一样的简单感受!搜索引擎优化。做了基础的seo优化。对搜索引擎更友好系统功能关于我们:介绍企业介绍类信息,可自由添加多个介绍栏目!资讯中心:公司或行业资讯类内容展示。可自由添加多个资讯内容!产品展示:支持类别设置,可添加产品图片

爱克网络企业网站建设系统 No.090730 0
查看详情 爱克网络企业网站建设系统 No.090730

这个很好的例子将显示逻辑分离到模板中,使代码更易于维护,并允许设计人员独立工作。

4. 服务层分离

// bad - mixed business logicclass ordercontroller {    public function checkout() {        $order = new order($_post['items']);        $payment = new payment($_post['card']);        $payment->process();        $order->updatestatus('paid');        $email = new emailservice();        $email->sendconfirmation($order);    }}// good - separated servicesclass orderservice {    private paymentservice $paymentservice;    private emailservice $emailservice;    public function processorder(order $order, paymentdata $paymentdata): void {        $this->paymentservice->process($paymentdata);        $order->updatestatus('paid');        $this->emailservice->sendconfirmation($order);    }}class ordercontroller {    public function checkout() {        $this->orderservice->processorder($order, $paymentdata);    }}

服务层处理复杂的业务逻辑,使控制器专注于请求处理。

5、配置分离

// Bad - Hardcoded configurationclass EmailSender {    private $host = 'smtp.example.com';    private $port = 587;    public function send($message) {        // Sending logic using hardcoded values    }}// Good - Separated configuration// config/mail.phpreturn [    'host' => 'smtp.example.com',    'port' => 587];class EmailSender {    private array $config;    public function __construct(array $config) {        $this->config = $config;    }    public function send($message) {        // Sending logic using config values    }}

配置与实现分离,使代码更加灵活和可维护。无需修改代码即可更改设置。

以上就是关注点分离 (SoC)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1251885.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月9日 23:32:01
下一篇 2025年12月9日 23:32:13

相关推荐

  • 最小惊讶原则(POLA)

    关键概念 1. 一致的方法命名 // bad – inconsistent namingclass usermanager { public function getuser($id) { /* … */ } public function fetchrole($id) { /* … */ …

    好文分享 2025年12月9日
    000
  • 将数据更新到 MySQL 数据库

    通过 PHP 函数 mysql_query 执行 SQL UPDATE 语句,可以将数据更新到 MySQL 表中。下面是一个将记录更新到员工表中的简单示例。要更新任何表中的记录,需要使用条件子句来定位该记录。下面的示例使用主键来匹配员工表中的记录。 示例 尝试以下示例来了解更新操作。您需要提供员工 …

    2025年12月9日
    000
  • php 如何刷新更改字段值

    在 PHP 中刷新更新字段值的步骤:打开数据库连接。准备更新查询。绑定参数。执行查询。刷新缓存。 如何使用 PHP 刷新更改的字段值 在 PHP 中,可以通过以下步骤刷新数据库中更改的字段值: 1. 打开数据库连接 $conn = new mysqli(‘host’, ‘username’, ‘pa…

    2025年12月9日
    000
  • Dockerize 您的 PHP 和 MySQL 应用程序:多容器应用程序分步指南

    在现代软件开发领域,容器化已成为高效部署和可扩展性的基石。 docker 可以轻松地将应用程序及其依赖项打包到可移植容器中。在本博客中,我们将引导您使用 docker compose 创建多容器 php 和 mysql 应用程序。 为什么对 php 和 mysql 使用 docker? 一致性:在开…

    2025年12月9日
    000
  • Dockerize CodeIgniter 分步指南

    在这篇博文中,我们将介绍如何对 codeigniter 3 应用程序进行 docker 化。在本指南结束时,您将拥有一个使用 apache、php 和 mysql 运行的容器化应用程序,所有这些都通过 docker compose 进行管理。这种方法将简化您的开发环境并确保跨多个系统的设置一致。 先…

    2025年12月9日
    000
  • 单例理论 - PHP

    单例设计模式确保应用程序在运行时仅创建 1 个对象。 如果应用程序中需要多次使用同一个对象,我们可以防止它一遍又一遍地创建实例。我们可以通过使用静态和单例设计模式来实现这一点。 如果该对象之前已创建,则通过该对象继续其生命,如果没有,则通过创建新对象来继续其生命。 内存中通过 ram 工作。 建议创…

    2025年12月9日
    000
  • PHP MongoDB 连接

    Php提供了mongodb驱动程序来连接mongoDB数据库。安装完成后,我们就可以使用php.ini来进行数据库操作了。这里,我们使用 Ubuntu 16.04 创建一个示例。该示例包括以下步骤。 1) 安装驱动程序 $ pecl 安装 mongodb   2) 编辑php.ini 文件 它存储在…

    2025年12月9日 好文分享
    000
  • Docker 化一个简单的 PHP 应用程序

    对于寻求跨不同环境的一致性和可移植性的开发人员来说,容器化是游戏规则的改变者。在这篇博文中,我们将介绍一个对简单 php 应用程序进行 docker 化的实际示例。在本指南结束时,您将拥有一个可运行的 docker 容器,为基本的 php 应用程序提供服务。 概述 我们将使用 docker 容器化一…

    2025年12月9日
    000
  • php查询代码怎么写

    PHP 查询代码通过与数据库建立连接、准备查询语句、绑定参数、执行查询、获取结果和关闭连接来检索数据。步骤包括:1. 建立连接;2. 准备查询语句;3. 创建查询句柄;4. 绑定参数(可选);5. 执行查询;6. 获取结果;7. 处理结果;8. 关闭连接。 如何编写 PHP 查询代码 PHP 中的查…

    2025年12月9日
    000
  • 快速失败

    核心原则 故障发生后立即检测并报告,防止无效状态在系统中传播。 1. 输入验证 class userregistration { public function register(array $data): void { // validate all inputs immediately $thi…

    2025年12月9日
    000
  • PHP和SQL数据库:如何实现基于分类的JSON分组输出?

    php sql 如何基于组查询的结果进行 json 分类输出 在本文中,我们将解决如何根据分类对数据库查询结果进行分组并将其输出为 json 的问题。以下是对问题的简要描述: 给定两个数据库表: 分类表 class详情表 detail 目标是根据分类对 detail 表中的记录进行分组,并输出为 j…

    2025年12月9日
    000
  • MySQL存储过程参数错误:如何排查varchar(10)类型参数问题?

    mysql 存储过程参数错误处理 在使用 MySQL 存储过程中遇到参数错误时,可以尝试以下步骤进行排查: 首先,检查存储过程的定义是否存在问题。给出的存储过程定义似乎正确,但是要注意参数 DataName 的类型为 varchar(10),只能接收长度不超过 10 的字符串值。 其次,检查调用存储…

    2025年12月9日
    000
  • SQL分组数据如何生成JSON格式输出?

    分组分类查询输出 json 问题: 如何根据 sql 中分组后的数据生成 json 输出?本文将以一个实际示例展示如何实现这一操作。 假设数据库结构: 分类表(class): cid(主键)cname(分类名称) 详情表(detail): did(主键)cid(分类 id)simplew(简单单词)…

    2025年12月9日
    000
  • MySQL存储过程参数报错“Unknown column in ‘field list’”是什么原因?

    mysql 存储过程参数报错:”unknown column in ‘field list” 问题: 执行 mysql 存储过程时,遇到错误提示 ”unknown column in ‘field list”。存储过程如下: c…

    2025年12月9日
    000
  • UniApp每日签到功能如何结合PHP后端实现?

    如何用uniapp实现每日签到功能 使用uniapp 结合 php 后端,我们可以实现每日签到功能。该功能可用于奖励用户每日访问您的应用或网站。 后端实现 php 后端负责处理签到的逻辑。对于每个用户,保存一个日期记录,用于跟踪其上次签到时间。当用户签到时,后端会检查此日期记录,如果该日期是当天,则…

    2025年12月9日
    000
  • PHP中如何高效地删除数组中的指定键?

    删除数组中的键 如何在 php 中删除数组中的键? 要从数组中删除一个键,可以使用 unset() 函数。该函数需要键名作为参数。然而,由于您希望保留数组的原始结构,您需要使用该键的引用(&)。 代码示例 立即学习“PHP免费学习笔记(深入)”; $data = [ [ “id” =>…

    2025年12月9日
    000
  • Uniapp每日签到功能如何实现?

    如何在 uniapp 中实现每日签到功能 每日签到功能在应用中很常见,它可以提高用户参与度并建立忠诚度。在 uniapp 中实现此功能涉及到前端和后端的配合。 后端实现:签到记录及积分奖励 后端使用 php,需要实现以下功能: 签到记录:每当用户签到时,为其生成一条记录,其中包含用户 openid、…

    2025年12月9日
    000
  • 如何使用PHP和SQL实现分组查询并以JSON格式输出结果?

    使用 php sql 对数据进行分组查询,并以 json 格式输出结果 问题 如何利用 php sql 对数据库中的数据进行分组查询,并将其输出为 json 格式? 解决方案 立即学习“PHP免费学习笔记(深入)”; 1. 首先,使用 mysqli_query() 方法查询数据库 $querycla…

    2025年12月9日
    000
  • 如何用PHP将SQL分组查询结果(分类表和详情表)输出为JSON格式?

    使用 php 将 sql 分组查询结果分类输出为 json 针对数据库结构中包含分类表和详情表的场景,您希望将查询结果按照分类进行分组,并输出为 json 格式。接下来,我们将提供一种改进的解决方案。 解决方案: 0, ‘msg’ => ‘Ok’, ‘data’ => null];// …

    2025年12月9日
    000
  • Docker PHP容器:非Dockerfile安装event扩展失败如何解决?

    解决 docker php 容器中非 dockerfile 安装 event 扩展加载失败的问题 本文旨在解决在 ubuntu 服务器的 docker 容器中,使用非 dockerfile 方法安装 event 扩展时遇到的加载失败问题。 问题描述 执行以下步骤后,在 docker-php-ext-…

    2025年12月9日
    000

发表回复

登录后才能评论
关注微信