TGViewer
开发者工具箱|编程·开发工具·资源 开发者工具箱|编程·开发工具·资源 @devtoolboxhub · 780 subscribers
Post #1666 6
完整示例:用仓库模式与依赖注入实现 SOLID

Repository Pattern 把所有与数据源(数据库、API、文件等)的交互封装进单一类,业务层只面对简洁的接口,就像图书馆的管理员负责取书,访客只需提出请求。代码中通过 IBookRepository 定义获取、查询、预订等操作,由 BookRepository 实现具体的数据访问。

Dependency Inversion Principle(DIP)要求高层模块依赖抽象而非具体实现,本文把业务类 BookReservationService 的构造函数参数声明为 IBookRepository 与 INotificationSender 接口。依赖注入(DI)则是把具体实现(BookRepository、EmailNotificationSender、SmsNotificationSender)在容器注册后自动注入,完成 DIP 的落地。

在示例里,单一职责体现在每个类只承担数据访问、业务规则或通知发送一种职责;开放/封闭体现在新增 SmsNotificationSender 时无需修改业务代码;里氏替换保证任意实现 INotificationSender 都可直接使用;接口隔离让 INotificationSender 只保留 SendAsync 一个方法,避免臃肿。

通过这套完整的图书预订系统,开发者可以直观看到 SOLID 五大原则在实际代码中的具体体现,并快速在自己的项目中复用相同的结构。


GitHub: GitHub

#开发者 #工具 #SOLID #RepositoryPattern #DependencyInjection #CSharp #DotNet
@DevToolboxHub
More from @devtoolboxhub
  1. Sep 26, 2026PostgreSQL 复制槽上限参数 max_replication_slots 解析 max_replication_slots 决定共享内存中复制槽数组的长度,仅此而已。它不决…
  2. Sep 26, 2026五仓库架构踩坑:Gitlink 与双 CI Flude 团队复盘了多仓库架构的实践代价。项目从第一分钟起就选择拆分成独立仓库,Pipeline、engine、design-docs…
  3. Sep 26, 2026Xeno Core:TypeScript 后端架构框架 Node.js 复杂系统的架构选型往往决定代码的长期命运。开发者常在两条路之间纠结:要么依赖重度使用实验性装饰器和反射(如…
  4. Sep 25, 2026用 SLO 给 AI Agent 的行为定个预算 Grafana Labs 提出把可靠性工程里的错误预算(error budget)思路用到 AI Agent 上。延迟、token…
  5. Sep 25, 2026Xcode 27.2 改用 JSON 项目格式 Xcode 27.2 用基于 JSON 的 project.xcproj 取代了沿用多年的 project.pbxproj。新建项目…
  6. Sep 25, 2026PostgreSQL 的 max_prepared_transactions 该不该开 prepared transaction 是脱离会话独立存在的两阶段提交事务。执行 PREP…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →