इस मंच पर पढ़ने के कुछ हफ्तों बाद मैंने सोचा कि यह मेरे लिए पहली पोस्ट करने का समय था।कोड पूर्ण 2, रचना और प्रतिनिधिमंडल
मैं वर्तमान में कोड पूर्ण को फिर से पढ़ रहा हूं। मुझे लगता है कि यह आखिरी बार 15 साल है, और मुझे लगता है कि मैं अभी भी कोड नहीं लिख सकता ;-)
वैसे भी कोड 138 पर कोड पूर्ण होने पर आपको यह कोडिंग डरावनी उदाहरण मिल जाता है। (मैंने कुछ कोड हटा दिए हैं)
class Emplyee {
public:
FullName GetName() const;
Address GetAddress() const;
PhoneNumber GetWorkPhone() const;
...
bool IsZipCodeValid(Address address);
...
private:
...
}
स्टीव सोचता है कि बुरा क्या है कि कार्य कम से कम संबंधित हैं। या उसने लिखा है "कर्मचारियों और दिनचर्या के बीच कोई तार्किक संबंध नहीं है जो ज़िप कोड, फोन नंबर या नौकरी वर्गीकरण की जांच करते हैं"
ठीक है, मैं पूरी तरह से उससे सहमत हूं। शायद नीचे दिए गए उदाहरण की तरह कुछ बेहतर है।
class ZipCode
{
public:
bool IsValid() const;
...
}
class Address {
public:
ZipCode GetZipCode() const;
...
}
class Employee {
public:
Address GetAddress() const;
...
}
यह जांचते समय कि ज़िप मान्य है या नहीं, आपको ऐसा कुछ करने की आवश्यकता होगी।
employee.GetAddress().GetZipCode().IsValid();
और यह Law of Demeter से संबंधित नहीं है।
तो यदि आप तीनों बिंदुओं में से दो को हटाना चाहते हैं, तो आपको इस तरह प्रतिनिधिमंडल और कुछ रैपर कार्यों का उपयोग करने की आवश्यकता है।
class ZipCode
{
public:
bool IsValid();
}
class Address {
public:
ZipCode GetZipCode() const;
bool IsZipCodeValid() {return GetZipCode()->IsValid());
}
class Employee {
public:
FullName GetName() const;
Address GetAddress() const;
bool IsZipCodeValid() {return GetAddress()->IsZipCodeValid());
PhoneNumber GetWorkPhone() const;
}
employee.IsZipCodeValid();
लेकिन फिर आपके पास दिनचर्या है जिसमें कोई तार्किक कनेक्शन नहीं है।
मुझे व्यक्तिगत रूप से लगता है कि इस पोस्ट में सभी तीन उदाहरण खराब हैं। क्या यह कोई और तरीका है जिसके बारे में मैंने सोचा नहीं है?
मुझे पता है कि बहुत सारे प्रोग्रामर कोड को पूरा करते हैं, लेकिन ईमानदारी से मैंने कभी नहीं किया। यह एक बहुत उबाऊ पढ़ा था। – JonH
यह उस पर निर्भर करता है जब आप इसे पढ़ते हैं। यदि आप जूनियर डेवलपर हैं तो यह एक अच्छा पढ़ा है।यदि आप एक अनुभवी डेवलपर हैं तो मुझे लगता है कि पुस्तक में लिखी गई चीजें सिर्फ असाधारण होने के बिना समझ में आती हैं। –
@ जोनएच मैं सहमत हूं - उनकी सर्वश्रेष्ठ पुस्तक वास्तव में "रैपिड डेवलपमेंट" है, जो कुछ लोगों ने पढ़ा है - यह बहुत अच्छा है। –