我正在尝试在存储图片的实例中使用存储库模式。
我所做的是将实际图片保存在磁盘上的目录中,但保存有关图片的数据以及哪些图片与数据库中的哪些对象一起使用。我想知道是否应该使用 2 个接口进行存储,例如IStorePicRepo
和IStorePicDataRepo
或有 1 个接口并在 1 个类中实现它。在我看来,它不应该由同一个类实现,因为我们正在处理 2 种不同的存储机制。
有什么想法吗?
我正在尝试在存储图片的实例中使用存储库模式。
我所做的是将实际图片保存在磁盘上的目录中,但保存有关图片的数据以及哪些图片与数据库中的哪些对象一起使用。我想知道是否应该使用 2 个接口进行存储,例如IStorePicRepo
和IStorePicDataRepo
或有 1 个接口并在 1 个类中实现它。在我看来,它不应该由同一个类实现,因为我们正在处理 2 种不同的存储机制。
有什么想法吗?
这里没有灵丹妙药。
但我可能最终会得到以下设计:
IBinaryDataService:用于将数据一般保存为二进制格式。要保存的对象必须具有帮助将其写入 OutputStream 的方法。也应该有一种方便的方法将其加载到原始对象中。
IDataIndexService:用于数据属性/标签的索引,也有助于搜索。与您描述的图片数据密切对应。
IPicRepo:仅向客户端公开的接口。客户应该使用这个,并且永远不知道上述两个服务。
FileSystemBinaryDataServiceImpl:上面IBinaryDataService的实现。
DbDataIndexServiceImpl:上面IDataIndexService的实现。
PicRepoImpl:上面IPicRepo的实现。使用 spring 注入 FileSystemBinaryDataServiceImpl 和 DbDataIndexServiceImpl 作为依赖项。
如果您愿意,可以进行额外的扩展:
IPersistentModel:可以持久化的对象的表示。有方法 write(OutputStream)、read(inputStream) 和 getAttributes():Map
PicModel:上面IPersistentModel的实现。
PS。这只是一般的高级概述。
我不太了解 Repository 模式,但我不会在我的标识符名称中将 Repository 缩写为 Repo。缩写。迷惑我。