Design patterns 存储库层是否需要在代码的其余部分不依赖于数据库ID?
因此,据我所知,存储库层的整体思想是,您可以快速、轻松地将一个解决方案替换为另一个解决方案。比如说,我想从MySQL切换到MongoDB。我所需要担心的就是编写一个新的存储库层 到目前为止,一切顺利 问题是,MySQL(实际上很可能)将使用整数作为主键,而MongoDB将使用字符串。或者我希望我的存储库层指向一个web服务,谁知道他们使用什么样的ID 因此,为了给我的存储库层提供一个经得起未来考验的接口,我不能使用以下方法:Design patterns 存储库层是否需要在代码的其余部分不依赖于数据库ID?,design-patterns,repository-pattern,Design Patterns,Repository Pattern,因此,据我所知,存储库层的整体思想是,您可以快速、轻松地将一个解决方案替换为另一个解决方案。比如说,我想从MySQL切换到MongoDB。我所需要担心的就是编写一个新的存储库层 到目前为止,一切顺利 问题是,MySQL(实际上很可能)将使用整数作为主键,而MongoDB将使用字符串。或者我希望我的存储库层指向一个web服务,谁知道他们使用什么样的ID 因此,为了给我的存储库层提供一个经得起未来考验的接口,我不能使用以下方法: EmployeeRepository.getById(int id)
EmployeeRepository.getById(int id)
或
那么一个人该怎么做呢?始终使用字符串(或对象??),让存储库层根据需要对其进行强制转换或转换
或者应用程序的模型是否应该有自己的内部ID方案,该方案完全独立于数据库的ID方案,并且您总是使用该ID进行获取?比如:
EmployeeRepository.getByInternalId(int id)
这里的最佳实践是什么
因此,据我所知,存储库层的整体思想是,您可以快速、轻松地将一个解决方案替换为另一个解决方案
不,其思想是抽象数据层,以减少竞争性和代码耦合。而不是把所有的东西都放在一个班里,你会得到两个班,有更多的责任
即使使用存储库,从一种类型的数据层切换到另一种类型的数据层也不是一件小事
不过。您可以决定在一个存储库中使用一种数据层(例如,vanilla ADO.NET),在另一个存储库中使用另一种类型的数据层(如Entity Framework)。关键是,您可以在每个特定用例之后调整存储库。在不影响任何其他代码的情况下
问题是,MySQL(实际上很可能)将使用整数作为主键,而MongoDB将使用字符串
你从错误的方向处理这个问题。应用程序的用户是否使用密钥?是否必须采用特定的格式?或者DB生成的密钥是否正常?如果是,则使用DB使用的任何格式
如果您以后不得不从MySQL切换到Mongo,那么您仍有很多工作要做(比如从表关系转移到文档)
因此,据我所知,存储库层的整体思想是,您可以快速、轻松地将一个解决方案替换为另一个解决方案
不,其思想是抽象数据层,以减少竞争性和代码耦合。而不是把所有的东西都放在一个班里,你会得到两个班,有更多的责任
即使使用存储库,从一种类型的数据层切换到另一种类型的数据层也不是一件小事
不过。您可以决定在一个存储库中使用一种数据层(例如,vanilla ADO.NET),在另一个存储库中使用另一种类型的数据层(如Entity Framework)。关键是,您可以在每个特定用例之后调整存储库。在不影响任何其他代码的情况下
问题是,MySQL(实际上很可能)将使用整数作为主键,而MongoDB将使用字符串
你从错误的方向处理这个问题。应用程序的用户是否使用密钥?是否必须采用特定的格式?或者DB生成的密钥是否正常?如果是,则使用DB使用的任何格式
如果您以后必须从MySQL切换到Mongo,您还有很多工作要做(比如从表关系转移到文档)。我将它们视为字符串。将ID视为整数(即使它们看起来是整数)可能会导致问题,例如,当超过32位限制时……我会将它们视为字符串。将ID视为整数(即使它们看起来是整数)可能会在例如超过32位限制时导致问题……理想情况下,应用程序的用户不关心密钥。不过,在处理人际关系方面,我仍然无法决定什么是最好的。模特们互相了解吗?我应该说“book.Author.Name”还是必须说(authorRepository.getByBookId(book.ID)).Name?在后一种情况下,应用程序确实关心数据库ID。在前一种情况下,模型确实需要是某种可以自动相互关联的实体,在这种情况下:它们是否渴望加载?有多少物体深?或者他们是在偷懒?怎么做?我更喜欢使用ID。它可以让您更好地控制更改的内容和时间。理想情况下,应用程序的用户不关心密钥。不过,在处理人际关系方面,我仍然无法决定什么是最好的。模特们互相了解吗?我应该说“book.Author.Name”还是必须说(authorRepository.getByBookId(book.ID)).Name?在后一种情况下,应用程序确实关心数据库ID。在前一种情况下,模型确实需要是某种可以自动相互关联的实体,在这种情况下:它们是否渴望加载?有多少物体深?或者他们是在偷懒?怎么做?我更喜欢使用ID。它可以让您更好地控制更改的内容和时间。
EmployeeRepository.getByInternalId(int id)