为什么值得把基础设施沉到框架里
开一个新站点的前两个小时,通常不是在写业务,而是在重复接一样的管道:数据库、缓存、日志、认证、接口文档、后台任务。每接一个项目就重来一遍,配置还会慢慢走样。
SmileX 的取舍是:这些一次性能力全部沉到框架,业务侧只保留一行。
SmileXApp.Run<Program>(args);
需要追加自己的服务与端点时,再换成显式的三段式写法。
单向分层
依赖方向是单向且不可逆的:
SmileX.Abstractions只放契约,零依赖,接口与 DTO 都在这里。SmileX.Core放异常体系、扩展方法与 Redis 常用操作。SmileX.Data负责 SqlSugar 接入、实体基类与仓储基类。SmileX.Api把上面几层拼成可以直接跑的 Web 框架。
应用层只能引用 SmileX.Api,框架层永远不反向引用应用层。这条线守住之后,框架才能被多个站点复用而不被某一个站点绑架。
默认值优先,而不是配置优先
框架的默认配置刻意选了本机就能跑起来的组合:SQLite 落文件、缓存与后台任务共用一个 Redis 地址、日志同时写文件与控制台。空配置即可启动,是刻意的设计目标。
需要覆盖时,优先级从低到高依次是:内置默认值、appsettings、用户机密、环境变量、命令行、代码回调。越靠后越接近部署现场,也越容易被临时调整。
哪些东西没有开关
控制器、静态文件、全局异常处理、链路追踪、健康检查、Swagger、Hangfire,这些一律常驻,不提供关闭开关。少一个开关,就少一种只有某个环境才会出现的状态。
真正需要按环境区分的,反而是那些看起来最基础的东西:HTTPS 跳转交给业务站点自己决定,后台界面在生产环境强制要求配置账号密码。
小结
框架的价值不在于功能多,而在于把「每个项目都要做一遍」的事情变成「一次都不用做」。剩下的精力,留给真正的业务。
评论 0
还没有评论,来聊聊你的看法。