2015-03-25 30 views
7

Tôi có nhiều lược đồ khác nhau, tuy nhiên có một tập hợp các trường mà mỗi lược đồ chứa. Tôi đã tự hỏi nếu có một cách để có một lược đồ khác nhau mở rộng một lược đồ cha và kế thừa các trường của nó. Ví dụ: đây là những gì tôi muốn:Mở rộng Tin nhắn Protobuf

message Parent { 
    required string common1 = 0; 
    optional string common2 = 1; 
} 

message Child1 { // can we extend the Parent? 
    // I want common1, common2 to be fields here 
    required int c1 = 2; 
    required string c2 = 3; 
} 

message Child2 { // can we extend Parent? 
    // I want common1, common2 to be fields here 
    repeated int c3 = 2; 
    repeated string c4 = 3; 
} 

Như vậy Child1 và Child2 cũng chứa các trường common1 và common2 (và có thể nhiều hơn) từ cha mẹ.

Điều này có thể thực hiện được không?

+0

thừa kế không được hỗ trợ, nhưng là giải pháp một người đàn ông nghèo, bạn có thể sử dụng một cấu trúc lồng nhau nơi trường đầu tiên của 'Child1' và ' Child2' thuộc loại 'Parent'. Để truy cập vào các trường trong "lớp cơ sở", bạn sẽ phải truy cập rõ ràng trường 'Parent'-typed trước. –

+0

Ngoài ra còn có phần mở rộng. https://developers.google.com/protocol-buffers/docs/proto#extensions Mở rộng – engineerC

Trả lời

2

Đây không phải là câu trả lời chính xác cho câu hỏi của bạn nhưng chúng tôi có thể làm một việc như thế này để chia sẻ các thông số chung.

message Child1 { 
    required int c1 = 2; 
    required string c2 = 3; 
} 

message Child2 { 
    required int c1 = 2; 
    required string c2 = 3; 
} 

message Request { 
    required string common1 = 0; 
    optional string common2 = 1; 
    oneof msg { Child1 c1 = 2; Child2 c2 = 3; } 

} 

tùy chọn khác là sử dụng mở rộng từ khóa

message Parent { 
    required string common1 = 0; 
    optional string common2 = 1; 
} 

message Child1 { 
    extend Parent 
    {  
     optional Child1 c1 = 100; 
    } 

    required int c1 = 2; 
    required string c2 = 3; 
} 
+4

không được hỗ trợ trong bộ đệm proto 3 –

Các vấn đề liên quan