पृष्ठभूमि
मैं "क्लीन कोड बुक" पढ़ रहा हूं, और, पार्लेल में, मैं बैंकर अकाउंट की तरह कैलिसथेनिक ऑब्जेक्ट्स काटा पर काम कर रहा हूं, और मैं उस नियम पर अटक गया हूं:
कैलिस्थेनिक वस्तुओं का 9 वां नियम यह है कि हम गेटटर या सेटर का उपयोग नहीं करते हैं।
यह बहुत मजेदार लगता है, और मैं इस सिद्धांत से सहमत हूं। इसके अलावा, स्वच्छ संहिता के पृष्ठ 98-99 पर, लेखक बताता है कि गेटर्स / सेटर एब्सट्रैक्ट तोड़ते हैं, और हमें अपनी वस्तु नहीं मांगनी है, लेकिन हमें अपनी वस्तु को बताना होगा।
यह मेरे दिमाग में सही अर्थ रखता है, और मैं इस सिद्धांत से पूरी तरह सहमत हूं। समस्या व्यवहार में आती है।
प्रसंग
उदाहरण के लिए, मेरे पास एक एप्लिकेशन है जिसमें मुझे कुछ उपयोगकर्ताओं को सूचीबद्ध करना है, और उपयोगकर्ता विवरण प्रदर्शित करना है।
मेरा उपयोगकर्ता निम्न से बना है:
-> Name
--> Firstname --> String
--> Lastname --> String
-> PostalAddress
--> Street --> String
--> PostalCode --> String
मुसीबत
जब मैं केवल साधारण जानकारी प्रदर्शित करने की आवश्यकता होती है, तो मुझे गेट्स से बचने के लिए मैं क्या कर सकता हूं या क्या कर सकता हूं ( और मुझे इस बात की पुष्टि करनी होगी कि मुझे एक साधारण में Firstname मान प्रदर्शित करने के लिए उस विशेष क्षेत्र पर अतिरिक्त संचालन की आवश्यकता नहीं है ) यादृच्छिक) आउटपुट समर्थन?
मेरे मन में क्या आता है
एक समाधान बनाना है:
user.getName().getFirstName().getStringValue()
जो परोक्ष रूप से भयानक है, जो कैलिसथेनिक वस्तुओं के कई नियमों को तोड़ रहा है, और डेमेटर कानून को तोड़ रहा है।
एक और कुछ इस तरह होगा:
String firstName = user.provideFirstnameForOutput();
// That would have called in the user object =>
String firstName = name.provideFirstnameForOutput();
// That would have called in the name object =>
String firstName = firstname.provideFirstnameForOutput();
लेकिन मैं इस समाधान के साथ सहज महसूस नहीं करता, कि केवल एक "उच्च क्रम एक्सेसर" लगता है, जैसे मानक गेटटर / सेटर को दरकिनार करना, जो केवल डेमेटर कानून से मेल खाता है ...
कोई उपाय ?