2008-09-03 24 views
19

मैं डोमेन विशिष्ट भाषाओं को फेंकने के तरीके के बारे में अधिक से अधिक सुन रहा हूं और वे व्यवसाय तर्क के तरीके के तरीके को कैसे बदलते हैं, और मैंने Ayende's blog posts और चीजें देखी हैं, लेकिन मुझे वास्तव में वास्तव में कभी नहीं मिला है कि मैं अपना व्यवसाय क्यों लेूँगा मेरे प्रदाता में उपयोग की जा रही विधियों और स्थितियों से दूर तर्क।डीएसएल क्या है और मुझे इसका उपयोग कहां करना चाहिए?

आप कुछ इन बातों का उपयोग कर पृष्ठभूमि, कोई मौका आप वास्तविक laymans संदर्भ में यह डाल सकता है मिल गया है, तो:

  • वास्तव में क्या निर्माण DSLs मतलब है?
  • आप किस भाषा का उपयोग कर रहे हैं?
  • जहां डीएसएल का उपयोग करना समझ में आता है?
  • डीएसएल का उपयोग करने का क्या फायदा है?

उत्तर

17

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

दूसरे शब्दों में, बजाय उन्हें जावा सीखना बनाने का:

DocumentDAO myDocumentDAO = ServiceLocator.getDocumentDAO(); 
for (int id : documentIDS) { 
Document myDoc = MyDocumentDAO.loadDoc(id); 
if (myDoc.getDocumentStatus().equals(DocumentStatus.UNREAD)) { 
    ReminderService.sendUnreadReminder(myDoc) 
} 

मैं एक डीएसएल देता है कि लिख सकते हैं मुझे कहते हैं:

for (document : documents) { 
if (document is unread) { 
document.sendReminder 
} 

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

+0

लेकिन आप वास्तव में है गैर तकनीकी लोगों की है कि कर सकते हैं? – BobbyShaftoe

+0

शायद उन्हें अलग-अलग तकनीकी रूप से वर्णित करना बेहतर है; वे निजीकरण जीते हैं, जावा कोडर नहीं। –

+1

आशा है कि आप जानते हैं कि आपका डीएसएल पायथन है। –

6

डीएसएलडोमेन विशिष्ट भाषा अर्थात दिए गए क्षेत्र में समस्याओं को हल करने के लिए विशेष रूप से डिजाइन भाषा के लिए खड़ा है।
उदाहरण के लिए, मार्कडाउन (एसओ पर पोस्ट संपादित करने के लिए उपयोग की जाने वाली मार्कअप भाषा) को डीएसएल के रूप में माना जा सकता है।

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

डीएसएल संदर्भ में समझ में आता है जहां परंपरागत माध्यमों से \ हल समस्या का वर्णन करना मुश्किल है।

0

डीएसएल मूल रूप से एक विशिष्ट डोमेन समस्या को हल करने के लिए अपना स्वयं का छोटा उपन्यास बना रहा है। यह विधि श्रृंखला का उपयोग कर हल किया जाता है। भाषाएं जहां डॉट्स और कोष्ठक वैकल्पिक सहायता हैं, इन अभिव्यक्तियों को और अधिक प्राकृतिक लगते हैं। यह एक निर्माता पैटर्न के समान भी हो सकता है। डीएसएल भाषाएं स्वयं नहीं हैं, बल्कि कॉल करने के लिए आपके एपीआई पर लागू एक पैटर्न है जो अधिक आत्म व्याख्यात्मक है।

एक उदाहरण गुइस है, Guice Users Guide http://docs.google.com/View?docid=dd2fhx4z_5df5hw8 में कुछ विवरण नीचे दिए गए हैं कि कैसे इंटरफेस कार्यान्वयन के लिए बाध्य हैं, और किस संदर्भ में।

एक और आम उदाहरण क्वेरी भाषाओं के लिए है। उदाहरण के लिए:

NewsDAO.writtenBy("someUser").before("someDate").updateStatus("Deleted") 

कार्यान्वयन में, लौटने या तो एक नया क्वेरी वस्तु, या बस यह अपने आप में आंतरिक रूप से अद्यतन करने के लिए प्रत्येक विधि कल्पना। किसी भी बिंदु पर आप पंक्तियों() के लिए सभी पंक्तियों को प्राप्त करने के लिए श्रृंखला का उपयोग कर श्रृंखला को समाप्त कर सकते हैं, या अपडेट सोमफिल्ड जैसा कि मैंने यहां किया है। दोनों परिणाम वस्तु वापस कर देंगे।

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

संपादित करें: ऐसा लगता है कि कई लोग डीएसएल को अपने स्वयं के पार्सर्स के साथ नई, सरल, एकल उद्देश्य भाषाओं के रूप में देखते हैं। मैं हमेशा संचालन व्यक्त करने के लिए एक सम्मेलन के रूप में विधि श्रृंखला का उपयोग करने के रूप में डीएसएल को जोड़ता हूं।

1

डीएसएल सिर्फ एक फैंसी नाम है और अलग अलग बातें मतलब कर सकते हैं:

  • रेल (रूबी बात) कभी कभी एक डीएसएल कहा जाता है क्योंकि यह विशेष तरीकों के लिए कहते हैं (और भी कुछ बिल्ट-इन लोगों को अधिलेखित करता है) वेब अनुप्रयोगों के बारे में बात करना

  • एएनटी, मेकफ़ाइल सिंटैक्स इत्यादि भी डीएसएल हैं, लेकिन उनका अपना वाक्यविन्यास है। यही वह है जिसे मैं डीएसएल कहूंगा।

इस प्रचार का एक महत्वपूर्ण पहलू: भाषा के संदर्भ में आपके आवेदन के बारे में सोचना समझ में आता है। आप अपने ऐप में किस बारे में बात करना चाहते हैं?

  1. एक 'भाषा' (या तो के रूप में यह पेज या अपने पसंदीदा भाषा के लिए एक वर्ग पदानुक्रम पर दूसरों के द्वारा प्रस्तावित एक असली वाक्य रचना) है कि आपकी समस्या को व्यक्त करने में सक्षम है परिभाषित करें: ये तो अपनी कक्षाओं और तरीकों होना चाहिए।
  2. उस भाषा के संदर्भ में अपनी समस्या का समाधान करें।
4

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

एक डीएसएल केवल औजारों का एक सेट है जो (कम से कम सिद्धांत में) एक विशिष्ट "डोमेन" (यानी दृश्य लेआउट) में विकास को आसान, अधिक सहज और अधिक उत्पादक बनाता है।

जहां तक ​​एक डीएसएल का निर्माण होता है, आयेंडे जैसे कुछ सामानों ने लिखा है "टेक्स्ट पार्सिंग" डीएसएल से संबंधित है, डेवलपर्स (या अंतिम उपयोगकर्ता) को एप्लिकेशन में "प्राकृतिक पाठ" दर्ज करने दें, जो पाठ को पार करता है और इसके आधार पर किसी प्रकार का कोड या आउटपुट उत्पन्न करता है।

आप अपनी खुद की डीएसएल बनाने के लिए किसी भी भाषा का उपयोग कर सकते हैं। माइक्रोसॉफ्ट विजुअल स्टूडियो में बहुत सारे एक्स्टेंसिबिलिटी पॉइंट हैं, और पैटर्न & प्रथाओं "Guidance Automation Toolkit" और Visual Studio SDK विजुअल स्टूडियो को डीएसएल कार्यक्षमता जोड़ने में आपकी सहायता कर सकते हैं।

2

डीएसएल कस्टम भाषाओं के लिए बुनियादी कंपाइलर हैं। उन्हें विकसित करने के लिए एक अच्छा 'मुक्त और खुला' टूल ANTLR पर उपलब्ध है। हाल ही में, मैं एक नई परियोजना पर state machine language उपयोग के लिए इस डीएसएल को देख रहा हूं। मैं उपरोक्त टिम हाउलैंड से सहमत हूं, कि वे किसी और को आपके आवेदन को अनुकूलित करने का एक अच्छा तरीका हो सकते हैं।

2

एफवाईआई, डीएसएल पर एक पुस्तक मार्टिन फाउलर की हस्ताक्षर श्रृंखला के हिस्से के रूप में पाइपलाइन में है।

यदि श्रृंखला में अन्य पुस्तकों के समान मानक है, तो यह एक अच्छा पढ़ा जाना चाहिए।

अधिक जानकारी here

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

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