मैं वर्तमान में एक PHP अनुप्रयोग विकसित कर रहा हूं जो बैकएंड के रूप में एक्सेस डेटाबेस का उपयोग कर रहा है। पसंद के अनुसार आप समझते हैं ... डेटाबेस मूल रूप से उपयोग किया जाता है और इसका उपयोग कर आवश्यकताओं का हिस्सा है।
इस डेटाबेस के साथ समस्याओं में से एक यह है कि कॉलम नामों में सबसे पागल नामकरण सम्मेलन होता है जिसे आप संभवतः कल्पना कर सकते हैं। अपरकेस, लोअरकेस, अंडरस्कोर, स्पेस और सादा पागल। उदाहरण के लिए कॉलम "लिंग" में एक तिथि है। और इसलिए कॉलम "उपयोगकर्ता 2" करता है। बहुत कुछ है लेकिन आपको विचार मिलता है।
इस के साथ सामना करने के लिए मैंने PHP चर के लिए डेटाबेस कॉलम मैप करने के लिए एक सरणी बनाने का निर्णय लिया ताकि हम पागलपन से कोड को अलग कर सकें। हालांकि मेरे सहयोगी का मानना है कि मैं चीजों को अधिक जटिल बना रहा हूं और हमें संबंधित PHP चर के लिए डेटाबेस के कॉलम नामों का उपयोग करना चाहिए ताकि हमें यह पता लगाने के लिए मैपिंग सरणी से गुज़रने की आवश्यकता न हो।
तो मेरा सवाल यह है ... क्या मैं सही काम कर रहा हूं या क्या मैं चीजों को जटिल बना रहा हूं?के.आई.एस.एस. और फ़ैशनिंग गायपैथ
उत्तर
बिल्कुल सही आप सही रास्ते पर हैं। यदि आप पागलपन को दूर नहीं करते हैं तो आप अंततः पागलपन के लिए मर जाएंगे।
हालांकि आपके सहयोगी के पास एक वैध बिंदु है, इसलिए मेरा सुझाव है कि आप PHP में कॉलम मैपिंग के डेटा को निर्धारित करने का एक आसान तरीका भी कोड करें।
यह इसे सरल रखने के बारे में नहीं है, यह एक ठोस नींव को फिर से बनाने के बारे में है।
जो चीज मुझे चिंता करेगी वह यह है कि इस तरह के यादृच्छिक डिजाइन अक्सर कुछ व्यवसाय नियमों को छुपाते हैं, जैसे ... "यदि लिंग एक तारीख है तो उन्होंने किसी बिंदु पर एक विजेट खरीदा होगा इसलिए वे नहीं कर सकते lubdub fribbish करने की अनुमति दी जा सकती है ... "- पागल मुझे पता है, लेकिन इससे अधिक आम होना चाहिए।
+10 अगर मैं कर सकता था। पागलपन में मत डालो, अन्यथा आपका कोड लिख जाएगा-एक बार, पढ़ा-कभी नहीं। "तो, परिवर्तनीय $ डीडी है, जिसमें कुछ मामलों में प्रेषक का पता होता है, लेकिन अन्य परिस्थितियों में देय भुगतान। यह परिवर्तनीय $ पंट्स में बिंदुओं की संख्या द्वारा निर्धारित किया जाता है। " (वास्तविक उदाहरण (या रैली!)) – Piskvor
+1 "लुबडब को फ्रिबिश" के लिए +1 –
नाम असाधारण रूप से महत्वपूर्ण हैं। यदि आप अपने आवेदन को बनाए रखने योग्य बनाना चाहते हैं, तो कोड बेस आगे बढ़ने से पहले उन्हें ठीक करें।
यह एक अच्छा सवाल है क्योंकि यह आईएमएचओ कोडिंग के दिल से बात करता है।
मैं आपके साथ जाऊंगा और बुरे नामों को पठनीय सभ्य नामों में बताऊंगा। परिणाम के लिए थोड़ा जटिलता है अधिक तार्किक रूप से समझने योग्य और पठनीय कोड।
शैतान के वकील को खेलने के लिए, सिस्टम के साथ काम करने के लिए आपके अल्पकालिक स्मृति भार में संकेत की अनावश्यक परत न होने के लिए कुछ कहा जाना चाहिए। एक बार कोड से परिचित होने के बाद, आपको पता चलेगा कि किस चर में है, इसलिए मुख्य लाभ स्क्रैच से कोड को उठाकर किसी नए व्यक्ति के लिए है। हालांकि, उस समस्या को ठीक से ठीक करने के लिए डेटाबेस स्कीमा को ठीक करने की भी आवश्यकता होगी जो (ए) काम का एक महत्वपूर्ण निकाय होगा, और (बी) बड़े पैमाने पर समस्या को दूर कर दें।
इस प्रश्न का कोई काला और सफेद जवाब नहीं है, और आपकी विशिष्ट समस्या के स्पष्ट उत्तर की कमी से पता चलता है कि आप सोने के कुत्तों को झूठ बोलना चाहेंगे।
दूसरी तरफ, यदि एक क्लीनअप ऑपरेशन संभावना की सीमाओं के भीतर है तो आप इसे पुन: फैक्टरिंग प्रकार के आधार पर कर सकते हैं, जिससे अवसर बढ़ने के साथ डीबी कॉलम नामों को बढ़ाना होगा।
यह वास्तव में इस बात पर निर्भर करता है कि एप्लिकेशन कितना बड़ा है, इस बात पर निर्भर करता है कि आप सीधे अपने सिर में सभी विसंगतियों को रख सकते हैं या नहीं। – Kibbee
ऐप एक खिलौना से परे विकसित होने के बाद, पागलपन झूठ बोलता है। एक बार जब मैं एक ऐसी परियोजना में आया जो इस तरह से शुरू हुआ: "आपको पता चलेगा कि किस चर में है"। जब मैं अंदर आया, तो यह बढ़ गया है "कोई नहीं जानता कि यह क्या करता है, स्पर्श न करें"। कुछ मिनटों में तय होने वाली बगों में घंटों लगते थे, यहां तक कि दिन भी ढूंढते थे। – Piskvor
सहमत हुए। जटिलता के एक निश्चित स्तर पर, आपको वास्तव में एक अच्छी तरह व्यवस्थित प्रणाली की आवश्यकता है ताकि इसे समझ सकें। – ConcernedOfTunbridgeWells
आपने यह नहीं कहा कि आप एक्सेस में कॉलम का नाम बदल नहीं सकते हैं, तो .... ऐसा करें! एक और संभावना प्रत्येक तालिका के लिए विचार बनाना होगा, और दृश्य में कॉलम का नाम बदलें। फिर तालिका कर्मचारियों के साथ काम करने की बजाय, आप दृश्य vémployees के साथ काम करते हैं। अगर मुझे सही तरीके से याद किया जाता है, तो एक्सेस आपको दृश्यों को अपडेट करने और साथ ही उनसे चयन करने देता है।यदि आप PHP के साथ ओआरएम का उपयोग कर रहे हैं, तो हो सकता है कि वह अद्यतनों को अद्यतन करने में सहायता न करे।
क्षमा करें, स्पष्टीकरण भूल गए .. एक्सेस डेटाबेस को बदला नहीं जा सकता है। –
ऐसा नहीं सोचा था ... तो मेरा सुझाव है कि आप दृश्य दृष्टिकोण को आज़माएं। – RedFilter
मैं नहीं कहूंगा कि आप चीजों को जटिल बना रहे हैं। Anti Corruption Layer
हार्ड कोडिंग तालिका नाम और स्तंभ नाम एक अच्छा विचार भी जब नाम मतलब नहीं है:
एरिक इवान की किताब Domain Driven Design इस के लिए एक सुंदर अवधि है।
मुझे नहीं पता कि सरणी का उपयोग करना सबसे अच्छा समाधान है या नहीं। मैं वास्तव में PHP से परिचित नहीं हूं लेकिन मैं टेबल नामों को स्टोर करने के लिए निरंतर तारों की तरह कुछ चला गया होता। जिन भाषाओं में मैं काम करता हूं, उनमें अधिक पठनीय कोड होगा।
आप इस डेटाबेस के साथ फंसने के लिए बहुत दुर्भाग्यपूर्ण हैं, लेकिन मुझे लगता है कि क्षेत्र के नामों को सारणीबद्ध करने का एक तरीका कुछ और समझदार है।
मैं शायद डाटाबेस नाम, sanitized नाम, प्रकार और सामग्री के लिए एक फ़ील्ड बना सकता हूं जब आप डीबी से डेटा खींच रहे हों। इससे चीजों को एक साथ खींचने का एक सुविधाजनक तरीका मिलेगा ताकि आप पागल नाम योजना को दूर करने के लिए केवल मानचित्रण न करें।
बिल्कुल सही आप सही काम कर रहे हैं। मेरी राय में वहां कुछ स्वच्छता लागू करना बेहतर है। आगे बढ़ते हुए, यदि आप उस डेटाबेस या उसके किसी भी कॉलम नाम को बदलने का निर्णय लेते हैं तो आप तर्क फेंक नहीं पाएंगे। यदि आप अपना मैपिंग सही तरीके से बनाते हैं, तो बस नए टेबल/कॉलम को सीधे प्लग करना आसान होना चाहिए।
यदि कुछ भी हो, तो आप जो भी कर रहे हैं, वह आपके समग्र समाधान की चपलता में सुधार करता है।
बेशक मैं अभी भी कहूंगा कि केआईएसएस आपके मानचित्रण की विधि पर लागू होता है!
आवेदन के अंत में उचित कॉलम नामों का उपयोग करना सबसे अच्छा है जो आप कर सकते हैं। और आपको इसे तब तक करना चाहिए जब तक आप देखना नहीं चाहते कि "वह क्षेत्र फिर से क्या होना चाहिए?" जब आप कुछ और करने के बाद इसे फिर से देखना होगा।
आपके सहयोगी का मुद्दा चीजों को कम नहीं करना है। यह भी वैध है।
तो किसी विधि या विधियों में फ़ील्ड तक पहुंच को समाहित करें और उस विधि को अनुवाद करें। नक्शे का उपयोग करना यह एक प्रदर्शन समस्या नहीं होनी चाहिए।
वास्तव में एक ऑब्जेक्ट में डेटा स्रोत पर सभी मैपिंग डालने से आपकी मदद मिल सकती है यदि आपका ग्राहक वास्तविक डेटाबेस का उपयोग करने के लिए पुनर्विचार करता है। और ग्राहक अपनी राय बदलना पसंद करते हैं।
क्यों नहीं प्रत्येक तालिका में मैप करने वाले वर्गों के साथ एक डातालियर बनाएं। फिर आप कॉलम तक पहुंचने के लिए कक्षा विधियों को परिभाषित कर सकते हैं और जो भी नाम चाहते हैं उसे दे सकते हैं। फिर datalayer डेटाबेस एक्सेस कोड एकमात्र चीज है जिसे वास्तविक कॉलम नामों के बारे में जानना आवश्यक है। मुझे संदेह है कि कोई (शायद कई सोनोन) पहले से ही ऐसा करने के लिए एक ढांचा विकसित कर चुका है। Google "php orm"।
बस उन विचारों को बनाएं जहां इसकी सबसे अधिक आवश्यकता है।
एक ORM का उपयोग करें, आप db जल्द ही ...
तुम अब भी डेटाबेस बनाए रखने की जरूरत ही बदलना होगा। एक संभावित दृष्टिकोण मैं सुझाव दे सकता हूं कि आप इसे कोड करने के लिए योजना कोड में फ़ील्ड नामों को मैप करना चाहते हैं।लेकिन फिर जल्दी या बाद में आपको फील्ड नामों के साथ इस नामकरण पागलपन को संभालना शुरू करना होगा और इसे ठीक करना होगा। किसी समस्या से स्क्रीन करना अच्छा नहीं है और कल्पना करें कि यह एक सुरक्षित समाधान है और जाने का अच्छा तरीका है। यह केवल अस्थायी कामकाज है। इसके बारे में अपने आप को पूरा मत करो।
सच है। अंततः यह योजना क्लाइंट को एक्सेस प्राप्त करने के लिए प्राप्त करने के लिए है और हम सभी डेटा को एक सभ्य डेटाबेस में ले जाने दें जहां हम थोड़ा कम पागल स्कीमा स्थापित कर सकते हैं। –
"लिंग" के लिए +1 दिनांक – inspite
+1 ऊपर जैसा ही है। अजीब कभी! – Ace