यहाँ इस सिद्धांत का एक वास्तविक दुनिया उदाहरण है (PHP में)
समस्या विवरण:
मैं विभिन्न प्रकार की सामग्री चाहता हूं कि उनके साथ टिप्पणियां/चर्चा हो। यह सामग्री फ़ोरम विषय से, किसी समाचार आलेख में, उपयोगकर्ता की प्रोफ़ाइल पर, वार्तालाप-शैली निजी संदेश में कुछ भी हो सकती है।
वास्तुकला
हम एक फिर से प्रयोग करने योग्य DiscussionManager
वर्ग जो किसी दिए गए सामग्री संस्था के लिए एक Discussion
देता चाहते है। हालांकि, उपरोक्त चार उदाहरण (और कई और) सभी अवधारणात्मक रूप से अलग हैं। अगर हम उन्हें उपयोग करने के लिए DiscussionManager
चाहते हैं, तो सभी चार + को एक आम इंटरफ़ेस होना चाहिए जो वे सभी साझा करते हैं। DiscussionManager
के लिए उनका उपयोग करने के लिए कोई अन्य तरीका नहीं है जब तक कि आप नग्न होने के लिए अपने तर्क नहीं चाहते (उदा। कोई प्रकार की जांच नहीं)।
समाधान: इन तरीकों के साथ Discussable
इंटरफ़ेस:
attachDiscussion($topic_id)
detachDiscussion()
getDiscussionID()
फिर DiscussionManager
इस प्रकार दिखाई देंगे:
class DiscussionManager
{
public function addDiscussionToContent(Discussable $Content)
{
$Discussion = $this->DiscussionFactory->make(...some data...);
$Discussion->save() // Or $this->DiscussionRepository->save($Discussion);
$Content->attachDiscussion($Discussion->getID()); // Maybe saves itself, or you can save through a repository
}
public function deleteDiscussion(Discussable $Content)
{
$id = $Content->getDiscussionID();
$Content->detatchDiscussion();
$this->DiscussionRepository->delete($id);
}
public function closeDiscussion($discussion_id) { ... }
}
इस तरह, DiscussionManager
यह का उपयोग करता है विभिन्न सामग्री प्रकार के असंबंधित से कोई भी व्यवहार के बारे में परवाह नहीं है। यह केवल उन व्यवहारों की परवाह करता है जिनकी आवश्यकता है, भले ही वे व्यवहार किस प्रकार से जुड़े हों। इसलिए Discussable
इंटरफ़ेस के लिए प्रत्येक सामग्री प्रकार को आप चर्चा करना चाहते हैं, तो आप इंटरफ़ेस पृथक्करण सिद्धांत का उपयोग कर रहे हैं।
यह भी एक स्थिति है जहाँ एक सार आधार वर्ग एक अच्छा विचार नहीं है का एक अच्छा उदाहरण है। एक फोरम विषय, उपयोगकर्ता प्रोफ़ाइल, और समाचार लेख भी दूर से धारणात्मक एक ही बात है, इस प्रकार उन्हें चर्चा व्यवहार के वारिस को पाने के लिए प्रयास नहीं कर रहे एक असंबंधित माता-पिता को अजीब युग्मन की ओर जाता है। चर्चाओं का प्रतिनिधित्व करने वाले एक विशिष्ट इंटरफ़ेस का उपयोग करके, आप यह सुनिश्चित कर सकते हैं कि जिन संस्थाओं पर आप चर्चा करना चाहते हैं, वे क्लाइंट कोड के साथ संगत हैं जो उन चर्चाओं का प्रबंधन करेंगे।
यह उदाहरण भी PHP में लक्षण के उपयोग के लिए एक अच्छे उम्मीदवार, क्या इसके लायक है के लिए हो सकता है।
लघु और बिंदु – Gordon
वाह .. धन्यवाद! एक और 5 मिनट के लिए स्वीकार नहीं कर सकते :) – hangar18
+1। क्लासिक "गंध" जो आपको बताती है कि आप इस सिद्धांत का पालन नहीं कर रहे हैं वह एक ग्राहक है जो एक इंटरफ़ेस (निर्भर करता है) एक इंटरफ़ेस है जहां क्लाइंट केवल इंटरफ़ेस के तरीकों का सबसेट कहता है। एक विस्तृत स्पष्टीकरण के लिए समय निकालने के लिए – TrueWill