mcpField
L
laravel:iterating-on-code

laravel:iterating-on-code

github.com/jpcaparasAgent 工作流157102 次安装17 周前更新
代码仓库

关于 laravel:iterating-on-code

面向 Laravel 编码工作的迭代指导技能,帮助开发者把模糊反馈转化为具体问题、修正方案和验证步骤。内容覆盖缺陷、遗漏、性能和风格调整,并倡导逐项修改。

主要功能

  1. 01定位具体代码问题
  2. 02解释问题成因并给出修正
  3. 03识别实现中遗漏的环节
  4. 04逐步修改并验证结果
  5. 05参照编码规范调整风格

适用场景

  1. 01修复表单验证规则错误
  2. 02补充订单处理的错误处理
  3. 03优化数据库查询
  4. 04统一方法命名与类型声明

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jpcaparas/superpowers-laravel --skill laravel:iterating-on-code

安装后在 Claude Code 中输入/laravel:iterating-on-code确认已加载。

详细介绍

迭代改进代码

AI 生成的代码很少能一次就完美。有效的迭代能帮你从“接近正确”做到“完全正确”。

不正确的代码

含糊的反馈

“这行不通”

具体的反馈

“验证逻辑不正确:

当前代码:

'email' => 'required|email|unique:users'

问题: 这允许将用户的邮箱更新为另一位用户已使用的邮箱。唯一性规则需要忽略当前用户。

修复:

'email' => [
    'required',
    'email',
    Rule::unique('users')->ignore($this->user()->id)
]

这样用户可以保留自己的邮箱,同时避免与其他用户的邮箱重复。”

为什么有效: 指明具体问题,解释错误原因,并给出正确的解决方案。

不完整的代码

含糊的反馈

“好像少了点什么”

具体的反馈

“OrderService 缺少错误处理:

当前实现:

public function createOrder(array $data): Order
{
    $order = Order::create($data);
    $this->processPayment($order);
    return $order;
}

缺少的内容:

  1. 事务封装(付款和创建订单应作为一个原子操作)
  2. 付款失败处理
  3. 创建订单前验证库存
  4. 成功创建后分发事件

添加:

DB::transaction(function () use ($data) {
    $this->validateInventory($data['items']);
    $order = Order::create($data);
    $this->processPayment($order);
    event(new OrderCreated($order));
    return $order;
});

另外,还要为付款失败添加 try/catch。”

为什么有效: 列出具体缺失项并说明背景,还展示了如何添加这些内容。

需要改进

含糊的反馈

“把它做得更好”

具体的反馈

“优化查询以提升性能:

当前代码:

$products = Product::all()->filter(function ($product) {
    return $product->isActive() && $product->inStock();
});

问题:

  • 将所有产品加载到内存中(数据集较大时效率低)
  • 在 PHP 中而不是数据库中进行筛选
  • 对每个产品调用方法(可能导致 N+1 问题)

优化后:

$products = Product::query()
    ->where('active', true)
    ->where('stock_quantity', '>', 0)
    ->get();

将筛选移至数据库,使用已建立索引的列,避免加载不必要的数据。”

为什么有效: 解释了需要改进的内容及原因,并展示了改进后的版本。

风格问题

含糊的反馈

“遵循我们的风格指南”

具体的反馈

“调整代码以符合我们的编码标准:

当前代码:

public function get_user_orders($userId) {
    return Order::where('user_id', $userId)->get();
}

风格问题:

  1. 方法名应采用 camelCase:getUserOrders
  2. 参数应采用 camelCase:$userId ✓(已经正确)
  3. 缺少返回类型提示
  4. 复杂查询缺少文档块

修正后:

/**
 * Get all orders for a specific user.
 */
public function getUserOrders(int $userId): Collection
{
    return Order::where('user_id', $userId)->get();
}

请参阅我们的风格指南:docs/coding-standards.md”

为什么有效: 指出具体的风格问题,展示修正方式,并引用风格指南。

渐进式验证

不好的做法

“修改验证逻辑,添加错误处理,重构服务,更新测试,并添加日志记录”

好的做法

“让我们一步一步迭代:

第 1 步: 先修复验证问题

'email' => Rule::unique('users')->ignore($this->user()->id)

在继续之前,先确认这能正常工作。”

[确认验证正常后]

“第 2 步: 现在为付款处理添加错误处理

try {
    $this->processPayment($order);
} catch (PaymentException $e) {
    Log::error('Payment failed', ['order' => $order->id]);
    throw new OrderProcessingException('Payment failed', previous: $e);
}

继续之前先测试一下。”

为什么有效: 一次只做一项更改,逐步验证,逐步建立信心。

反馈模式

模式:指出问题 + 解释 + 展示修复方法
"The relationship is incorrect:

**Current:** `return $this->hasMany(Post::class);`

**Problem:** A User has many Posts, but you're defining this in the Post model. This creates a circular relationship.

**Fix:** Move this to the User model, or if you meant Post belongs to User:
```php
// In Post model
public function user(): BelongsTo
{
    return $this->belongsTo(User::class);
}
```"
模式:指出缺失内容 + 解释其重要性 + 说明如何添加
"Missing authorization check:

**Why it matters:** Any authenticated user can delete any order, not just their own.

**Add this to OrderController@destroy:**
```php
$this->authorize('delete', $order);

并创建策略方法:

// In OrderPolicy
public function delete(User $user, Order $order): bool
{
    return $user->id === $order->user_id;
}
```"
模式:当前代码 + 问题 + 改进后
"Current implementation has issues:

**Current:**
```php
foreach ($orders as $order) {
    $order->load('items', 'customer', 'shipping');
}

问题:

  • N+1 查询(在循环中加载关联关系)
  • 对大型数据集效率低

改进后:

$orders = Order::with(['items', 'customer', 'shipping'])->get();

通过预加载使用单次查询。”


## Quick Reference

Iterate effectively:
- **Be specific** - Point to exact lines, explain exact problems
- **Show, don't just tell** - Provide corrected code
- **Explain why** - Help the AI understand the reasoning
- **One change at a time** - Validate incrementally
- **Reference standards** - Point to style guides, docs, examples

Specific feedback = better iterations = code that fits your needs.

评论

支持 Markdown