मैं जावा आधारित सेवा के लिए Google प्रोटोकॉल बफ़र्स का मूल्यांकन कर रहा हूं (लेकिन भाषा अज्ञेय पैटर्न की अपेक्षा कर रहा हूं)। मेरे दो सवाल हैं:
पहला व्यापक सामान्य प्रश्न है:
हम लोगों को किस पैटर्न का उपयोग करते हुए देख रहे हैं? कहा कि वर्ग संगठन से संबंधित पैटर्न (जैसे, संदेश प्रति फ़ाइल, पैकेजिंग, और वितरण) और संदेश परिभाषा (उदाहरण के लिए, दोहराया क्षेत्रों बनाम दोहराया समझाया क्षेत्र *) आदि।
Google Protobuf सहायता पृष्ठों और सार्वजनिक ब्लॉगों पर इस तरह की बहुत कम जानकारी है जबकि XML जैसे स्थापित प्रोटोकॉल के लिए एक टन जानकारी है।
मेरे पास निम्नलिखित दो अलग-अलग पैटर्न पर विशिष्ट प्रश्न हैं:
.Proto फ़ाइलों में संदेशों का प्रतिनिधित्व करें, उन्हें एक अलग जार के रूप में पैकेज करें, और इसे सेवा के उपभोक्ताओं को लक्षित करने के लिए शिप करें - जो मूल रूप से डिफ़ॉल्ट दृष्टिकोण है जो मुझे लगता है।
प्रत्येक संदेश के चारों ओर हाथ से तैयार किए गए रैपर (सब-क्लास नहीं!) को भी शामिल करें, कम से कम इन दो तरीकों का समर्थन करने वाले अनुबंध को लागू करें (टी रैपर क्लास है, वी संदेश वर्ग है (संक्षिप्तता के लिए जेनरिक लेकिन सरलीकृत सिंटैक्स का उपयोग करके) :
public V toProtobufMessage() { V.Builder builder = V.newBuilder(); for (Item item : getItemList()) { builder.addItem(item); } return builder.setAmountPayable(getAmountPayable()). setShippingAddress(getShippingAddress()). build(); } public static T fromProtobufMessage(V message_) { return new T(message_.getShippingAddress(), message_.getItemList(), message_.getAmountPayable()); }
एक फायदा जो मैं देख रहा हूं (2) वह यह है कि मैं अपने द्वारा शुरू की गई जटिलताओं को छिपा सकता हूं V.newBuilder().addField().build()
और अपने रैपर में कुछ सार्थक तरीके जैसे isOpenForTrade()
या isAddressInFreeDeliveryZone()
आदि जोड़ सकता हूं। दूसरा लाभ जो मैं (2) के साथ देख रहा हूं वह यह है कि मेरे ग्राहक अपरिहार्य वस्तुओं (कुछ मैं रैपर क्लास में लागू कर सकते हैं) के साथ व्यवहार करते हैं।
एक नुकसान मैं (2) के साथ देखता हूं कि मुझे कोड की नकल करनी है और अपने आवरण वर्गों को .proto फ़ाइलों के साथ सिंक करना है।
क्या किसी के पास दो दृष्टिकोणों में से किसी पर बेहतर तकनीक या आगे की आलोचना है?
* एक दोहराया क्षेत्र encapsulating से मैं इस तरह के रूप में संदेश मतलब है:
message ItemList {
repeated item = 1;
}
message CustomerInvoice {
required ShippingAddress address = 1;
required ItemList = 2;
required double amountPayable = 3;
}
संदेशों के बजाय जैसे यह एक:
message CustomerInvoice {
required ShippingAddress address = 1;
repeated Item item = 2;
required double amountPayable = 3;
}
मुझे बाद पसंद है लेकिन मैं इसके खिलाफ तर्क सुनकर खुश हूं।