2012-03-22 10 views
5

जब आपके पास कोई इकाई है, जैसे UserEntity, id संपत्ति डीबी में इसकी प्राथमिक कुंजी से ली गई है - क्या आपको setId() जैसे एक सेटर विधि प्रदान करनी चाहिए?इकाई की आईडी कन्स्ट्रक्टर तर्क के रूप में या एक सेटर विधि के माध्यम से?

  • db
  • दो (या अधिक) UserEntities ही id लेकिन विभिन्न गुणों के साथ किसी भी समय मौजूद हो सकता है में अन्य UserEntities के संभावित आकस्मिक अधिलेखित करने के लिए दरवाजा खोलता है:

    के खिलाफ कुछ तर्क । (अगर मैं db से 3 अलग उपयोगकर्ता खींच लिया और एक ही करने के लिए अपने id मूल्यों को निर्धारित) के लिए

कुछ तर्क:

  • अगर मैं एक id साथ UserEntity का दृष्टांत की जरूरत नहीं है कन्स्ट्रक्टर में (चूंकि इसमें एक सेटर विधि है), मैं UserEntity ऑब्जेक्ट के तरीकों का उपयोग अस्थायी/नकली/नए उपयोगकर्ता मानों के साथ कर सकता हूं ... इसे पहले जारी रखने के बिना।

एक सेटर प्रदान करें (और निर्माता में एक id मजबूर नहीं है), या निर्माता में एक id मजबूर, और सेटर निकालना चाहते हैं?

उत्तर

3

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

+0

उत्तर के लिए धन्यवाद! जब दृढ़ता परत पहचान सेट करती है, तो क्या यह कन्स्ट्रक्टर के माध्यम से या एक सेटर के माध्यम से होनी चाहिए? क्या इकाई पहचान के बिना तत्काल हो सकती है? – johnnietheblack

+1

यह एक सेटटर के माध्यम से या भाषा के आधार पर प्रतिबिंब के माध्यम से होना चाहिए। और किसी पहचान के बिना तत्काल होना संभव है, हालांकि किसी को यह पता होना चाहिए कि जब एक क्षणिक इकाई लगातार हो जाती है, तो ऑब्जेक्ट स्मृति में रहता है, जबकि ऑब्जेक्ट स्मृति में रहता है, उदाहरण के लिए हैशकोड पहचान से प्राप्त होता है। – eulerfx

1

@johnnietheblack, मैं एक निजी सेटर और एक सार्वजनिक गेटर संस्थाओं की आईडी को बनाने के पसंद करते हैं। मान्यताओं में सेटर (यदि आवश्यक हो) में होगा और मैंने इस आईडी को विशेष रूप से रचनाकारों में सेट किया है। संख्यात्मक आईडी को शून्य मूल्यों के साथ तत्काल किया जाता है जो मुझे उनके जीवन चक्र को ट्रैक करने में मदद करते हैं।

एरिक इवांस द्वारा डोमेन संचालित डिजाइन मॉडल डोमेन के बारे में बात करते हैं जब मार्टिन फाउलर द्वारा एंटरप्राइज़ एप्लिकेशन आर्किटेक्चर के पैटर्न इस एप्लिकेशन के बुनियादी ढांचे में गहरे हैं। मेरा मानना ​​है कि वे पूरक हैं और मैं अनुशंसा करता हूं।

+0

धन्यवाद! मुझे चिंता है कि अर्थशास्त्र मुझे वापस रख रहे हैं, क्योंकि मैं PHP का उपयोग करता हूं, और मुझे यकीन नहीं है कि एक निजी सेटर क्या पूरा करेगा? PHP में इसका मतलब होगा, एक निजी setId() विधि, और इकाई उस विधि का उपयोग कर सकती है, लेकिन कोई अन्य इकाई नहीं कर सकती? – johnnietheblack

+0

मुझे लगता है कि कई बार भाषा अज्ञेयवादी होने की कोशिश करना एक विशिष्ट भाषा के बारे में पूछना कठिन है ... हाहा – johnnietheblack

संबंधित मुद्दे