विनिर्देश के पीछे मुख्य विचार यह है कि यह एक विधेय है, जो अक्सर इसके साथ तार्किक ऑपरेटर्स का उपयोग
विनिर्देश एक स्थापित रीतिवाद का रूपांतरण है तात्पर्य है (एरिक इवांस DDD, पी। 274)
उदाहरण के लिए हम कह सकते हैं कि बॉक्स लाल है, यानी कुछ RedSpecification को संतुष्ट करता है। हम कुछ ग्रीन स्पेसिफिकेशन, और यहां तक कि एक समग्र RedOrGreenSpecification घोषित कर सकते हैं। हम कुछ उन्नत रूपरेखा है कि विनिर्देशों के लिए तार्किक आपरेशनों का समर्थन करता है है, तो ऐसा लगता है जैसे
BoxSpecification redBoxSpec = BoxSpecification.forColor(BoxColor.RED);
BoxSpecification greenBoxSpec = BoxSpecification.forColor(BoxColor.GREEN);
BoxSpecification redOrGreenBoxSpec = redBoxSpec.or(greenBoxSpec);
कुछ तो हम कुछ रिपोजिटरी से सभी लाल/हरी बक्से क्वेरी करने के लिए उदाहरण के लिए विनिर्देश उपयोग कर सकते हैं हो सकता है:
Collection<Box> boxes = boxRepository.findAll(redOrGreenBoxSpec);
नीति के लिए - यह स्ट्रैटजी पैटर्न का एक रूप है, लेकिन इसका मुख्य उद्देश्य व्यापार नियमों को समाहित करना कुछ घोषणात्मक रूप है।
तकनीकी तौर पर - यह हमेशा रणनीति का एक सीधा कार्यान्वयन नहीं है - पहले चरण में यह सिर्फ एक अलग वर्ग हो सकता है (के रूप में यह नीले रंग पुस्तक के प्रथम अध्याय में दिखाया गया है), लेकिन यह बाद में आसानी से
बढ़ाया जा सकता है
नीति स्ट्रैटजी के रूप में जाने जाने वाले डिजाइन पैटर्न के लिए एक और नाम है, यह आमतौर पर विभिन्न नियमों को प्रतिस्थापित करने की आवश्यकता से प्रेरित होता है, जहां तक हमें पता नहीं है। लेकिन अवधारणा हम पर कब्जा करने की कोशिश कर रहे हैं एक नीति के अर्थ, जिसमें डोमेन संचालित डिजाइन
उदाहरण के लिए हम जनवरी में पीले बक्से में प्रस्तुत करता है पैक एक समान रूप से महत्वपूर्ण प्रेरणा है फिट होता है, और लाल रंग में फ़रवरी
public class Box{
public BoxColor getColor(){}
public void recolor(BoxColor color){}
}
public class BoxFactory{
public Box createDefaultBox(SomeDate date){
NewBoxPolicy boxPolicy = PolicyRegistry.getNewBoxPolicyForDate(date);
Box box = new Box();
boxPolicy.prepareBox(box);
return box;
}
}
public interface NewBoxPolicy{
void prepareBox(Box box);
}
public class FebruaryNewBoxPolicy implements NewBoxPolicy{
public void prepareBox(Box box) { box.recolor(BoxColor.RED}; }
}
public class JanuaryNewBoxPolicy implements NewBoxPolicy{
public void prepareBox(Box box) { box.recolor(BoxColor.YELLOW}; }
}
public class PolicyRegistry{
public static NewBoxPolicy getNewBoxPolicyForDate(SomeDate date){
switch (date.month()){
case SomeMonth.JANUARY: return JANUARY_NEW_BOX_POLICY;
case SomeMonth.FEBRUARY: return FEBRUARY_NEW_BOX_POLICY;
default: throw new AssertionError();
}
}
ऐसा नहीं है कि नीति कार्यों को संपुटित कर सकते हैं समझने के लिए है, जबकि विनिर्देश एक वस्तु के गुण (इन गुणों दोनों संतुष्ट कर सकते हैं या व्यापार की आवश्यकताओं को संतुष्ट नहीं है) का वर्णन करता है महत्वपूर्ण है में बक्से। कुछ सत्यापन नीति निश्चित रूप से आवश्यकताओं को संतुष्ट करने के लिए विनिर्देशों का उपयोग कर सकती है।
तो आपके पास अपनी परियोजना में कई अलग-अलग विनिर्देश उदाहरण हो सकते हैं, और वे व्यापार बिंदु से वैध और अमान्य वस्तुओं दोनों का वर्णन कर सकते हैं।असल में, विनिर्देशों को कोई अर्थ नहीं हो सकता है: उदाहरण के लिए यदि आपके पास कोई उत्पाद खोज साइट है, तो उपयोगकर्ता "एक्सबॉक्स" नामक उत्पाद की खोज करने का अनुरोध निर्दिष्ट कर सकता है, लेकिन विक्रेता नाम "सोनी" के साथ, अगर ज्ञान केवल विशिष्ट विक्रेता आपके उत्पाद में विशिष्ट उत्पादों का उत्पादन नहीं कर सकते हैं। (ताकि कोड परियोजना के विभिन्न भागों में बिखरे हुए है नहीं)
नीति का महत्वपूर्ण पहलू यह है कि इसकी मंशा वास्तविक व्यापार के नियम को संपुटित करने के लिए है है, इसलिए जब नियमों को बदलने आप आसानी से इसी वर्ग पा सकते हैं। तो आपके पास अपनी परियोजना में कई विनिर्देश हो सकते हैं, लेकिन नीतियों की एक प्रबंधनीय संख्या हो सकती है, और उन नीतियों को ढूंढना और बदलना आसान होना चाहिए।
पीएस कृपया ध्यान दें कि यह पोस्ट सिर्फ एक उदाहरण है और अधिक इंजीनियरिंग करने का लाइसेंस नहीं है, बेशक आपको सबसे सरल डिजाइन का उपयोग करना चाहिए, यह सामान्य ज्ञान का विषय है।
मैं कहूंगा कि विनिर्देशों को उदाहरणों और नीतियों की विशेषताओं का वर्णन करने पर लक्षित किया गया है जो क्रियाओं का वर्णन करने के बारे में हैं। लेकिन मुझे वास्तव में यकीन नहीं है, हालांकि मैंने पुस्तक भी पढ़ी है। – SpaceTrucker