हां, कमियां हैं
कोड जो पढ़ने में आसान है वह अच्छा है, लेकिन यह भी बताएं कि कोड क्या संचार करता है। जब किसी वस्तु के तरीके हमेशा वस्तु को लौटाते हैं, तो यह कुछ चीजों का संचार करता है:
- मुझे उन्नत कॉन्फ़िगरेशन की आवश्यकता है जो जरूरी नहीं है कि किस क्रम में चीजें सेट या कॉन्फ़िगर की जानी चाहिए
- प्रत्येक बाद की विधि कॉल अंतिम पर बनती है
मान्य उपयोग मामला: तदर्थ डेटाबेस प्रश्न
क्लास लाइब्रेरी अधिकांश हर भाषा में मौजूद होती है जो आपको हार्ड कोडेड SQL का सहारा लिए बिना डेटाबेस को क्वेरी करने की अनुमति देती है। उदाहरण के लिए .NET के लिए एंटिटी फ्रेमवर्क लें:
DBContext db = new DBContext();
List<Post> posts = db.Posts
.Where(post => post.Title.Contains("Test"))
.OrderBy(post => post.DateCreated)
.ToList();
यह एक धाराप्रवाह इंटरफ़ेस है जहां प्रत्येक बाद की विधि कॉल पिछले एक पर बनाता है। इन कॉलों को पढ़ना तार्किक रूप से डेटाबेस को क्वेरी करने के संदर्भ में समझ में आता है।
अमान्य उपयोग मामला: गुण स्थापित करने के लिए सिंथेटिक चीनी
अब Post
कक्षा के साथ समान पैटर्न का उपयोग करते हैं :
public class Post
{
public string Title { get; set; }
public DateTime DateCreated { get; set; }
public string Body { get; set; }
public Post SetTitle(string title)
{
Title = title;
return this;
}
public Post SetDateCreated(DateTime created)
{
DateCreated = created;
return this;
}
public Post SetBody(string body)
{
Body = body;
return this;
}
}
अब देखते हैं कि आप इस वर्ग का उपयोग कैसे करेंगे:
Post post = new Post()
.SetTitle("Test")
.SetDateCreated(DateTime.Now)
.SetBody("Just a test");
जब मैं इस कोड को देखता हूं, तो मैं तुरंत यह प्रश्न पूछता हूं: "कॉल करने के बाद SetBody
, क्या यह डेटाबेस को क्वेरी करता है? क्या मुझे 'मैं कर रहा हूं?' कहने के लिए किसी अन्य विधि को कॉल करने की आवश्यकता है?
कक्षा का उपयोग करके जंजीर पद्धति कॉल कोड से क्या संवाद करती है Post
?
- मेरे पास एक जटिल सेटअप है
- प्रत्येक विधि कॉल पिछले एक पर बनाता है
क्या यह वास्तव में सच है? नहीं। Post
कक्षा में एक जटिल सेटअप नहीं है। शीर्षक, दिनांक बनाया गया है और शरीर एक दूसरे पर अधिक जटिल अंत लक्ष्य के लिए नहीं बनाते हैं। आपने एक गोल छेद में एक वर्ग खूंटे को मसला है।
सेल्फ-रेफ़रेंशियल मेथड चेंजिंग की कमी यह है कि आप संवाद करते हैं कि कुछ करने के लिए मल्टीपल मेथड कॉल की आवश्यकता होती है, और यह कि प्रत्येक कॉल लास्ट में बनाता है। यदि यह सच नहीं है, तो विधि जंजीर अन्य प्रोग्रामर को गलत बात बता सकता है।
जब आपके सहकर्मियों ने कहा:
धाराप्रवाह इंटरफेस केवल सुविधा के लिए लागू नहीं किया जाना चाहिए, लेकिन शब्दार्थ के लिए
वे बिल्कुल सही थे। एक धाराप्रवाह इंटरफ़ेस, या विधि का पीछा करते हुए, अपने आप में कुछ ऐसा संचार करता है जो सच नहीं हो सकता है।