हमारे पास एक जावा सर्वर वेब एप्लिकेशन है जहां सिस्टम के मूल में एक बहुत ही जटिल डोमेन मॉडल होता है जिसे डोमेन संचालित डिज़ाइन के सिद्धांतों के अनुसार डिज़ाइन किया गया था। अधिकांश भाग के लिए, इन डोमेन ऑब्जेक्ट्स अन्य चिंताओं के अनुप्रयोगों से बहुत कम प्रभावित हुए हैं।एक्सएमएल में हैटओएएस के लिए लिंक संबंधों को कैसे कार्यान्वित करना सबसे अच्छा है?
अब हम सिस्टम के सामने एक आरईएसटी वेब सेवा एपीआई डालने की सोच रहे हैं और मैं अपने नए मीडिया प्रकार के भीतर आने वाले हेटोएस लिंक को सर्वोत्तम तरीके से कार्यान्वित करने के तरीके से संघर्ष कर रहा हूं। उदाहरण के लिए, मान लीजिए कि हम डोमेन वर्ग foo
JAX-बी एनोटेशन के साथ एक आईडी और नाम गुण है कि है:
@XmlType(name = "foo")
public class FooImpl implements Foo {
private String name;
private String id;
...snip....
@XmlID
@XmlAttribute
@Override
public String getId() {
return id;
}
@XmlElement
@Override
public String getName() {
return name;
}
@Override
public void setName(final String name) {
this.name = name;
}
}
लेकिन एक्सएमएल मैं इस तरह दिखता लौटना चाहते:
<foo id="123" href="http://myserver.com/foos/123">
<name>myFoo</name>
<links>
<link rel="previous" href="http://myserver.com/foos/122" type="application/mything+xml" />
<link rel="next" href="http://myserver.com/foos/124" type="application/mything+xml" />
<link rel="edit" href="http://myserver.com/foos/123" type="application/mything+xml" />
<link rel="revise" href="http://myserver.com/foos/123" method="put" type="application/mything+xml" />
<link rel="cancel" href="http://myserver.com/foos/123?op="cancel"" method="post" type="application/mything+xml" />
</links>
</foo>
क्या है ऐसा करने का सबसे अच्छा तरीका है कि मैंने इन मीडिया प्रकार के लिंक के साथ अपने डोमेन डिज़ाइन को प्रदूषित नहीं किया है, लेकिन एक्सएमएल मार्शलिंग के लिए अभी भी जेएक्स-बी की शक्ति का उपयोग कर सकते हैं? यहाँ कुछ विचार कर रहे हैं:
1) JAX-बी एडेप्टर - मैं इन इस्तेमाल कर सकते हैं संस्थाओं के लिए एक्सएमएल को संशोधित करने और links..is यह संभव डालने के लिए? क्या यह उचित है? कोई उदाहरण?
2) डीटीओ लेयर - एक नई आरईएसटी सेवा परत बनाएं जो डीटीओ में मेरी डोमेन ऑब्जेक्ट्स को परिवर्तित करती है। अब तक हम डीटीओ की परेशानी से बचने में सक्षम हैं। हालांकि यह ग्राहक के पास वापस आने में कुल लचीलापन प्रदान करेगा, मैं यहां डोमेन अज्ञेयवादी क्लाइंट बनाने की भी तलाश नहीं कर रहा हूं।
3) लिंक हेडर - मुझे वास्तव में यह विचार पसंद है, लेकिन मुझे नहीं लगता कि यह काम करेगा (स्वयं ही) क्योंकि कभी-कभी हमारे संसाधनों में उप-संसाधनों का संग्रह होता है। इस मामले में उप-स्रोतों को अभी भी एक्सएमएल में मार्शल किया जाना चाहिए जिसमें लिंक/hrefs इत्यादि शामिल हों। इसलिए लिंक हेडर समस्या को शीर्ष स्तर के प्रकार में हल करते हैं, लेकिन यह पूरी समस्या को हल नहीं करता है। अन्यथा कहने के लिए स्वतंत्र महसूस करें!
क्या कोई अन्य दृष्टिकोण है जो मुझे डीटीओ से बचने में मदद करेगा और फिर भी डोमेन मॉडल के लिए पारदर्शी रहेगा?
मॉडल के लिंक जोड़ने से आपके डोमेन कक्षाओं को विस्तारित करने की आवश्यकता होती है लेकिन फिर आपकी डीएओ परत ऐसी वस्तुओं को तुरंत चालू नहीं कर सकती है। एकत्रीकरण पर विचार करें और उस परत पर जेएक्सबी (या जो भी एक्सएमएल मैपिंग) जोड़ना। –
यदि मैं समझता हूं, तो एक आरईएसटी मॉडल बनाएं जो डोमेन ऑब्जेक्ट को लिंक के साथ जोड़ता है और उसे भेजता है। एक डीटीओ की तरह, लेकिन लिंक शामिल करने के लिए डोमेन को विस्तारित करने की तरह। क्या मैं समझता हूँ? – HDave
हां, मैं रैपर बनाउंगा। यदि आवश्यक हो, तो डीएओ वस्तुओं को कॉल का प्रतिनिधि। तो मूल रूप से यह है कि [सजावटी डिजाइन पैटर्न] (http://en.wikipedia.org/wiki/Decorator_pattern)। –