2009-11-17 17 views
5

की स्थिति को सिंक्रनाइज़ करने का सबसे अच्छा तरीका क्या है मेरे पास ऑपरेशन शेड्यूलिंग का प्रतिनिधित्व करने के लिए एक जटिल ऑब्जेक्ट ग्राफ़ है। एक बिंदु पर, मुझे पूरे ग्राफ को वेब यूआई (एक्सएमएल/जेएसओएन के माध्यम से) को क्रमबद्ध करना है ताकि उपयोगकर्ता जावास्क्रिप्ट आधारित गैंट चार्ट चार्ट का उपयोग करके शेड्यूल को संशोधित कर सके। उपयोगकर्ता को संपादन समाप्त करने के बाद, जावा/सर्वर परत में आलेख की स्थिति को संशोधित स्थिति के साथ सिंक्रनाइज़ किया जाना चाहिए।2 जटिल ऑब्जेक्ट ग्राफ़

मैं जटिल ऑब्जेक्ट ग्राफ़ के ऐसे राज्य सिंक्रनाइज़ेशन को लागू करने के लिए सबसे अच्छी रणनीति के बारे में पूछना चाहता हूं, उदा। राज्य के परिवर्तनों को कैसे दर्शाया जाना चाहिए ताकि सर्वर पक्ष में बदलावों की नकल करना आसान हो सके? अन्य इसे कैसे कार्यान्वित करेंगे?

एफवाईआई, मेरा वर्तमान प्रौद्योगिकी ढेर: जेएसएफ + रिचफैसेस, सीम 2.1, हाइबरनेट 3. लेकिन मेरा मानना ​​है कि इस समस्या का समाधान अन्य तकनीकी ढेर में भी इस्तेमाल किया जा सकता है।

उत्तर

4

मैं दो ग्राफों को सिंक्रनाइज़ करने से बचने के लिए सुझाव दूंगा लेकिन संपादन कार्यों को "नोड हटाएं/नोड/प्रतिस्थापन नोड" ऑपरेशन के रूप में रिकॉर्ड करें। इस ऑपरेशन को सर्वर पर भेजें और उन्हें मूल ग्राफ पर लागू करें।

यह विचार एएसटी (सार सिंटेक्स ट्री) को फिर से लिखने से है। eclipse JDT you have an AST from your source में। जब एक रिफैक्टरिंग लागू होती है (उदाहरण के लिए एक विधि का नाम बदलें) परिवर्तनों का पूर्वावलोकन बनाना संभव होना चाहिए। इसके लिए पुन: लिखने की घटनाओं (डेल्टे/सम्मिलित/प्रतिस्थापन) को रिकॉर्ड करने के लिए रिकॉर्ड किया गया है और एएसटी की एक प्रति पर लागू किया गया है। इससे पूर्वावलोकन उत्पन्न होता है। यदि उपयोगकर्ता स्वीकार करता है कि ईवेंट एएसटी पर लागू होते हैं।

आपकी समस्या इस तरह से समान है, कि आपके पास दो ऑब्जेक्ट ग्राफ़ हैं जो समान रूप से प्रारंभ होते हैं और उसी तरह संशोधित किए जाने चाहिए। सिंक्रनाइज़ेशन ऑपरेशन के रूप में इसे कार्यान्वित करना बहुत आसान होना चाहिए, जब आप ग्राफ़ को संशोधित करते समय ईवेंट को रिकॉर्ड करना होगा।

0

मैं एक बड़े पैमाने पर प्रोजेक्ट पर एक ही (सामान्य?) समस्या के साथ काम कर रहा हूं। डिजाइनरों ने डीटीओ पैटर्न और सीएमपी 2 के आधार पर निम्न समाधान लागू किया:

सामान्य विचार यह है कि ग्राफ में किसी ऑब्जेक्ट का प्रतिनिधित्व करने वाले प्रत्येक बीन, अपने स्वयं के परिवर्तन रिकॉर्ड कर सकते हैं। इसलिए प्रत्येक बीन में एक अतिरिक्त संरचना (सेट) होती है जहां बदले गए बीन गुणों (मान) की केवल कुंजी (कॉलम नाम) संग्रहीत होती हैं। संग्रहीत डेटा को अद्यतन करने के लिए सर्वर तर्क इन संकेतों का उपयोग करता है। सर्वर तर्क इन संकेतों का उपयोग केवल परिवर्तनों को अद्यतन करने के लिए कर सकता है। (! सरलीकृत)

ही सेम लग रहा है इस तरह एक सा:

public TableBean { 

    private String column1; 

    // ... more fields 

    private Set<String> changes = new Set<String>(); 

    public String getColumn1() { 
    return column1; 
    } 

    public void setColumn1(String value) { 
    if (!value.equals(column1)) { 
     changes.add("column1"); 
     column1 = value; 
    } 
    } 

    public Collection<String> getChanges() { 
    return changes; 
    } 
} 

Subrelations तदनुसार व्यवहार कर रहे हैं, वहाँ एक और संरचना है कि उन बच्चे रेखांकन, है कि हटाए जाने के लिए रिकॉर्ड है।

यह एक मानक जे 2ee पैटर्न भी हो सकता है, कृपया इस मामले पर टिप्पणी करें।

(इसके अलावा, मैं नए डिजाइनों के लिए आर्ने के समाधान का पक्ष लेता हूं!)

+0

इस पैटर्न का नाम क्या है? – bungrudi

+0

जैसा कि मैंने समझाने की कोशिश की - मुझे नहीं पता, अगर यह मानक पैटर्न है या नहीं और मैं इसे भी जानना चाहता हूं। –

संबंधित मुद्दे