我有一个控制器,它接收一个对象。这个对象代表文档,这个文档可以是某种文档类型之一。
根据文档类型,我应该将其保存到特定的存储库。
例如:
有三种文件类型:ImageDocument
,ArticleDocument
和VideoDocument
。
如果控制器接收到ImageDocument
,则应将其保存到ImageDocumentRepository
中,如果控制器接收到ArticleDocument
,则应将其保存到ArticleDocumentRepository
中,以此类推
哪种方式是实现这一逻辑的最佳方式?
我不想自动连接所有的存储库,并创建switch case或if else语句,但没有其他想法
它应该只使用java实现
2条答案
按热度按时间uajslkp61#
由于只有3种类型的文档和3个存储库,最简单的方法可能是创建一个
DocumentPersistenceService
,在内部注入3个存储库。然后,您可以使用简单的
instance of
检查来根据类型调用正确的存储库。如果你想让它更具可伸缩性,比如说100个文档类型,你可以选择一个稍微复杂一点的配置,在这个配置中,你有一个从类到其相应存储库的
Map
。因此,在
DocumentPersistenceService
的构造函数中,您可以使用SpringApplicationContext.getBean()
方法按名称获取每个存储库(使用您的约定,对于ImageDocument
,您将执行getBean("ImageDocumentRepository")
,然后使用您获得的bean(假设它不是null
)在您的map中添加从ImageDocument.class
到您获得的ImageDocumentRepository
引用的条目。当
DocumentPersistenceService
接收到要保存的文档时,它可以根据文档的类别从Map
中查找相应的存储库。文档列表实际上可以通过配置提供,因此您不必硬编码任何内容,并且可以根据需要扩展到任意数量。lmvvr0a82#
一般来说,在控制器中没有任何逻辑是一个很好的做法。所以在这个任务中,我会创建一些
DocumentService
,其中有另外三个(将来你可以添加更多)存储库。在这个服务中,你可以选择你想要保存文档的存储库