好吧,我有一个必须与远程数据库通信的客户端应用程序。这个想法是有这个的:
client(使用 EF 仓库的 POCO 实体)--> gRPC 客户端 --> gRPC 服务 --> 仓库(EF 使用 POCO 实体)
我的存储库有 CRUD 操作和其他业务逻辑。我知道也许使用 DDD 并为模型设置一个单独的层和存储库的另一个层会更好,但在这种情况下,项目开始考虑存储库是具有逻辑的主层,以确保信息数据库已正确保存。无论如何,对于这个问题,这并不重要。
我的问题是在 gRPC 中我不能使用 .NET 对象,所以我必须将我的 POCO 实体转换为 gRPC 的消息。
例如,我有这个 POCOs 类:
class Order
{
long IDOrder;
long IDClient
Person Client;
}
class Client
{
long IDClient;
string Name;
ICollection<Orders> Orders;
}
我的 gRPC 项目中是否应该有两个从 POCO 实体转换为消息和从消息转换为实体的类,以便可以调用存储库的方法?类似的东西:
class GrpcOrders
{
static MessageOrder OrderToMessage(Orders paramOrder)
{
//Here I create a message and copy the data from the order to the message
}
static Order MessageToPoco(MessageOrder paramOrder)
{
//Here I create a POCO entitie and copy the data from the message to the order
}
}
客户端类也是如此。
这是一项非常手动的工作,而且如果导航属性属于具有其他导航属性的类型,则可能需要大量工作,因为当我向存储库请求数据时,有时我会请求包含导航属性在 2 或 3 个级别中,因此以这种方式从 POCO 转换为消息,将消息转换为 POCO 可能是一项非常庞大的工作。
所以我想知道这是否真的是要走的路,或者是否有其他更好的选择。
我在互联网上搜索了一些如何在 gRPC 中使用实体核心的示例,但我只找到了非常简单的示例,其中他们没有使用具有导航属性的类,而只是发送一两条消息,它们是更多示例将数据从服务发送到客户端,了解如何实现将 EF Core 与 gRPC 结合使用的解决方案。
谢谢。