我有模块化API
MyProject.Modules
Module1
Logic and Repositories
Module2
Logic and Repositories
MyProject.RestApi
Controllers
我已经创建了1个版本的REST API(使用ID(以ID作为ID))
我想创建一个将使用UUID的新版本(保留前一个版本) 也将有新的端点
如何处理模块?
对于新版本的API,我将不得不更改存储库中的数据库查询,命名方法等。
您将为新的API版本创建新模块还是其他解决方案正确?
答案 0 :(得分:0)
我认为这将主要取决于您的模块封装的内容,如果它们有目的地持有不同的版本,或者它们是否是业务域的持有者,例如Module1用于加载用户。
如果Module1正在加载用户,并且假设您具有以下伪代码:
public class UserRepository
public User GetUser(int userId)
然后,拥有这个将返回相同的类,因此很可能自然会在同一存储库中:
public User GetUser(guid userId)
为了简化示例,我没有故意提到接口,但是可以说您有IRepository指示存储库负责返回用户,那么通过查找guid或int返回它们并不重要,它们都与用户有关。
但是您的存储库代码变得非常庞大,因此您的存储库可以简单地封装两个单独的类并提供一个统一的用户获取接口。
然而,另一方面,您可能不希望现有存储库的使用者也依赖于他们不使用的方法(遵循接口隔离原则https://scotch.io/bar-talk/s-o-l-i-d-the-first-five-principles-of-object-oriented-design#toc-interface-segregation-principle)
因此,您可能希望拥有IRepositoryGetByGuid和IRepositoryGetByInt,让我决定您的用例是否过于复杂。