एक इकाई के प्रसिद्ध व्यापार आईडी को डीडीडी / ओओपी में एक समर्पित प्रकार के साथ प्रतिनिधित्व किया जाना चाहिए?


9

व्यावहारिक रूप से इसका मतलब है कि classएक stringया कुछ अन्य आदिम प्रकार से अधिक एक कस्टम (अपरिवर्तनीय) का उपयोग करना ।

उदाहरण:

  1. प्रकाशन: अंतर्राष्ट्रीय मानक पुस्तक संख्या।
  2. वित्त: अंतर्राष्ट्रीय प्रतिभूति पहचान संख्या।

लाभ:

  1. एक पहचानकर्ता के प्रारूप को सुनिश्चित कर सकता है।
  2. मॉडल का प्रथम श्रेणी का सदस्य बन जाता है।

नुकसान:

  1. दृढ़ता घर्षण (जैसे एंटिटी फ्रेमवर्क) जोड़ता है।
  2. अधिक कोड।

क्या आपको एक कस्टम वर्ग का उपयोग करना चाहिए? ज़रूर। क्या आपको उन्हें आईडी के रूप में उपयोग करना चाहिए? बिल्कुल नहीं :) एक व्यावसायिक अर्थ के साथ एक आईडी रास्ते में परेशानी का कारण होगा।
सोंगो

2
@Songo मेरे लिए यह तर्क है कि आईडी में मूल्य शब्दार्थ होना चाहिए , लेकिन आदिम प्रकार केवल मूल्य शब्दार्थ के साथ ही नहीं हैं, इसलिए यह आवश्यक नहीं है कि कक्षाओं के imo को नियमबद्ध करें। जब तक मैं उस बिंदु को बनाना नहीं भूल गया, तब तक जवाब देने के लिए स्वतंत्र महसूस करता हूं।
Ixrec

1
मेरा एक पुराना प्रश्न इस विषय पर अलग-अलग राय के साथ छू रहा है : programmers.stackexchange.com/questions/281827/… मैं प्रकार बनाने के साथ गया और ऐसा करना जारी रखता हूं।
Ziv

जवाबों:


6

यदि आप कक्षा को स्ट्रिंग नहीं होने की गयी जटिलता को सही ठहराने के लिए पर्याप्त उपयोगी कार्यक्षमता दे सकते हैं, तो ऐसा करें। आईएसबीएन और आईएसआईएन जैसे पहचानकर्ताओं के लिए, मुझे संदेह है कि यह मामला नहीं है।

उपयोगी होने के लिए एक पहचानकर्ता वर्ग के लिए, मुझे उम्मीद है कि यह कुछ इस तरह दिखाई देगा:

class ISIN {
    fromCUSIP()
    fromRawISINString()
    toString(ISIN::FormatType)
    getExchange()
    getCountryCode()
    getLastFourDigits()
    getWhateverCode()
    ...
}

यदि इसके बजाय यह इस तरह दिखता है:

class ISIN {
    getString()
    setString()
}

तब मैं पूरी तरह से कक्षा को खोदता था, हर जगह नियमित तार का उपयोग करता था, और सुनिश्चित करता था कि मैं सभी प्रासंगिक चर नामों में "आइसिन" का लगातार उपयोग करता हूं।

ध्यान दें कि कुछ भाषाओं में, एक नए प्रकार को जोड़ने से विशिष्ट कार्यक्रमों में लगभग कोई "जोड़ा जटिलता" नहीं है, इस मामले में आपको नया प्रकार बनाने के लिए प्रोत्साहित किया जाएगा, भले ही इसकी कोई कार्यक्षमता न हो। लेकिन C ++ जैसी अधिकांश पारंपरिक OOP भाषाओं के लिए ऐसा नहीं है।


6

मेरा मत होता कि इसके लिए जाएं। मैं तर्क दूंगा कि इस मामले में फायदे नुकसान हैं। अतिरिक्त कोड बहुत कम होने की संभावना है और दृढ़ता का मुद्दा बहुत आसानी से हल किया जा सकता है अपने नए वर्ग और डेटाबेस के प्रकार के बीच किसी प्रकार का कनवर्टर प्रदान करना (मैंने कभी भी एंटिटी फ्रेमवर्क का उपयोग नहीं किया है, लेकिन मुझे पता है कि यह अपेक्षाकृत दर्द रहित है हाइबरनेट)।

अपनी खुद की कक्षा को परिभाषित करके आपको मिलने वाले फायदों में से एक यह है कि कंपाइलर यह सुनिश्चित कर सकता है कि आईएसबीएन या आईएसआईएन चाहने वाले किसी भी तरीके को संकलन समय पर पता चल जाएगा यदि आप कोशिश करते हैं और गलत मूल्य में पास होते हैं। यह गलती से आपकी इकाई में उस क्षेत्र को अधिलेखित करने के लिए बहुत कठिन होगा। हम इस तरह पूरी तरह से आम त्रुटियों से बच सकते हैं:

book.setAuthor(otherBook.getAuthorName());
book.setIsbn(otherBook.getAuthorName());
book.setPrice(otherBook.getPrice())

यदि आईएसबीएम एक आदिम प्रकार के बजाय एक वर्ग है तो उपरोक्त कोड भी संकलन नहीं करेगा, जिससे बहुत बाद में डिबगिंग समय की बचत होती है।


1
बसने और पाने वाले? क्या यह 1992 है?
मील्स रूट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.