我在这个模式上搜索了太多,我想我自己很困惑,所以你的意见将不胜感激。
如果我的小型应用程序有一个数据库,这将描述它:
- 公司
- 姓名
- 地址
- 模板文件路径
- 部门
- 姓名
- 地址
- 报告编号
- 事故
- 报告编号
- 地点
- 司机姓氏
- 日期
基本上,我已经编写了一些代码,可以将我的模型对象序列化和反序列化为 JSON,但是这些代码是混乱且紧密耦合的。我想基本把这个抽象出来,所以以后决定用DB的时候,随着应用的增长,切换起来会比较容易。
现在,如果我要创建存储库(我假设它不会是一个),方法签名会是什么样子?我会使用任何接口吗?这是我开始做的事情:
IRepository<T>
Add(T Entity)
Delete(T Entity)
Update(T Entity)
ICustomerRepository : IRepository<Customer>
GetAllCustomers()
GetCustomerByName(string name)
IDepartmentRepository : IRepository<Department>
GetAllDepartments()
GetDepartmentByName(string name)
然后我开始想,我不会写 DRY 代码......客户和部门存储库基本上在做同样的事情,唯一的区别是方法名称和存储信息的实际数据库表或文件。我做对了吗?
从我一直在阅读的内容来看,存储库只是您实际存储的包装器。就像我使用 SQLite 一样,我会在存储库中建立连接,而我的常规代码只会处理 Customer 和 Department 类,对 SQL 连接或反序列化的方式一无所知,只知道存储库。