四层架构
本文详细介绍 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');
}
}