目录就是架构
每个模块都是一个自包含的 Laravel 子应用:
app/Modules/Cms
├── module.json
├── Providers/CmsServiceProvider.php
├── Models
├── Http/Controllers
├── Database/Migrations
├── routes
└── resources/views
模块之间没有 use 对方的模型。需要跨模块可见的内容,通过核心的 ContentHub 登记。
一个最小的模块清单
{
"name": "cms",
"provider": "App\\Modules\\Cms\\Providers\\CmsServiceProvider",
"content_models": ["App\\Modules\\Cms\\Models\\Article"]
}
ModuleRegistryServiceProvider 在启动时读取所有 manifest,注册对应的 ServiceProvider。每个模块自行加载迁移、视图与路由。
内容总线
ContentHub::sync() 是唯一写入统一内容表的地方。模型通过 SyncsContentHub trait 在保存和删除时触发同步,标签也会被归一化后写入 tags 与 content_tag。
这让搜索、标签页、首页推荐和会员主页不需要知道模块内部结构。
模块化的价值不在于目录好看,而在于新增或移除一个业务时,不需要修改其他业务的代码。
评论 0
还没有评论,来留下第一条想法吧。