首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用版本化REST API中的模块

使用版本化REST API中的模块
EN

Stack Overflow用户
提问于 2019-07-12 16:37:32
回答 1查看 42关注 0票数 0

我有模块化的API

代码语言:javascript
复制
MyProject.Modules
    Module1
        Logic and Repositories
    Module2
        Logic and Repositories
MyProject.RestApi
     Controllers

我已经创建了1个版本的REST API (使用ID (int作为ID))

我想创建一个使用UUID的新版本(前一个保留),也会有新的端点

如何处理模块?

对于新版本的API,我必须更改存储库中的数据库查询,命名方法等。

您会为新的API版本创建新的模块吗?或者其他解决方案会正确吗?

EN

回答 1

Stack Overflow用户

发布于 2019-07-12 17:51:05

我认为这在很大程度上取决于你的模块封装的是什么,它们是否故意持有不同的版本,或者它们是否是一个商业领域的持有者,例如Module1是用于加载用户的。

如果Module1正在加载用户,假设您有以下伪代码:

代码语言:javascript
复制
public class UserRepository

    public User GetUser(int userId)

然后,这样做将返回相同的类,因此可能会自然地位于相同的存储库中:

代码语言:javascript
复制
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,我会让你来决定这对于你的用例来说是不是太复杂了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57003219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档