【问题标题】:Using modules in the versioned REST API在版本化 REST API 中使用模块
【发布时间】:2019-11-22 00:00:25
【问题描述】:

我有模块化 API

MyProject.Modules
    Module1
        Logic and Repositories
    Module2
        Logic and Repositories
MyProject.RestApi
     Controllers

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

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

如何处理模块?

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

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

【问题讨论】:

    标签: c# rest api asp.net-core architecture


    【解决方案1】:

    我认为这在很大程度上取决于您的模块所封装的内容,它们是否有意持有不同的版本,或者它们是否是业务领域的持有者,例如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,我会让您自己决定这是否对您的用例过于复杂。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 2021-06-22
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多