C# 如何使用存储库模式连接点?
我在谷歌上搜索了太多关于这个模式的内容,我想我自己也弄糊涂了,所以非常感谢您的意见 如果我有一个用于我的小型应用程序的数据库,这将描述它:C# 如何使用存储库模式连接点?,c#,domain-driven-design,ddd-repositories,C#,Domain Driven Design,Ddd Repositories,我在谷歌上搜索了太多关于这个模式的内容,我想我自己也弄糊涂了,所以非常感谢您的意见 如果我有一个用于我的小型应用程序的数据库,这将描述它: 公司 名字 地址 模板文件路径 系 名字 地址 报告编号 意外事故 报告编号 位置 驾驶员姓氏 日期 基本上,我已经编写了一些将我的模型对象序列化和反序列化为JSON的代码,但代码凌乱且紧密耦合。我想基本上抽象这一点,所以当我决定以后使用DB时,随着应用程序的增长,切换它将相对容易 现在,如果我要创建存储库(我假设它不是一个存储库),那么方法
- 公司
- 名字
- 地址
- 模板文件路径
- 系
- 名字
- 地址
- 报告编号
- 意外事故
- 报告编号
- 位置
- 驾驶员姓氏
- 日期
i假设
添加(T实体)
删除(T实体)
更新(T实体)
ICCustomerRepository:IRepository
GetAllCustomers()
GetCustomerByName(字符串名称)
IDepartmentRepository:IRepository
GetAllDepartments()
GetDepartmentByName(字符串名称)
从我所读到的内容来看,存储库只是实际存储的包装。就像我使用SQLite一样,我将在存储库中建立连接,我的常规代码只处理客户和部门类,不知道SQL连接或反序列化是如何进行的,只知道存储库。从设计角度看,它看起来还可以。在基本接口(例如,Insert/Delete/Update/GetById)中保留非常通用的方法,在实体特定的接口中保留专门的函数,这是一种相当标准的方法 简单地说,我想说的是,重要的一点是,客户不需要知道除了界面以外的任何东西,所以只需要让您的界面尽可能清晰即可。设置接口后,您可以选择完全独立于客户机来停止存储库实现。一些想法:
通常不在存储库级别处理,因为您通常希望一次将更改保存在整个实体图中,而不是一个实体图中。处理这一问题的一种常见方法是通过应用程序服务/用例级别的工作单元,这反过来可能会利用ORM的变更跟踪程序Update()
- 是的,如果您想将不同的存储库实现注入到它们的使用者中,您将需要接口,例如测试中的模拟存储库
- 我喜欢做的是采用需求驱动的方法,而不是试图预先确定接口的层次结构。换句话说,在发现需要时创建存储库接口——当您意识到需要与模拟存储库对话时,可能是在单元测试中,也可能是在编写生产代码时。客户机代码使用存储库的方式将塑造您的接口,您将保证这些接口中的每一个都是有原因的