तारीखों-एक कोड गंध के आधार पर यूआई (या अन्य) सुविधाओं को चालू और बंद करना है?


11

हमारे पास ASP.NET 2.0 में एक भयानक प्रणाली लिखी गई है जिसे हमें कुछ कार्यक्षमता जोड़ने की आवश्यकता है। समस्या यह है कि एक निश्चित उत्पाद में UI विशेषताएं होती हैं जिन्हें व्यवसाय के लिए एक निश्चित तिथि के बाद चालू करना होता है (और अन्य बंद हो जाते हैं), जबकि पृष्ठ को मौजूदा व्यवसाय के लिए समान दिखाना होता है।

मैं नए व्यवसाय के लिए पृष्ठ को फिर से लिखने के लिए जोर दे रहा हूं क्योंकि मुझे सहज रूप से तारीख आधारित जावास्क्रिप्ट यूआई स्विच का विचार मिलता है, और पुराने और नए व्यवसाय के लिए वेब नियंत्रण का मिश्रण "अस्वच्छ" होना चाहिए (बेहतर शब्द के लिए) )।

क्या समय-आधारित UI होने की प्रथा व्यापक रूप से स्वीकृत अभ्यास है, और यदि नहीं, तो कार्रवाई के उस पाठ्यक्रम को आगे बढ़ाने के ज्ञात जोखिम क्या हैं?


13
यदि आपकी व्यावसायिक डोमेन आवश्यकताएँ निर्दिष्ट करती हैं कि कुछ सुविधा उपयोगकर्ता को किसी विशेष समय सीमा के भीतर उपलब्ध नहीं होगी, तो यह "डिज़ाइन द्वारा" है। अगर आपको दिखने और गायब होने वाले ux control का विचार पसंद नहीं है, तो उन्हें छिपाने के बजाय उन्हें अक्षम करें। बावजूद, तकनीक पूरी तरह से वैध है।
रॉबर्ट हार्वे

1
मुझे वाक्यांश "व्यवसाय एक निश्चित तिथि के बाद शुरू हुआ" अस्पष्ट है। क्या आपका मतलब है आपकी कंपनी के साथ व्यापार (एक निश्चित तारीख के बाद साइन अप करने वाले ग्राहकों के लिए) या आपके ग्राहक के साथ शुरू किया गया व्यापार (इसलिए आपका ग्राहक केवल अपने ऐप में डेटा के साथ कुछ चीजें कर सकता है यदि उनके क्लाइंट ने किसी विशेष तिथि के बाद साइन अप किया है)? पूर्व मामले में, आप अपने ग्राहकों के लिए उपलब्ध सुविधाओं के बारे में बात कर रहे हैं। बाद के मामले में, आप कुछ डेटा पर अवैध कार्यों को प्रतिबंधित करने के बारे में बात कर रहे हैं (डेटा में शर्तों के आधार पर)। उन परिस्थितियों में उत्तर बहुत अलग हो सकता है।
jpmc26

जवाबों:


22

यूआई को ट्विक करने के साथ कुछ भी गलत नहीं है, जिसके आधार पर ग्राहक के लिए सुविधाएँ सक्षम हैं, या जो तैनाती के प्रकारों को उन्होंने चुना है, लेकिन परिवर्तन होना चाहिए

  1. सार्थक झंडे पर निर्भर करता है, जैसे "HAVE_EXPORT" एक निर्यात विकल्प को सक्षम / अक्षम करने के लिए, अजीब तारीख की तुलना पर नहीं। यूआई के पास कोई व्यवसाय नहीं है जो व्यापार नियम के बारे में जानता है कि कब प्रकाशित किया गया था, इसे केवल अपने यूआई कार्य को पूरा करना चाहिए और यूआई-विशिष्ट निर्देशों का पालन करना चाहिए।
  2. नियंत्रित सर्वर-साइड हो, ताकि कोई ग्राहक उन विशेषताओं को सक्षम न कर सके जिनके लिए उन्होंने भुगतान नहीं किया है।

(ध्यान दें कि विपरीत - जिले एक निश्चित समय के बाद abling सुविधाओं - नहीं-नहीं, जब तक आप स्पष्ट रूप से संवाद करने की है कि आप एक समय सीमित परीक्षण संस्करण बेच रहे हैं एक प्रमुख है इस तरह बनाया जा रहा है। समय बम किसी भी अन्य परिस्थितियों लोगों से नफरत कर देगा आप लगभग किसी भी चीज़ से तेज़ हैं।)


2
The UI has no business knowing the business rule about what was published when- ठीक है, लेकिन स्टैक एक्सचेंज में भी ऐसे यूआई नियम हैं। उदाहरण के लिए, "डिलीट" लिंक अन्य उपयोगकर्ताओं के लिए बंद प्रश्नों पर दिखाई नहीं देता है जब तक कि दो दिन बीत चुके हैं, और प्रवासन विकल्प 60 दिनों के बाद अक्षम हो जाता है।
रॉबर्ट हार्वे

मैंने इस उत्तर के आधार पर प्रश्न को स्पष्ट किया: कुछ नियंत्रण हटाए जाने वाले हैं, और अन्य जोड़े जाएंगे, तिथि के आधार पर।
14

13
@ रोबर्टहवे, लेकिन यह दृश्य में कैसे क्रमादेशित है? यह कुछ ऐसा है if (showDelete) { <button>delete</button> }या if ((post.date - today).days > 2) { <button>delete</button> }?
आर्टुरो टॉरेस सेंचेज

@ ArturoTorresSánchez: पूर्व - पूरे विचार को सर्वर में व्यावसायिक तर्क (जैसे कि तारीख की समाप्ति) के रूप में रखना है। वैसे भी, यह अपने खुद के एक अच्छा सवाल बना देगा :-)।
साल्के

11

आवश्यकता स्वयं समस्याग्रस्त नहीं है, लेकिन इसे लागू करने के अच्छे और बुरे तरीके हैं । यदि आपके पास ऐसा कोड है जो सभी जगह दिखता है और कॉपी किया गया है:

if (businessInitiationDate > cutoffDate)
  enableNewControlsForThisOneLittlePiece();
else
  enableOldControlsForThisOneLittlePiece();

यह बनाए रखने के लिए कठिन पागल होने जा रहा है, भले ही यह फिलहाल तेज लगता है। उदाहरण के लिए, शायद कुछ बिंदु पर कुछ पुराने ग्राहक नया रूप चाहते हैं। हो सकता है कि कुछ बिंदु पर अपनी कटऑफ की तारीख के साथ एक तीसरा कॉन्फ़िगरेशन होगा।

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


6

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

हालांकि, एक बात जो मैं सुधार के रूप में सुझा सकता हूं, वह है एक तारीख की अवधारणा को हटाना जो नियंत्रणों को सक्षम करता है, लेकिन एक संस्करण संख्या। संस्करण UI कॉन्फ़िगरेशन सेट करता है (यानी आपके पास NewCustomer के लिए कॉन्फ़िगर किया गया कहने के लिए एक ध्वज है, और भविष्य में NewNewCustomer चाहता है, और इतने पर अतिरिक्त नियंत्रणों को पूरा करने के लिए विस्तारित किया जा सकता है)। यह कोड में संभालना बहुत आसान है, और बहुत अच्छे की खुशबू आ रही है।

तब आपके पास केवल 1 मुद्दा होता है जो कुछ मानदंडों के आधार पर संस्करण संख्या निर्धारित कर रहा है, और यह आज की तारीख की जाँच के द्वारा किया जा सकता है, संभवतः बाद में सर्वर-साइड कॉन्फ़िगरेशन विकल्प, या यहां तक ​​कि उपयोगकर्ता द्वारा कुछ समय के लिए सेट किए गए कुकी में भी। भविष्य।


5

यह एक अधिक सामान्य प्रश्न के विशेष मामले की तरह लगता है: क्या पूर्वनिर्धारित नियमों के अनुसार विशिष्ट कारणों से यूआई सुविधाओं को अक्षम करना एक बुरा व्यवहार है? उत्तर, तब, "निश्चित रूप से नहीं है।" विशेष रूप से तारीख सौंपना मुश्किल हो सकता है क्योंकि तारीखें और समय कठिन हैं , लेकिन सामान्य सिद्धांत पर ऐसा करने का कोई अच्छा कारण नहीं है अगर यह आपके व्यवसाय की आवश्यकताओं को बुलाता है।


3

यदि परिवर्तनों को कुछ विशिष्ट व्यावसायिक उद्देश्य के साथ करना है जो तिथि-संवेदनशील है, तो यह एक आवश्यक बुराई है।

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


1
"यह सही समय पर एक अद्यतन को तैनात करने के लिए बेहतर है" नाइटिक: जरूरी नहीं ...। उदाहरण के लिए, परिनियोजन के लिए डाउनटाइम की आवश्यकता हो सकती है, जो उस समय व्यावहारिक नहीं है जब स्विच बनाया जाना चाहिए। या शायद समानांतर उपयोग की कुछ अवधि होगी ... यह वास्तव में निर्भर करता है।
सालेके

या हो सकता है कि आप क्रिसमस के दिन "प्ले जिंगल बेल्स" बटन रखना चाहते हैं। आप इसे हर क्रिसमस को तैनात करना नहीं चाहेंगे।
साठफुटेरसूड

2

ठीक लगता है। यूआई के विभिन्न उपयोगकर्ताओं के लिए अनुकूल होना काफी आम है, जैसे स्टैकओवरफ्लो पर यहां अलग-अलग विशेषताएं सक्षम या अक्षम होती हैं जो किसी व्यक्ति के कर्म के आधार पर होती हैं।

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

ज्ञात जोखिम: सबसे बड़ा जोखिम शायद विभिन्न विन्यासों में यूआई का परीक्षण करने के लिए है। यदि आप उपयोगकर्ताओं के विभिन्न समूहों के लिए UI सुविधाओं को सक्षम / अक्षम करने की राह से नीचे जाना शुरू करते हैं, तो आप जल्दी से संभव कॉन्फ़िगरेशन का विस्फोट प्राप्त कर सकते हैं।

आपको व्यापार तर्क परत पर प्रतिबंधों को लागू करने के लिए सुनिश्चित करना चाहिए, ताकि आप यह सत्यापित करें कि ग्राहक उन कार्यों को नहीं कर सकते हैं जिनकी उन्हें अनुमति नहीं है, भले ही यूआई पहले स्थान पर संभव न हो:


हाँ, परीक्षण वास्तव में मुश्किल है अगर यूआई विभिन्न कारकों के आधार पर बदल सकता है। यदि यह किया जाना चाहिए, तो यह किया जाना चाहिए, लेकिन यह न्यूनतम को भिन्नता रखने में मदद करता है - और परीक्षण के लिए यूआई को चालू करने का एक तरीका प्रदान करने के लिए, वर्तमान तिथि जैसी चीजों से स्वतंत्र है।
१५:१५ को ५:५५ पर साल्के

2

आप जो वर्णन कर रहे हैं वह प्रभावी डेटिंग की अवधारणा है , जिसका कोई मतलब नहीं है एक उपन्यास विचार और इसके मूल में एक प्रकार की लौकिक समस्या है जिससे आप एक अस्थायी पैटर्न लागू कर सकते हैं ।

अनिवार्य रूप से आप अपने डेटाबेस में क्या करेंगे या तो मॉड्यूल या फॉर्म संस्करण (यहां घटकों के रूप में संदर्भित) बनाने के लिए एक प्रभावी तिथि लागू करते हैं , उन घटकों और उनकी प्रभावी शुरुआत / समाप्ति तिथियों के बारे में कुछ मेटाडेटा संग्रहीत करते हैं। आप निश्चित रूप से आवेदन में अपने उपयोगकर्ताओं के बारे में कुछ डेटा की आवश्यकता होगी।

ऐसा लगता है कि आपके पास इस एप्लिकेशन को फिर से लिखने पर विचार करने के लिए कुछ अन्य सम्मोहक कारण हो सकते हैं। यदि प्रभावी डेटिंग समस्याएं आपकी एकमात्र समस्याएं हैं, तो मेरा सुझाव है कि शायद प्रभावी डेटिंग को लागू करना एक बेहतर विकल्प है। यदि नहीं, तो आपको अपने परिदृश्य के आधार पर मूल्यांकन करना होगा।


1

यह तिथि के आधार पर सक्रियण के साथ एक सुविधा टॉगल है - जो पूरी तरह से मान्य है। कल्पना करें कि सुविधा केवल प्रचार अवधि के दौरान उपयोग के लिए थी, या जब एक नई सरकार विनियमन एक निश्चित तिथि में समाप्त हो जाती है।

आप APS.NET और जावास्क्रिप्ट में काम कर रहे हैं, लेकिन जावा फीचर-टॉगल फ्रेम कार्य टॉगलज़ विशेष रूप से एक तिथि (और समय!) आधारित सक्रियण नियम है

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