PHP项目架构评审与优化

wen PHP项目 2

PHP项目架构评审与优化指南

架构评审核心维度

分层架构设计

// 反例:业务逻辑混在控制器
class UserController {
    public function register($request) {
        // 验证器逻辑
        // 数据库操作
        // 发送邮件
        // 逻辑混合
    }
}
// 正例:清晰分层
class UserController {
    public function register(RegisterRequest $request) {
        $this->userService->register($request->validated());
        return response()->success();
    }
}
class UserService {
    public function register(array $data) {
        DB::beginTransaction();
        try {
            $user = User::create($data);
            event(new UserRegistered($user));
            DB::commit();
        } catch (\Exception $e) {
            DB::rollBack();
            throw $e;
        }
    }
}

依赖注入与服务容器

// 优化前:Hard-coded依赖
class PaymentService {
    public function process($order) {
        $alipay = new AlipayService();
        $alipay->pay($order->amount);
    }
}
// 优化后:依赖注入
class PaymentService {
    public function __construct(
        private PaymentGatewayInterface $gateway,
        private LoggerInterface $logger
    ) {}
    public function process(Order $order) {
        $this->logger->info('Processing payment', ['order_id' => $order->id]);
        return $this->gateway->charge($order->amount);
    }
}

设计模式应用

  • 策略模式:支付方式、校验规则
  • 观察者模式:事件监听、日志记录
  • 工厂模式:对象创建、类实例化
  • 仓储模式:数据访问抽象

性能优化关键点

数据库优化

// 反例:N+1查询
$users = User::all();
foreach ($users as $user) {
    echo $user->profile->bio; // 每个用户查询一次
}
// 正例:预加载
$users = User::with('profile')->get();
// 索引优化
Schema::table('orders', function ($table) {
    $table->index(['user_id', 'status', 'created_at']);
    $table->index('order_no')->unique();
});

缓存策略

// 多级缓存实现
class ProductService {
    public function getProduct(int $id): Product {
        // L1: 内存缓存
        if ($cached = Cache::tags(['products'])->get("product.{$id}")) {
            return $cached;
        }
        // L2: Redis缓存
        $product = Product::find($id);
        Cache::tags(['products'])->put("product.{$id}", $product, 3600);
        return $product;
    }
}

队列与异步处理

// 耗时操作异步化
class OrderService {
    public function placeOrder(OrderRequest $request) {
        $order = $this->db->transaction(function() use ($request) {
            $order = Order::create($request->validated());
            OrderItem::insert($request->items);
            return $order;
        });
        // 异步任务
        dispatch(new SendOrderConfirmation($order));
        dispatch(new UpdateInventory($order))->onQueue('inventory');
        return $order;
    }
}

安全性评审

输入验证

// 使用自定义验证规则
Validator::extend('phone', function ($attribute, $value, $parameters, $validator) {
    return preg_match('/^1[3-9]\d{9}$/', $value);
});
// 请求模型验证
class CreateUserRequest extends FormRequest {
    public function rules() {
        return [
            'email' => 'required|email|unique:users,email',
            'password' => 'required|min:8|regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/',
            'role' => 'in:admin,user,guest'
        ];
    }
}

SQL注入防护

// 使用参数绑定
DB::select('SELECT * FROM users WHERE email = ?', [$email]);
// 使用ORM
User::where('email', $email)->first();

XSS与CSRF防护

// 输出转义
{{ $userInput }} // Blade自动转义
// CSRF保护
<form method="POST" action="/profile">
    @csrf
    <!-- 表单内容 -->
</form>

代码质量与可维护性

代码规范

// PSR-4自动加载
// 接口与实现分离
interface UserRepositoryInterface {
    public function find(int $id): ?User;
    public function save(User $user): bool;
}
class UserRepository implements UserRepositoryInterface {
    // 实现
}

错误处理

// 统一的异常处理
class Handler extends ExceptionHandler {
    public function register() {
        $this->reportable(function (NotFoundException $e) {
            Log::warning('Resource not found', ['exception' => $e]);
        });
        $this->renderable(function (ValidationException $e, $request) {
            return response()->json([
                'message' => 'Validation failed',
                'errors' => $e->errors()
            ], 422);
        });
    }
}

架构评审清单

评审项 检查点 权重
分层设计 控制器、服务、仓库职责清晰
依赖管理 使用IoC容器,减少硬编码
数据库设计 索引合理,避免N+1查询
缓存策略 合理使用多级缓存
日志记录 统一日志格式,记录关键操作
安全防护 输入验证、权限控制、加密
测试覆盖 单元测试、集成测试
性能监控 数据库慢查询、API响应时间

优化建议实施路线

第1周:性能优化
- 数据库索引审查与优化
- 缓存策略实施
- 慢查询分析
第2周:代码重构
- 分层架构重构
- 依赖注入实施
- 设计模式应用
第3周:安全性增强
- 输入验证完善
- SQL注入防护
- XSS/CSRF防护
第4周:测试与监控
- 单元测试编写
- 集成测试实施
- 性能监控部署

工具推荐

  • 代码分析:PHPStan, Psalm, PhpMetrics
  • 性能分析:Xdebug, Blackfire, Tideways
  • 数据库优化:MySQLTuner-perl, pt-query-digest
  • 安全扫描:SonarQube, OWASP Dependency Check

实施以上架构评审与优化方案,能显著提升PHP项目的性能、安全性和可维护性,建议根据项目实际情况,制定具体的优化时间表,分阶段实施。

PHP项目架构评审与优化

抱歉,评论功能暂时关闭!