मैं एक ऐसे अनुप्रयोग का निर्माण कर रहा हूं जो बहुभाषी, बहु-समयबद्ध और एन-स्तरीय है। सभी तिथियां यूटीसी में डेटाबेस में संग्रहीत हैं और सभी मॉडल ऑब्जेक्ट्स यूटीसी टाइम्स के साथ आबादी में हैं। हालांकि यूटीसी के समय कभी प्रदर्शित नहीं होते हैं (जब तक कि उपयोगकर्ता यूटीसी में अपना टाइमज़ोन सेट न करे)।बहु-स्तरीय वास्तुकला में प्रस्तुति मानों का रूपांतरण कहां किया जाना चाहिए?
इसका मतलब है कि मुझे समय गुणों को सही उपयोगकर्ता टाइमज़ोन में दोबारा बदलने की आवश्यकता है। पुनरावृत्ति हमेशा खराब कोड या बेहतर तरीका का संकेत है, इसलिए मैं लागू करने के लिए सर्वोत्तम रणनीति तैयार करने की कोशिश कर रहा था। यद्यपि यह प्रभावशाली प्रस्तुति तर्क है, लेकिन मेरे विचार अलग-अलग हैं क्योंकि ऐसा लगता है कि मॉडल को वर्तमान उपयोगकर्ता के लिए सही मान जानना चाहिए। अब तक मेरे विचार कर रहे हैं:
एक स्थिर सहायक वर्ग का उपयोग करें और फिर इसे हर बार मॉडल की संपत्ति प्रयोग किया जाता है कहते हैं। ऐसा लगता है कि त्रुटि या प्रकोप हो रहा है और गणना और गणना बोझिल है।
मॉडल ऑब्जेक्ट को व्यूमोडेल ऑब्जेक्ट में लपेटें। यह वस्तुओं की सूचियों से निपटने के दौरान विशेष रूप से बोझिल है।
मॉडल के लिए एक विस्तार विधि लिखें जो केवल प्रस्तुति परत में मौजूद है। यह क्लीनर लेकिन अनजान लगता है।
रूपांतरण के लिए मॉडल परत में एक इंटरफ़ेस बनाएं। प्रस्तुति परत में सहायक को कार्यान्वित करें और मॉडल परत को कार्यान्वयन दें। मॉडल में तब गुण होते हैं जो समय को बदलने के लिए इंटरफ़ेस का उपयोग करते हैं। ऐसा लगता है कि यह चिंताओं को अलग करना तोड़ना चाहिए लेकिन ऐसा नहीं लगता है। यदि आपके पास एक डिफ़ॉल्ट कनवर्टर था तो आपको शून्य ऑब्जेक्ट अपवाद प्राप्त करने की चिंता करने की आवश्यकता नहीं होगी, फिर मॉडल परत (वर्तमान में पीओसीओ) को रूपांतरण सहायक के लिए एक कंटेनर की आवश्यकता होगी जो गन्दा लगता है।
मॉडल पर स्थानीय टाइमज़ोन विधि में कनवर्ट करें और वर्तमान टाइमज़ोन में पास करें।
मुझे इन रणनीतियों या किसी अन्य पर विचारों में दिलचस्पी है जो मुझे इन जगहों पर उपयोग करना चाहिए या नहीं।
अद्यतन मैं वर्तमान में क्या किया है एक ITimeConvertor और मॉडल परत के भीतर एक ITimeConvertorFactory तैयार करना है। इसके बाद मैंने इनके डिफ़ॉल्ट कार्यान्वयन किए हैं जो मूल तारीख मान वापस कर देते हैं। मॉडल परत के भीतर मैंने मूल रूप से मॉडल पर मौजूद प्रत्येक मौजूदा यूटीसी संपत्ति के लिए लोकलटाइम गुण जोड़े हैं। इन गुणों के भीतर मैं एक कनवर्टर प्राप्त करने के लिए कारखाने का उपयोग करता हूं और गेटटर और सेटर में यूटीसी मूल्य को हर तरह परिवर्तित करता हूं। मुझे वर्तमान टाइमकॉन्टर फैक्ट्री को स्टोर करने के लिए एक मॉडल के रूप में मॉडल परत (जिसे मैं वास्तव में पसंद नहीं करता) में एक स्थिर सेटिंग क्लास जोड़ना पड़ा। वेब ऐप भाग के भीतर मैं ITimeConvertorFactory और ITimeConvertor को WebTimeConvertorFactory और WebTimeConvertor के रूप में कार्यान्वित करता हूं। WebTimeConvertor सत्र और वर्तमान उपयोगकर्ता के बारे में जानता है ताकि वर्तमान टाइमज़ोन को पकड़ सकें। WebTimeConvertorFactory WebTimeConvertors बनाता है। जब एप्लिकेशन शुरू होता है (global.asax में application_onstart) मैं फैक्ट्री बनाता हूं और मॉडल परत स्थिर सेटिंग्स गुण को पास करता हूं। यह मेरी मॉडल परत स्थानीय समय को बदलने में सक्षम होने की अनुमति देता है जबकि डेटा परत केवल यूटीसी दिनांक गुणों के बारे में जानता है। इसका मतलब यह भी है कि मैं सीधे मॉडल में लोकटाइम पास कर सकता हूं और इसे सटीक रूप से परिवर्तित कर सकता हूं बशर्ते कि उपभोग करने वाले ऐप ने कनवर्टर फैक्ट्री प्रदान की हो। चूंकि यूटीसी गुण अपरिवर्तित हैं, फिर भी वे ऐप के भीतर कहीं भी इस्तेमाल किए जा सकते हैं। हालांकि यह बहुत सारे कोड की तरह लग रहा था, मुझे यह समाधान एक बार लागू होने के बाद काफी साफ पाया गया है क्योंकि यह सेवा के अन्य उपभोक्ताओं को अपने समय रूपांतरण को लागू करने की इजाजत देता है, वैसे भी वे चाहते हैं (अगर बिल्कुल) मॉडल गुणों की खपत को बनाए रखते हुए उचित रूप से स्पष्ट है।
मैं अभी भी अपने मौजूदा समाधान के बेहतर समाधान और आलोचना के लिए खुला हूं।
मुझे लगता है कि यह मेरा कुछ बिंदु है, क्या मेरे मॉडल परत को पता होना चाहिए कि उपयोगकर्ता किस समय में है? वर्तमान में नहीं। मेरी आंतरिक बहस यह है कि यह एक प्रस्तुति या मॉडल परत निर्णय है। एक उपयोगकर्ता पीओसीओ टाइमज़ोन स्टोर करता है लेकिन उपयोगकर्ता पीओसीओ में अन्य पीओसीओ के समय गुण नहीं होते हैं। तो मैं फिर एक पीओसीओ से दूसरे मूल्यों के प्रदर्शन को जोड़ रहा हूं जो पहले आवश्यक नहीं था ... – toxaq
मैंने अपना जवाब अपडेट कर दिया है। – henginy
उत्कृष्ट, धन्यवाद। मैं देख रहा हूं कि आप क्या कह रहे हैं और मेरे लिए यह वास्तव में दो 'आवश्यक बुराइयों' के बीच टॉस अप है। जैसा कि मुझे खपत की सादगी पसंद है (और चूंकि मैं वर्तमान में केवल एक ही काम कर रहा हूं), मैं समय के लिए अपने रास्ते से चिपके रहूंगा लेकिन मुझे लगता है कि आपका समान रूप से मान्य है और निश्चित रूप से अधिक पारदर्शी/पठनीय है। – toxaq