Следуя «чистой архитектуре», я сейчас реализую пакет доставки gRPC для взаимодействия с моими менеджерами (службами).Объекты моего домена определены как чистые структуры Go с тегами json.Уровень хранения имеет свои собственные определения объектов, чтобы разрешить пользовательские типы (такие как 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
Мой вопрос заключается в следующем:
Является ли это предпочтительным способом преобразования данных между различными типами структур / слоев, или мне следует придерживаться ручного подхода?
С наилучшими пожеланиями, Карл.