好的技术架构,决定了系统的天花板
选电商系统,不能只看功能清单。功能可以加,但架构改不了。一个设计糟糕的系统,后期每加一个功能都像在补窟窿,最终变成难以维护的"屎山"。
InnoShop 从第一天就采用了模块化 + 插件化的架构设计,这在开源电商系统中是比较领先的。今天从技术角度拆解给你看。
一、核心架构:Innopacks 模块化系统
InnoShop 没有把所有代码塞在一个目录里,而是按功能拆分成独立的 Innopacks 模块:
- common:共享模型、仓储层、服务层
- front:前台(用户端)控制器、视图、路由
- panel:后台管理面板
- restapi:RESTful API 接口层
- plugin:插件系统核心
- install:安装向导
- enterprise:企业版专属功能
- devtools:开发调试工具
每个模块独立目录、独立路由、独立视图。修改一个模块不影响其他模块,团队协作时不会互相冲突。
二、插件系统:真正的热插拔
InnoShop 的插件系统不是简单的"代码片段",而是一套完整的插件生命周期管理:
插件结构
每个插件是一个独立目录,包含:
Boot.php:插件入口,注册钩子和事件config.json:插件元数据(名称、版本、作者)Routes/:自定义路由Controllers/:控制器Views/:视图模板Migrations/:数据库迁移Lang/:多语言文件
插件能力
一个插件几乎可以做任何事情:
- 添加新的页面和路由
- 扩展后台管理功能
- 修改现有页面布局(通过 Blade 插入机制)
- 添加新的支付/物流方式
- 集成第三方 API
安装和卸载
后台一键安装/启用/禁用/卸载,支持远程安装(从插件市场直接下载)。不需要手动复制文件、不需要改配置文件。
三、Repository 模式:数据层设计
InnoShop 的数据访问层统一使用 Repository 模式:
- 所有数据查询通过 Repository 类(如
ProductRepo、OrderRepo) - Repository 使用单例模式:
ProductRepo::getInstance()->getFrontList($filters) - 控制器不直接操作模型,而是通过 Repository
- 业务逻辑集中在 Repository,方便复用和测试
这意味着:你可以在插件中替换或扩展任何 Repository 方法,而不修改核心代码。升级系统时不会被覆盖。
四、主题引擎:前后端分离设计
InnoShop 的主题系统支持完全自定义前端:
- 主题独立目录,包含自己的 CSS、JS、视图模板
- Laravel Mix 编译前端资源
- 支持多主题切换,每个主题可以有独立的布局和组件
- 主题继承机制:自定义主题可以继承基础主题,只覆盖需要改的部分
前端技术栈是 Bootstrap 5 + Vue 3,开发者熟悉,定制成本低。
五、API 设计:RESTful + Sanctum 认证
InnoShop 提供完整的 RESTful API:
- 前台 API:商品浏览、加购、下单、用户注册登录
- 后台 API:商品管理、订单管理、数据分析
- 认证:Laravel Sanctum Token 认证
- 分页:统一分页格式,支持过滤和排序
API 设计符合 RESTful 规范,方便对接移动端 APP、小程序、第三方系统。
六、多语言架构:从底层支持
很多系统的多语言是"打补丁"式的——主表加个 locale 字段。InnoShop 的多语言是架构级设计:
- 每个可翻译模型有对应的翻译表(如
products+product_translations) - 翻译表独立存储,不影响主表性能
- 使用
TranslatableTrait 统一处理 - 前端根据访客 locale 自动加载对应翻译
这种设计让多语言功能零性能损耗,且支持无限语言扩展。
写在最后
InnoShop 的技术架构不是"够用就行",而是面向长期演进设计的。模块化让团队协作高效,插件系统让功能扩展灵活,Repository 模式让代码可维护。如果你是技术决策者,值得深入了解。
源码完全开放,欢迎在 GitHub 上 Star 和贡献代码。