乐于分享
好东西不私藏

《敏捷软件开发:原则、模式与实践》知识体系整理

《敏捷软件开发:原则、模式与实践》知识体系整理

按照 What-Why-How 结构重新组织


第一部分:WHAT(是什么)


一、敏捷开发是什么

1.1 敏捷宣言(2001年)

左项(优先)
右项(有价值)
人和交互重于
过程和工具
可以工作的软件重于
面面俱到的文档
客户合作重于
合同谈判
随时应对变化重于
遵循计划

1.2 敏捷十二条原则

  1. 最优先的是通过尽早、持续交付有价值的软件满足客户
  2. 欢迎需求变化,即使在开发后期
  3. 经常交付可工作的软件,间隔越短越好
  4. 业务人员和开发人员必须天天在一起工作
  5. 围绕被激励的个人构建项目,提供环境和支持,信任他们
  6. 面对面交谈是最高效的团队信息传递方式
  7. 可工作的软件是进度的主要度量标准
  8. 敏捷过程倡导可持续的开发速度
  9. 追求技术卓越和良好设计
  10. 简洁:最大化工作量的艺术是减少工作量
  11. 自组织团队产生最好的架构和设计
  12. 团队定期反思如何更高效,调整行为

1.3 极限编程(XP)四大价值观

  1. 沟通(Communication) - 团队成员、项目与客户间的紧密沟通
  2. 简单性(Simplicity) - 只做当前需要的事,不过度设计
  3. 反馈(Feedback) - 持续获取反馈,快速调整
  4. 勇气(Courage) - 勇于重构、勇于接受变化

1.4 XP十二项核心实践

实践
说明
完整团队
所有角色(开发、测试、业务人员)一起工作
用户故事
客户表达的简短需求描述
短交付周期
每两周交付一次可工作的软件
验收测试
客户编写,验证系统功能
结对编程
两人并排编程,互相review
测试驱动开发
先写测试,再写代码
集体所有权
任何人都可以改进任何代码
持续集成
代码始终保持可发布状态
可持续的开发速度
反对加班,保持稳定节奏
开放的工作空间
团队成员坐得近,便于沟通
计划游戏
业务决策和技术决策分离
重构
持续小步改进代码结构

二、设计原则是什么

2.1 SOLID五大原则

字母
原则
全称
核心思想
S
SRP
单一职责原则
一个类应该只有一个发生变化的原因
O
OCP
开放-封闭原则
对扩展开放,对修改封闭
L
LSP
里氏替换原则
子类必须能够替换基类
I
ISP
接口隔离原则
客户端不应该被迫依赖不使用的方法
D
DIP
依赖倒置原则
依赖抽象,不依赖具体

2.2 包的设计原则

原则
全称
关注点
REP
重用-发布等价原则
发布的最小单位 = 重用的最小单位
CRP
共同重用原则
重用一个类 = 重用整个包
CNP
共同封闭原则
一起变化的类放在一起
ADP
无环依赖原则
依赖关系图中不能出现环
SDP
稳定依赖原则
依赖应该指向稳定的方向
SAP
稳定抽象等价原则
稳定的包应该是抽象的

2.3 设计的臭味(腐化症状)

臭味
定义
表现
僵化性
设计难以改变
单一改动引发连锁反应
脆弱性
设计易于遭到破坏
一个改动破坏多个地方
牢固性
设计难以重用
好东西无法从系统中分离
粘滞性
难以做正确的事
破坏性改动比建设性改动更容易
不必要的复杂性
过分设计
过多为可能的变化做准备
不必要的重复
滥用复制粘贴
重复代码忽视抽象
晦涩性
混乱的表达
代码难以理解

三、设计模式是什么

3.1 创建型模式

模式
目的
核心机制
Factory
对象创建与使用分离
工厂创建对象
Singleton
控制实例数量
私有构造函数
Monostate
强制行为单一性
共享静态变量

3.2 结构型模式

模式
目的
核心机制
Composite
统一处理单个和组合对象
树形结构
Adapter
接口转换
适配不兼容接口
Bridge
分离抽象与实现
两个独立变化维度
Facade
简化复杂子系统接口
统一入口
Proxy
控制对象访问
替身或占位符

3.3 行为型模式

模式
目的
核心机制
Command
封装请求为对象
请求即对象
Observer
一对多通知
订阅-发布
Strategy
算法可替换
委托
State
状态影响行为
状态对象
Visitor
操作与数据结构分离
双重分派
Template Method
算法骨架 + 钩子方法
继承
Mediator
解耦对象交互
中介者协调
Null Object
替代null
空实现
Active Object
异步执行
解耦调用和执行

第二部分:WHY(为什么)


一、为什么需要敏捷开发

1.1 传统开发的困境

问题
表现
文档驱动
大量时间花在写文档上,软件却不能工作
计划僵化
一旦计划确定就无法适应变化
客户隔离
客户在合同谈判后才参与,开发出来的不是客户想要的
开发速度不可持续
加班冲刺,后期质量崩溃

1.2 敏捷开发要解决的问题

┌─────────────────────────────────────────┐│            敏捷开发的核心目标              │├─────────────────────────────────────────┤│  1. 更快交付可工作的软件                   ││  2. 更好地响应需求变化                     ││  3. 让客户真正参与到开发中                 ││  4. 保持可持续的开发速度                   │└─────────────────────────────────────────┘

二、为什么需要设计原则

2.1 代码为什么会腐化

"软件项目中需求是持续变化的,如果软件设计由于需求变化而退化,那我们就不是敏捷的。"

两大原因:

  1. 需求没有按照设计预见的方式进行变化
  2. 改动急迫且违反了原来的设计

2.2 设计原则的作用

作用
说明
诊断
告诉我们代码哪里有问题(设计的臭味)
治疗
指导我们如何修复(遵循SOLID原则)
预防
帮助我们写出一开始就不容易腐化的代码

2.3 核心洞见

"唯一能够加快进度的方法便是缩减范围。不要经受不住诱惑盲目冲刺。"

"在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误。"

"只承担一次变化造成的改动代价,但不允许下一次变化带来更多的代价。"


三、为什么需要设计模式

3.1 什么是设计模式

"通过对设计概念的封装,解除了系统与逻辑、互联关系、设备之间的耦合。" —— COMMAND模式定义

设计模式是经过验证的最佳实践解决方案。

3.2 为什么要用设计模式

原因
说明
避免重复造轮子
常见问题已经有成熟解决方案
沟通便利
说"使用Observer模式"比解释一堆设计细节更简洁
代码更健康
遵循设计原则,符合OCP等要求
易于维护
其他开发者更容易理解模式化的代码

3.3 模式不是万能药

"没有遇到变化的时候,就用模式,当然会变得臃肿了。" —— YAGNI

"术语'IS-A'的含义过于宽泛以至于不能作为子类型的定义。子类型的正确定义是'可替换性的'。"


四、三者的关系(核心串联)

4.1 敏捷开发的核心公式

敏捷开发人员知道要做什么,是因为:1. 遵循敏捷实践去发现问题      ← HOW(怎么做)2. 应用设计原则去诊断问题       ← WHY(为什么有问题)3. 应用适当的设计模式去解决问题  ← WHAT(具体用什么)软件开发的这三个方面的相互作用就是设计。

4.2 三者关系图

┌─────────────────────────────────────────────────────────────┐│                        软件开发                              │├─────────────────────────────────────────────────────────────┤│                                                             ││   ┌─────────────────────────────────────────────────────┐   ││   │                  敏捷实践(HOW)                    │   ││   │         测试驱动开发 → 发现问题                      │   ││   │         持续重构 → 保持代码健康                      │   ││   │         结对编程 → 代码审查                          │   ││   └─────────────────────────────────────────────────────┘   ││                          ↓ 诊断                              ││   ┌─────────────────────────────────────────────────────┐   ││   │                 设计原则(WHY)                     │   ││   │            SOLID → 判断代码哪里不对                 │   ││   │        SRP/OCP/LSP/DIP/ISP → 具体原则               │   ││   └─────────────────────────────────────────────────────┘   ││                          ↓ 治疗                              ││   ┌─────────────────────────────────────────────────────┐   ││   │                 设计模式(WHAT)                    │   ││   │         具体的、可复用的解决方案                      │   ││   │      Strategy/Observer/Factory/Command/...           │   ││   └─────────────────────────────────────────────────────┘   ││                                                             │└─────────────────────────────────────────────────────────────┘

4.3 类比理解

类比
说明
体检
敏捷实践(测试、重构)= 定期体检,发现问题
验血报告
设计原则(SOLID)= 验血报告,诊断哪里有病
处方药
设计模式 = 处方药,具体怎么治疗

第三部分:HOW(怎么用)


一、敏捷实践怎么用

1.1 测试驱动开发(TDD)

红-绿-重构循环:

编写失败测试 (红)       ↓编写刚好通过的代码 (绿)       ↓     运行测试       ↓   ├── 失败 → 修复代码   │   └── 通过 → 重构?            │            ├── 否 → 编写下一个测试            │            └── 是 → 重构代码                  │                  ▼                运行测试 → 继续

TDD的三大好处:

  1. 功能验证 - 每一项功能都有测试验证
  2. 设计思考 - 从调用者角度思考接口
  3. 解耦 - 迫使我们把程序设计为可测试的

1.2 重构

定义: 在不改变软件可观察行为的前提下,改善其内部结构

时机: 持续重构,而非等到代码"太烂"才重构

常见重构手法:

手法
示例
提取函数
把功能代码提取为新函数
重新命名
给变量和函数起有意义的名字
简化条件表达式
把复杂条件提取为有意义的函数
提取常量
把魔法数字定义为常量

1.3 简单设计

YAGNI原则: You Aren't Gonna Need It - 你不需要它

DRY原则: Don't Repeat Yourself - 不要重复


二、设计原则怎么用

2.1 应用场景速查

问题症状
对应原则
一个类有多个变化原因
SRP(单一职责)
扩展需要修改原有代码
OCP(开放封闭)
子类不能替换基类
LSP(里氏替换)
依赖了不该依赖的类
DIP(依赖倒置)
接口包含不需要的方法
ISP(接口隔离)

2.2 SOLID原则速记口诀

S - 单一职责:一个类做一件事O - 开放封闭:扩展不难,修改不行L - 里氏替换:子类能顶替父类I - 接口隔离:接口要小而专D - 依赖倒置:依赖抽象不依赖具体

2.3 设计检查清单

问题
检查项
SRP
这个类只有一个变化原因吗?
OCP
添加新功能需要修改现有代码吗?
LSP
子类可以替换基类吗?子类行为是否一致?
DIP
依赖是否终止于抽象?是否依赖具体类?
ISP
接口是否内聚?客户端是否被迫实现不需要的方法?

三、设计模式怎么用

3.1 模式选择指南

需要封装请求? → COMMAND需要异步执行? → ACTIVE OBJECT需要算法骨架不变,步骤变化? → TEMPLATE METHOD需要算法需要切换? → STRATEGY需要简化复杂接口? → FACADE需要对象解耦? → MEDIATOR需要控制实例数量? → SINGLETON需要替代null? → NULL OBJECT需要统一单个和组合对象? → COMPOSITE需要一对多通知? → OBSERVER需要接口转换? → ADAPTER需要分离抽象与实现? → BRIDGE需要控制访问? → PROXY需要数据结构稳定,添加新操作? → VISITOR需要状态影响行为? → STATE

3.2 模式对比

困惑
结论
Template Method vs Strategy
继承 vs 委托;需要动态切换选Strategy
FACADE vs MEDIATOR
简化接口 vs 解耦对象;门面是被动的
STATE vs STRATEGY
状态转换 vs 算法替换;状态有转换关系
Singleton vs Monostate
结构单一性 vs 行为单一性

3.3 模式应用决策树

需要模式吗?    │    ├── 变化还没有发生? → YAGNI,不要用模式    │    └── 确实需要模式?            │            ├── 封装请求? → COMMAND            ├── 异步执行? → ACTIVE OBJECT            ├── 算法骨架固定,步骤变化? → TEMPLATE METHOD            ├── 算法需要切换? → STRATEGY            ├── 简化复杂接口? → FACADE            ├── 对象耦合严重? → MEDIATOR            ├── 控制实例数量? → SINGLETON            ├── 替代null? → NULL OBJECT            ├── 树形结构? → COMPOSITE            ├── 一对多通知? → OBSERVER            ├── 接口转换? → ADAPTER            ├── 分离抽象与实现? → BRIDGE            ├── 控制访问? → PROXY            ├── 数据结构稳定,添加新操作? → VISITOR            └── 状态影响行为? → STATE

四、三者如何串联使用(完整示例)

4.1 典型开发流程

需求来了    ↓【敏捷实践 - HOW】  用TDD先写测试    ↓  写最简单的代码让测试通过    ↓  发现代码有问题(测试变得难写/代码僵硬)    ↓【设计原则 - WHY】  诊断:违反了什么原则?    - 代码僵化 → 违反SRP    - 需要扩展就改代码 → 违反OCP    - 依赖了具体类 → 违反DIP    ↓【设计模式 - WHAT】  应用合适的模式解决问题    - 需要动态算法 → Strategy模式    - 需要对象创建分离 → Factory模式    - 需要一对多通知 → Observer模式    ↓【敏捷实践 - HOW】  重构代码应用模式  运行测试保证行为不变    ↓  继续下一个功能

4.2 案例:薪水支付系统

问题: 需要支持不同类型的员工(钟点工、月薪、销售)和不同的支付方式

应用SOLID原则:

原则
应用
SRP
PaymentClassification(支付)/ Schedule(日程)/ Method(方式)分离
OCP
添加新员工类型不修改原有代码
DIP
Employee依赖抽象的PaymentClassification
LSP
所有PaymentClassification可以互相替换

应用设计模式:

模式
应用
Strategy
PaymentClassification - 支付策略
Command
Transaction - 事务操作
Factory
EmployeeFactory - 创建雇员
Null Object
NoAffiliation - 无协会成员

第四部分:知识全景图


一、敏捷开发知识体系

┌─────────────────────────────────────────────────────────────┐│                      敏捷开发知识体系                         │├─────────────────────────────────────────────────────────────┤│                                                             ││  ┌───────────────────────────────────────────────────────┐  ││  │                     价值观层                           │  ││  │         敏捷宣言四条核心价值观                          │  ││  └───────────────────────────────────────────────────────┘  ││                          ↓                                  ││  ┌───────────────────────────────────────────────────────┐  ││  │                     原则层                             │  ││  │         敏捷十二条原则 + SOLID五大原则                  │  ││  └───────────────────────────────────────────────────────┘  ││                          ↓                                  ││  ┌───────────────────────────────────────────────────────┐  ││  │                     实践层                             │  ││  │      XP实践 + 设计模式 + 重构 + 测试                    │  ││  └───────────────────────────────────────────────────────┘  ││                                                             │└─────────────────────────────────────────────────────────────┘

二、设计原则关系图

                      SRP                        △                       ╱  ╲                      ╱    ╲                     ╱      ╲           LSP ─────┤        ├──── OCP                     ╲      ╱                      ╲    ╱                       ╲  ╱                        ▼                       DIP                        │                        │                       ISP

关系说明:

  • SRP 和 OCP 是其他原则的基础
  • LSP 是 OCP 得以实现的主要手段
  • DIP 告诉我们如何依赖抽象
  • ISP 是接口级别的 SRP

三、GoF 23种模式分类

类型
模式数量
包含模式
创建型
5
Factory, Singleton, Monostate, Builder, Prototype
结构型
7
Composite, Adapter, Bridge, Facade, Proxy, Decorator, Flyweight
行为型
11
Command, Observer, Strategy, State, Visitor, Template Method, Mediator, Iterator, Chain of Responsibility, Memento, Interpreter

附录


附录一:关键洞见汇总

"唯一能够加快进度的方法便是缩减范围。不要经受不住诱惑盲目冲刺。"

"敏捷开发人员知道要做什么,是因为:遵循敏捷实践去发现问题,应用设计原则去诊断问题,应用适当的设计模式去解决问题。"

"软件项目中需求是持续变化的,如果软件设计由于需求变化而退化,那我们就不是敏捷的。"

"不存在完美的结构。只存在那些试图去平衡当前的代价和收益的结构。"

"最好的架构、需求和设计出自于自组织的团队。"

"没有遇到变化的时候,就用模式,当然会变得臃肿了。"

"模式不是万能药。"


附录二:知识起源

知识
起源
敏捷宣言/敏捷原则
2001年,17位软件专家在犹他州雪鸟
极限编程(XP)
Kent Beck,1996年
SOLID原则
Robert C. Martin(Bob大叔)
设计模式(GoF 23种)
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides,1994年
里氏替换原则(LSP)
Barbara Liskov,1987年
本书
Robert C. Martin,系统整合以上知识

附录三:推荐学习路径

第一阶段:理解概念  ↓  敏捷价值观和原则 → 什么是敏捷,为什么需要敏捷  ↓第二阶段:掌握实践  ↓  TDD → 重构 → 简单设计 → 如何做  ↓第三阶段:学习原则  ↓  SOLID五大原则 → 如何诊断代码问题  ↓第四阶段:学习模式  ↓  GoF 23种模式 → 如何解决具体设计问题  ↓第五阶段:串联使用  ↓  在实际项目中体会三者的结合

作者:哀的代码实验室

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-10 08:50:19 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/508201.html
  2. 运行时间 : 0.387469s [ 吞吐率:2.58req/s ] 内存消耗:4,744.22kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=9a6b4f0313d0818dea7611d5d6290cfa
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.80 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001240s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001878s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.018099s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.040688s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001567s ]
  6. SELECT * FROM `set` [ RunTime:0.002666s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001607s ]
  8. SELECT * FROM `article` WHERE `id` = 508201 LIMIT 1 [ RunTime:0.023885s ]
  9. UPDATE `article` SET `lasttime` = 1775782219 WHERE `id` = 508201 [ RunTime:0.026519s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000731s ]
  11. SELECT * FROM `article` WHERE `id` < 508201 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001249s ]
  12. SELECT * FROM `article` WHERE `id` > 508201 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.011101s ]
  13. SELECT * FROM `article` WHERE `id` < 508201 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.016611s ]
  14. SELECT * FROM `article` WHERE `id` < 508201 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.007947s ]
  15. SELECT * FROM `article` WHERE `id` < 508201 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.026436s ]
0.389267s