【问题标题】:Entity Framework Core and REST client - code organizationEntity Framework Core 和 REST 客户端 - 代码组织
【发布时间】:2018-11-15 04:35:27
【问题描述】:

我正在构建一个包含三个项目的解决方案:

  • .Data(包含实体框架核心类和Writer.cs
  • .ConsoleApp(启动项目,调用Writer.cs
  • .CloudTalker(Web 服务参考和Fetcher.cs

该解决方案的目的是调用 REST API,从 API 获取实体并使用 Entity Framework Core 将它们存储在数据库中。所有代码都运行良好,但我很肯定有办法改进架构。

从 REST API 获取客户并写入数据库的示例代码流:

  1. Program.cs in .ConsoleApp 实例化Writer.cs 并调用方法WriteCustomers()
  2. WriteCustomers获取数据库中客户的最新修改日期
  3. WriteCustomersCloudTalker 项目中的Fetcher.cs 中调用GetCustomers( latestModifiedDate )。此方法返回 Customers 的数组(由 REST API 返回的类,而不是实体框架)。
  4. WriteCustomers 循环遍历数组,将 REST 对象转换为 EF Core 对象并将其放入 _context.Customers
  5. Context.SaveChanges()Customers 存储在数据库中。

现在是我的问题/征求意见:

  • 我是否进行了适当的关注点分离?困扰我的是 CloudTalker 需要了解 EF 类,或者 EF 类需要了解 REST 类。首选哪种方式? CloudTalker.Fetcher.GetCustomers( lastModifiedDate ) 应该返回 EF 类还是 REST 类型的对象?
  • 我应该如何处理类的命名?现在我有两个Customer - REST 类型和 EF 类型。不漂亮。
  • 我还有什么不同的做法吗?

提前感谢您分享任何见解。

【问题讨论】:

    标签: c# rest entity-framework-core


    【解决方案1】:

    在我看来,这应该属于 codereview 网站,但这是我对架构的看法(我忽略了这样一个事实,即这可能是一个可以使用快速而肮脏的解决方案的简单项目)

    编写者应该在一个单独的项目中,并且应该只知道 EF 和 DB,提取器应该只知道 REST 以及如何调用远程服务。然后,您可以引入一个服务层,该服务层了解前两个砖块并调用 fetcher 来获取数据,然后将数据传递给 writer。

    我假设没有业务逻辑,因此不需要单独的域项目。您的服务层可以直接在您的 UI/Console 项目中。

    关于命名,CustomerReadModel、CustomerWriteModel怎么样?

    您似乎还需要从 DB 中读取以获取最后修改日期,因此我建议您在 db 项目中的某个位置设置一个阅读器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 2017-08-05
      • 2021-07-19
      • 1970-01-01
      相关资源
      最近更新 更多