2009-07-27 9 views
6

मैंने इस समुदाय विकी को बनाया है क्योंकि कुछ सोच सकते हैं कि यह बहस के लिए खुला है और अन्य सोच सकते हैं कि यह शब्दों का उपयोग करने का एक प्रश्न है उनका वास्तव में मतलब है (दूसरे शब्दों में, यह राय की बात है कि यह राय का विषय है)।डब्ल्यूएफ, डब्ल्यूसीएफ और घोषणात्मक सेवाएं (या: "घोषणात्मक" द्वारा माइक्रोसॉफ्ट का क्या अर्थ है?)

एक general question on SO about declarative programming है, जिसमें कुछ शानदार जवाब हैं।

लेकिन मुझे माइक्रोसॉफ्ट के प्रचारक से this blog post द्वारा थोड़ा सा फेंक दिया गया है। कथात्मक प्रोग्रामिंग के

एक लाभ यह है कि आप संकेत कर सकते हैं आप क्या करना चाहते हैं क्या है, लेकिन यह कैसे करना है नहीं है।

अभी तक इतना अच्छा है कि वास्तव में एसओ प्रश्न पर स्वीकृत उत्तर से सहमत है।

लेकिन तब

आप सिर्फ XAML कोड की कुछ दर्जन लाइनों को देखो और निर्धारित करने में सक्षम हो सकता है "सेवा कार्यान्वयन" के बारे में हिस्सा, बाहर की जाँच कैसे WCF सेवा कॉन्फ़िगर किया गया है और कैसे संबंधित वर्कफ़्लो परिभाषित किया गया है।

कुछ उदाहरणों को देखते हुए, मुझे संक्षेप में जवाब दें कि "नहीं, मैं नहीं कर सकता"। लेकिन इस सामान को स्पष्ट रूप से खारिज करने के बजाय, look at the docs दें।

इसमें थोड़ी देर लग गई है लेकिन आखिर में reality has caught up with satire ... लेकिन यह बात नहीं है - बेशक वे गंभीरता से कुछ ऐसा करने के लिए ऐसा करने का सुझाव नहीं दे रहे हैं। न ही मैं हास्यास्पद शब्दशः के बारे में शिकायत कर रहा हूं, और अजीब विचार यह है कि कोई भी कभी हाथ से ऐसा कुछ लिखता है - यह मानव-पठनीय भाषा की तुलना में एक कंपाइलर के आउटपुट की तरह दिखता है।

मेरे लिए पहेली यह है कि यह "घोषणात्मक" होने का दावा किया जाता है। और फिर भी इसका मूल एक असाइनमेंट स्टेटमेंट है।

There's more here:

घोषणात्मक सेवाओं XAML में एलान के तौर पर परिभाषित और अमूर्त की एक और परत प्रदान कर रहे हैं। मूल रूप से, आप सेवा करने के तरीके के बजाय सेवा को परिभाषित करके सेवा का एक मॉडल बनाते हैं। पूरे सेवा को घोषित किया जा सकता है, जिसमें संचालन के कार्यान्वयन शामिल हैं।

तो हम कहते हैं कि कथात्मक या एलान के तौर पर तीन बार, यह कथात्मक करता है कि अगर। पकड़ लिया। और यदि हम जादू वाक्यांश "आप इसे करने के बजाय क्या करना चाहते हैं" कहते हैं तो हम ध्यान देने के लिए उपेक्षा कर सकते हैं कि अगली वाक्य में, हम सभी के बाद "संचालन के कार्यान्वयन" को निर्दिष्ट करने जा रहे हैं, और इसलिए हम यह कहने जा रहे हैं कि यह कैसे करें।

कि पेज में उदाहरण है:

:

<wma:Sequence> 
    <wma:WriteLine Text ='[String.Concat(String.Concat(String.Concat(String.Concat("Add(", CType(op1, Object)), ","), CType(op2, Object)), ") called")]' /> 
    <wma:Assign x:TypeArguments="xs:Int32" To="[result1]" Value="[op1 + op2]" /> 
</wma:Sequence> 

कौन सा कहने के लिए है, पूरी बात (जंक मैं WF उदाहरण से बाहर काट लिया की एक टन सहित) के लिए ठीक बराबर है

void Add(int op1, int op2, out int result1) 
{ 
    Console.WriteLine("Add(" + op1 + ", " + op2 + ") called"); 
    result1 = op1 + op2; 
} 

तो - बयानों का एक ब्लॉक, वे प्रकट होने वाले क्रम में निष्पादित किए जाने के लिए, और साइड इफेक्ट्स होने पर। लूपिंग के लिए वर्कफ़्लो गतिविधि तत्व निश्चित रूप से हैं (और यदि आप पहले से ही अपना पसंदीदा अनिवार्य कथन नहीं रखते हैं तो आप अपनी गतिविधियों को लिख सकते हैं)। जाहिर है, "एक अपठनीय प्रारूप में अपने कोड को फिर से लिखना" वही बात है जो "अमूर्तता की परत जोड़ना" है।

दोहराने के लिए, यह पागल अपठनीय शब्दशः नहीं है जिसके बारे में मैं शिकायत कर रहा हूं - यह तथ्य है कि यह स्पष्ट रूप से सेवा कार्यान्वयन में ट्यूरिंग-पूर्ण अनिवार्य प्रोग्रामिंग हो रहा है, तो क्या बात है? इससे पहले कि आप इसे जानते हों, हम डीबगर में हमारे वर्कफ़्लो के माध्यम से कदम उठाएंगे, यह पता लगाने की कोशिश कर रहे हैं कि कौन सा असाइनमेंट स्टेटमेंट किस मूल्य को बदलता है, या लूप हमेशा के लिए क्यों चल रहा है।

(विडंबना यह है कि सी # संस्करण में, यह एक छोटे से अधिक कथात्मक, क्योंकि हम निर्दिष्ट नहीं किया है कैसे स्ट्रिंग के टुकड़े concatenated किया जाना चाहिए, इस प्रकार Concat विधि करने के लिए कम कॉल उत्पन्न करने के लिए अनुमति देता है संकलक है।)

तो क्या एक्सएमएल में कुछ लिखना इसे घोषणात्मक बनाता है (साथ ही कम पठनीय)?

उत्तर

3

फिर भी एक और स्वीकृति कि विनिमय प्रारूप के अलावा अन्य क्षमताओं में एक्सएमएल का उपयोग करना बड़ा समय बेकार है।

डब्ल्यूसीएफ में सेवा "परिभाषाएं" पहले दिन से घोषणात्मक रही हैं। हालांकि, सेवा परिभाषाओं से इंटरफेस परिभाषाओं को अलग करना (इसके द्वारा मेरा मतलब है ServiceContractAttribute एट अल) आईएमओ, अच्छी बात है। हालांकि, एक प्रोग्रामिंग भाषा के रूप में एक्सएमएल का उपयोग वास्तव में बेकार है।

मैं इन एक्सएमएल दस्तावेज़ों को देखकर व्यक्तिगत रूप से शुद्ध आतंक के काफी समझदार हमलों को महसूस करता हूं।

0

विंडोज वर्कफ़्लो फाउंडेशन का एक हिस्सा है जिसका अधिक चर्चा नहीं है (माइक्रोसॉफ्ट के बाहर), जो आपके लिए यह स्पष्ट कर सकता है।

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

आपको अपने समस्या डोमेन के लिए विशिष्ट कस्टम गतिविधियों को लेखक से उम्मीद करने की उम्मीद है। ये बॉक्स गतिविधियों के विभिन्न हिस्सों से जुड़े होने के लिए हैं। ये काफी उच्च स्तरीय गतिविधियां होने की संभावना है - "बीमा पॉलिसी का मूल्यांकन" या "रिकॉर्ड रोगी रहने" जैसी चीजें।

एक घोषणात्मक वर्कफ़्लो (या सेवा) आपके द्वारा उपलब्ध समस्या-विशिष्ट गतिविधियों को एक साथ कैसे रखा जाए, यह घोषित करेगा।

+0

"एक साथ कैसे रखा जाए" घोषित करना - लेकिन केवल इस अर्थ में कि सी # में एक विधि निकाय विधि घोषित करता है कि विधि को कैसे कार्यान्वित किया जाए। और "कैसे" शब्द की उपस्थिति पर ध्यान दें, जो घोषणात्मक प्रोग्रामिंग से बचने के लिए है। घोषणात्मक और अनिवार्य के बीच की रेखा क्या है, यह देखते हुए कि सेवा द्वारा किए गए वर्कफ़्लो गतिविधियां आम तौर पर अनिवार्य कदम (हालांकि चंकी) होती हैं और इसलिए उन्हें एक अनिवार्य अनुक्रम में काम करना होता है, और अनिवार्य आउट ऑफ़ द बॉक्स डब्लूएफ गतिविधियों द्वारा चिपकाया जाता है ? –

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