在“干净的体系结构”之后,我现在实现了一个gRPC交付包以与我的经理(服务)进行交互。我的域实体被定义为带有json标记的纯Go结构。存储层具有其自己的实体定义,以允许使用自定义类型(例如sql.NullInt64)。在这里,我使用手动方法将域实体转换为sql类型,反之亦然。在处理程序方面,我看到了相同的模式。我必须从/转换为gRPC类型。
gRPC实体结构<->域实体结构<-> SQL实体结构
我测试了以下内容,它似乎可以工作:
func (h *RPCHandler) DescribeRealm(ctx context.Context, in
*pb.DescribeRealmReq) (*pb.DescribeRealmResp, error) {
rlm, err := h.Manager.DescribeRealm(ctx, in.GetRealmId())
if err != nil {
return nil, err
}
jb, err := json.Marshal(rlm)
if err != nil {
return nil, err
}
r := &pb.Realm{}
if err := jsonpb.Unmarshal(bytes.NewReader(jb), r); err != nil {
return nil, err
}
return &pb.DescribeRealmResp{
Realm: r,
}, nil
我的问题如下:
这是在不同类型的结构/层之间转换数据的首选方法,还是我应该坚持手动方法?
最诚挚的问候,卡尔。