四层架构

本文详细介绍 YXShop 四层架构中每一层的职责和代码规范。

Controller 层

Controller 是请求入口,负责接收 HTTP 请求、参数校验、调用 Service 处理业务逻辑、返回响应。

php
class ItemController extends BaseAdminController
{
    public function __construct(
        private readonly ItemService $itemService
    ) {}

    public function list(Request $request): Response
    {
        $params = $request->all();
        $result = $this->itemService->getList($params);
        return $this->success($result);
    }
}

Service 层

Service 是业务逻辑编排层,调用 Repository 完成业务用例。

php
class ItemService
{
    public function __construct(
        private readonly ItemRepository $itemRepo,
        private readonly SkuRepository $skuRepo
    ) {}

    public function create(array $data): Item
    {
        $item = $this->itemRepo->create($data);
        foreach ($data['skus'] as $skuData) {
            $this->skuRepo->create(array_merge(
                $skuData, ['item_id' => $item->id]
            ));
        }
        return $item;
    }
}

Repository 层

Repository 封装 Model 查询,隔离数据访问细节。

php
class ItemRepository extends BaseRepository
{
    public function __construct(Item $model)
    {
        parent::__construct($model);
    }

    public function getListWithRelations(array $params): array
    {
        $query = $this->model->with(['category', 'skus']);
        if (!empty($params['keyword'])) {
            $query->where('name', 'like', "%{$params['keyword']}%");
        }
        return $query->paginate($params['limit'] ?? 15);
    }
}

Model 层

Model 使用 Laravel Eloquent ORM,仅定义表结构、字段映射和关系。

php
class Item extends BaseModel
{
    protected $table = 'item';
    protected $fillable = ['name', 'category_id', 'price', 'status'];

    public function category(): BelongsTo
    {
        return $this->belongsTo(Category::class, 'category_id');
    }

    public function skus(): HasMany
    {
        return $this->hasMany(ItemSku::class, 'item_id');
    }
}