2010-01-10 10 views
5

यह देखने के लिए कि हम अपने .NET क्लास लाइब्रेरी, या कम से कम इसके हिस्सों को सिल्वरलाइट में लाने के लिए कितना काम करेंगे, ताकि हम दो दुनिया के बीच व्यापार तर्क का पुन: उपयोग कर सकें। मैं सोच रहा हूं कि दूसरों को इस तरह की चीज़ों का अनुभव है या नहीं।.NET और Silverlight के बीच साझा कोड की व्यवहार्यता?

बातें मैंने देखा है, मेरे सिर के ऊपर से: (उदाहरण के लिए ब्राउज़ करने योग्य (गलत)) लापता विशेषताओं की

  • बहुत सारे
  • इंटरफेस लापता, या वर्तमान, लेकिन खाली बहुत सारे (ICloneable है छिपा, ITypedList लापता)
  • प्रतिबिंब मतभेद (सब कुछ से पहुंचा जा सकता जरूरतों सार्वजनिक होने के लिए)
  • कुछ आधार वर्ग मतभेद (कोई घटक?)

तो मैं सोच रहा हूं, क्या यह वास्तव में मेरे लिए संभावना के रूप में देखने के लिए संभव है?

मुझे प्रारंभिक कोड चल रहा है, लेकिन मुझे केवल मूलभूत कार्यक्षमता पर टिप्पणी करना पड़ा, ज्यादातर सूचियों को संभालने के आसपास, क्योंकि वे आईटीप्डलिस्ट और कुछ बेस क्लास पर आधारित हैं। स्पष्ट रूप से मुझे सिल्वरलाइट में ऑब्जर्जेबल कोलेक्शन में बदलने की जरूरत है, इसलिए सामना करने के लिए पूरे बेस-कोड को बदलने की जरूरत है।

मैंने बनाया वास्तविक व्यापार परीक्षण वर्ग 99.5% है जो मैंने .NET के लिए किया होगा, केवल कुछ मामूली परिवर्तन जो आसानी से .NET में उपयोग किए जा सकते हैं, जैसा कि मैंने किया होगा सिल्वरलाइट को देखने से पहले। दूसरे शब्दों में, यह व्यापार तर्क साझा करने के लिए व्यवहार्य दिखता है, बशर्ते मैं आधार वर्ग को संगत बना सकूं।

बस इतना स्पष्ट है कि मैं किस बारे में बात कर रहा हूं, यह है कि मैं मूल रूप से दो परियोजना फाइलें, एक .NET के लिए, और सिल्वरलाइट के लिए एक होगा, लेकिन वास्तविक सी # स्रोत कोड समान होगा, साझा किया जाएगा दो।

तो क्या किसी के पास इसका कोई अनुभव है? कोई सुझाव या दिशानिर्देश?

क्या यह इसके लायक होगा? यह निश्चित रूप से अधिक देखने की गारंटी देता है।

उत्तर

4

यह निश्चित रूप से व्यवहार्य है।

यह यहां एक परियोजना पर किया गया है; सिल्वरलाइट प्रोजेक्ट में सी # वाले शामिल हैं, और कुछ #IF कुछ चीजों को संभालने वाले बयान (जैसे लॉग 4नेट घोषणाएं) हैं, और अन्य बार चीजें फिर से लागू की जाती हैं। लेकिन सामान्य रूप से, यह एक बड़ी जीत है, और आपको निश्चित रूप से इसका प्रयास करना चाहिए (और निश्चित रूप से, हमारे पास सफलतापूर्वक है)।

- संपादित करें:

एक बात हालांकि, यह है कि हमारे या/एम (LLBLGen) 'सरल' वस्तुओं सिल्वरलाइट के माध्यम से नीचे भेजने के लिए इनबिल्ट समर्थन नहीं था; लेकिन किसी ने एक प्लगइन लिखा था जिसने इसे संभाला, जिसने मदद की। तो यह विचार करने योग्य हो सकता है कि आप किस प्रकार के डीएएल का उपयोग कर रहे हैं, और यह सिल्वरलाइट का कितना अच्छा समर्थन करता है।

+0

ठीक है, तो, मुझे लगता है कि आप किसी भी असुरक्षित समस्याओं को नहीं मानते हैं। यह सुनना अच्छा है, तो मैं निश्चित रूप से इस परियोजना के साथ आगे बढ़ जाऊंगा। –

+0

लास: निश्चित रूप से कुछ चीजें गायब हैं; मैं अपने सिर के शीर्ष से याद नहीं कर सकता, लेकिन कुछ प्रतिबिंब चीजें, log4net, और इसी तरह से।लेकिन यह निश्चित रूप से surmountable है; (हालांकि, कम से कम वीएस -2008 में, कभी-कभी कुछ 'विषम' चीजें होती हैं; जब आप मुख्य प्रोजेक्ट से मौजूदा कक्षा को जोड़ने और इसे बदलने के लिए 'लिंक के रूप में जोड़ें' का उपयोग करते हैं, तो आपको इसे खोलना होगा (वास्तव में इसे खोलना) सिल्वरलाइट प्रोजेक्ट इससे पहले कि यह परिवर्तनों को पहचान सके)। फिर भी, कोई आत्मा-नष्ट करने वाले मुद्दों :) –

+0

अच्छा। सबसे बड़ी समस्या की तरह दिखने वाली बात यह है कि मुझे अपनी सूची कक्षाओं के लिए आधार को फिर से लागू करना है, क्योंकि हम अपने व्यापार तर्क के माध्यम से सूचियों का उपयोग करते हैं, और हमारे पास कुछ विशेष सूची वर्ग हैं जो जानते हैं कि वे "व्यापार तर्क दुनिया में हैं ", लेकिन यह देखते हुए कि ऑब्जर्वेबल कोलेक्शन का उपयोग कैसे किया जाता है, ऐसा लगता है कि यह वही करेगा जो हमें चाहिए, बस इसे निपटने के लिए कोड को बदलना होगा। हमारे आईओसी कंटेनर ने minus app.config कॉन्फ़िगरेशन काम किया है, लेकिन हम वैसे भी इसका उपयोग नहीं करेंगे। बस आश्चर्य हुआ कि किसी और को कोई खनन क्षेत्र मिला है जिसे मैं तुरंत नहीं देख सका। –

4

मैं इस सुविधा के लिए क्या किया है है:

  1. आंशिक वर्गों और #if के लगातार उपयोग भागों कि Silverlight संभाल कर सकते हैं में कोड को अलग करने Silverlight।
  2. जब भी संभव हो कोड कोड का उपयोग करें।उदाहरण के लिए, मैं टी 4 टेम्पलेट्स के साथ प्रयोग कर रहा हूं जो सिल्वरलाइट समतुल्य विशेषताओं (उदाहरण के लिए विवरण एट्रिब्यूट के बजाय प्रदर्शन एट्रिब्यूट) उत्पन्न करता है
  3. जब भी कोई इंटरफ़ेस/विशेषता है जो सिल्वरलाइट (जैसे IDeserializationCallback, ICloneable, INotifyPropertyChanging) द्वारा लागू नहीं किया गया है, तो मैं सिल्वरलाइट एप्लिकेशन में उसी नाम का एक डमी इंटरफ़ेस बनाएं जब तक कि मुझे पता चले कि कार्यान्वयन का उपयोग नहीं किया जाएगा, यह कोई समस्या नहीं है।
  4. अंत में, यह ध्यान देने योग्य है कि Silverlight 4 में, असेंबली प्रारूप सिल्वरलाइट और .NET के बीच द्विआधारी साझा करने की अनुमति देता है जब तक कि सिल्वरलाइट का समर्थन न करने पर कोई निर्भरता न हो। अलग आधार वर्ग के बारे में

एक और टिप्पणी - यह आपके लिखे हुए पर प्रभाव को कम करने के लिए एक अमूर्त वर्ग है कि Silverlight और BindingList (या जो भी आप नेट में उपयोग कर रहे हैं) में ObservableCollection से निकला बनाने के लिए सार्थक हो सकता है संग्रह।

अद्यतन आज मुझे लगता है कि System.Diagnostics एपीआई TraceSource, SourceSwitch, आदि जैसे की जो सिल्वरलाइट में मौजूद नहीं है का भारी इस्तेमाल किया जाता सिल्वरलाइट के लिए कुछ नेट कोड पोर्टिंग पर काम कर रहा था। मैंने सिल्वरलाइट प्रोजेक्ट में इनका बहुत कम कार्यान्वयन किया और उन्हें आइंस्टीन में डाला। डायग्नोस्टिक नामस्थान। ऐसा करने में मैंने फैसला किया कि मुझे आसानी से उस कोड की पहचान करने के लिए एक सम्मेलन की आवश्यकता है जो .NET Framework बनाम मेरे स्वयं के कोड की नकल कर रहा था। तो मैंने प्लेसहोल्डर फ़ाइलों का नाम बदलकर @ साइन के साथ बदल दिया। मैंने उन फ़ाइलों में कक्षा के नामों को भी उपसर्ग किया। इसके बारे में अच्छी बात यह है कि @ साइन वास्तव में सी # कंपाइलर के संबंध में अपने वर्ग के नामों को नहीं बदलता है। तो @SourceSwitch अभी भी आइंस्टीन होने के लिए संकलित है। डायग्नोस्टिक्स। सोर्सविच लेकिन कोड में मैं आसानी से कुछ देख सकता हूं। मैंने इन वर्गों को [सिल्वरलाइट प्लेसहोल्डर] विशेषता के साथ सजाया है।

+0

मैं निश्चित रूप से बेस क्लास में ऑब्जर्जेबल कोलेक्शन पर निर्भरता को ठीक करने पर विचार करूंगा। सिल्वरलाइट 4 के बारे में जानना अच्छा है, लेकिन दुर्भाग्य से हम शायद उस पर कूद नहीं सकते हैं। ITypedList को छोड़कर मुझे नहीं लगता कि मेरे सामने आने वाले किसी भी इंटरफेस में कोई समस्या होगी। हमारे व्यापार तर्क वर्गों के लिए, वे कोड जनरेटर का उपयोग कर पहले से ही बनाए गए हैं, हालांकि यह हमारा स्वयं का टूल है, इसलिए 100% संगतता प्राप्त करने के लिए हमें इसे ठीक करने के लिए कुछ भी करने की आवश्यकता है। आपके सहयोग के लिए धन्यवाद! बस दो उत्तरों के बीच मैं पहले से ही प्राप्त कर लिया है मैं पहले से ही एक प्रारंभिक अद्यतन के साथ आगे बढ़ने के लिए पर्याप्त राहत मिली है। –

2

मैं Protobuf शुद्ध के साथ ऐसा करते हैं, और मैं कुछ तरीकों का उपयोग: प्रोजेक्ट फ़ाइल में

  • सशर्त संकलन प्रतीकों सूक्ष्म कोड-शाखाओं को गति प्रदान करने (हाँ, यह सही नहीं है, लेकिन यह काम करता है)
  • कुछ चीजों का पुन: परिचय; विशेषताएँ यहां एक उदाहरण हो सकती हैं - आपके कोड अभी भी पुन: पेश किए गए विशेषताओं का उपयोग कर सकते हैं, भले ही फ्रेमवर्क कोड न हो; इस का एक और अधिक चरम उदाहरण के रूप में, कॉम्पैक्ट ढांचे के लिए मैं Expression एपीआई का एक अच्छा हिस्सा है, जो मज़ा
  • सिर्फ ;-p

हालांकि अगर आप कर रहे हैं कुछ चीजें छोड़ था फिर से शुरू करने की थी ITypedList (जो आप उल्लेख करते हैं) का उपयोग करके, मैं देख सकता हूं कि पूरा दृष्टिकोण बहुत गड़बड़ हो रहा है; घटक-मॉडल हैक के माध्यम से अपना रास्ता मजबूर किए बिना, पहले से ही जटिल है। यह वास्तव में इस सड़क पर कितनी दूर चला गया है इस पर निर्भर करता है। शायद 4.0/dynamic फिर से इनमें से कुछ विकल्पों को खोल देगा?

+0

वास्तव में हम ITypedList का उपयोग करते हैं क्योंकि इससे हमें उप-गुणों के समर्थन के साथ उपयोग में सबसे अधिक ग्रिड-घटकों को आसानी से बांधने की क्षमता मिलती है। यही है, मैं "कर्मचारी। फर्स्टनाम" से जुड़ सकता हूं, जहां कर्मचारी सूची में वस्तुओं पर एक संपत्ति है। मुझे अभी तक पता नहीं है अगर यह पर्यवेक्षण चयन के साथ संभव है लेकिन यदि यह है, तो हम परिवर्तनों से निपटेंगे। –

+0

और कक्षा पुस्तकालय में बहुत सी चीजें हैं जिनकी शायद आवश्यकता नहीं है, और हम कई चीजों के लिए सशर्त संकलन का भी उपयोग करेंगे। उदाहरण के लिए, मेरे पास एक हीप क्लास है, जिसका हम उपयोग करते हैं, गैर-जेनेरिक संग्रह इंटरफेस जैसे आईलीस्ट और आईसीओलेक्शन लागू करता है, जिसे मैंने देखा है सिल्वरलाइट में अनुपस्थित था, इसलिए हम सिल्वरलाइट के लिए उन हिस्सों को अनदेखा कर देंगे, अगर कुछ अच्छी तरह से # if । –

+0

असल में सिल्वरलाइट में डेटा बाध्यकारी कहानी विंडोज फॉर्म की तुलना में अधिक लचीला है, इसलिए आपने जो परिदृश्य वर्णन किया है (उप-गुणों के लिए बाध्यकारी) आपको आईटीपीडलिस्ट जैसे हुप्स से कूदने की आवश्यकता नहीं होगी। संपत्ति पथ बाध्यकारी वाक्यविन्यास पर एक नज़र डालें और आप देखेंगे कि मेरा क्या मतलब है: http://msdn.microsoft.com/en-us/library/cc645024(VS.95).aspx – Josh

2

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

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