c# - Entity Framework Core 和 REST 客户端 - 代码组织
问题描述
我正在构建一个包含三个项目的解决方案:
.Data
(持有实体框架核心类和Writer.cs
).ConsoleApp
(启动项目,调用Writer.cs
).CloudTalker
(Web 服务参考和Fetcher.cs
)
该解决方案的目的是调用 REST API,从 API 获取实体并使用 Entity Framework Core 将它们存储在数据库中。所有代码都运行良好,但我很肯定有改进架构的方法。
从 REST API 获取客户并写入数据库的示例代码流:
Program.cs
在.ConsoleApp
实例化Writer.cs
和调用方法WriteCustomers()
。WriteCustomers
获取数据库中客户的最新修改日期WriteCustomers
GetCustomers( latestModifiedDate )
在项目Fetcher.cs
中调用。CloudTalker
此方法返回和数组Customers
(由 REST API 返回的类,而不是实体框架)。WriteCustomers
循环遍历数组,将 REST 对象转换为 EF Core 对象并将其放入_context.Customers
.Context.SaveChanges()
存储Customers
在数据库中。
现在我的问题/征求意见:
- 我是否进行了适当的关注点分离?困扰我的是 CloudTalker 需要了解 EF 类或 EF 类需要了解 REST 类。首选哪种方式?应该
CloudTalker.Fetcher.GetCustomers( lastModifiedDate )
从 EF 类或 REST 类型返回对象? - 我应该如何处理类的命名?现在我有两种
Customer
——REST 类型和 EF 类型。不漂亮。 - 还有什么我应该做的不同的吗?
提前感谢您分享任何见解。
解决方案
在我看来,这应该属于 codereview 网站,但这是我对架构的看法(我忽略了这样一个事实,即这可能是一个简单的项目,可以使用快速而肮脏的解决方案)
作者应该在一个单独的项目中,并且应该只知道 EF 和 DB,提取器应该只知道 REST 以及如何调用远程服务。然后你可以引入一个服务层,它知道前面的两个砖块,并调用 fetcher 来获取数据,然后将数据传递给 writer。
我假设没有业务逻辑,因此不需要单独的域项目。您的服务层可以直接在您的 UI/Console 项目中。
关于命名,CustomerReadModel、CustomerWriteModel 怎么样?
看来您还需要从 DB 中读取以获取最后修改日期,因此我建议您在 db 项目中的某处有一个阅读器。
推荐阅读
- angular - 如何在启动时在树莓派上启动角度服务器(ng serve)?
- ios - iOS 内存泄漏,内存图调试器显示没有泄漏,但并行 Xcode-Instruments-leaks 显示泄漏
- visual-studio - Visual Studio 探查器不适用于 Azure Function
- javascript - react-native-tab-view 从反应导航屏幕跳转到特定选项卡
- c# - 比较列表
和使用 C# 的数据表值和更新列表 - google-apps-script - 如何在 Google Apps Script Webapp 上同时处理错误和成功
- r - 在 ggplot 中,我不想标记值为 0 的 geom_col 条,只标记具有值的条(它们都是正数)
- javascript - 选中单选按钮时显示 div,并隐藏所有其他 div?
- firebase - 在 Flutter 中,如何创建与 Firebase documentID 兼容的字符串?
- php - 如何按另一个数组的值对一个数组进行排序?