2009-01-11 11 views
5

में कनवर्ट करना संभव है मेरे पास एक बहुत बड़ा ऐप है, सी ++ की 1.5 मिलियन लाइनें, जो वर्तमान में दस्तावेज़/व्यू आर्किटेक्चर का उपयोग कर एमएफसी आधारित है। एप्लिकेशन में 3 डी वेक्टर ग्राफिक्स, स्प्रेडशीट्स और बहुत सारे संवाद और विंडोज शामिल हैं। डीवीए की बाधाओं के भीतर यह काफी अच्छी तरह लिखा गया है, इसमें उपयोगकर्ता इंटरफ़ेस में कोई महत्वपूर्ण प्रोग्राम तर्क नहीं है, और उपयोगकर्ता इंटरफ़ेस का उपयोग करके किए जा सकने वाले कुछ भी को COM/OLE ऑटोमेशन इंटरफ़ेस का उपयोग करके प्रोग्रामेटिक रूप से किया जा सकता है।क्या डेस्कटॉप आधारित एमएफसी सी ++ एप्लिकेशन को वेब ऐप

कई उपयोगकर्ताओं के अनुरोध पर, मैं प्रोग्राम में ब्राउज़र इंटरफ़ेस बनाने के विचार से टकरा रहा हूं, जहां प्रोग्राम स्वयं सर्वर पर चलता है। विचार अब तक सभी COM इंटरफेस को डीसीओएम में परिवर्तित कर रहे हैं और जावा को यूआई को फिर से लिख/पोर्ट कर सकते हैं। प्रारंभिक प्रयोग से पता चलता है कि यह एक बड़ी मात्रा में काम होगा।

किसी और को आसानी से एक आसान प्रत्यारोपण के लिए कोई विचार मिला है? कोई भी इस तरह के बंदरगाह की मदद के लिए विशेष रूप से किसी भी रिफैक्टरिंग या इसी तरह के औजारों में आता है?

+2

1.5MLoc - वेब पर? बल्कि आप मुझ से अधिक। मेरी सलाह: उपयोगकर्ताओं को बताएं कि वेब एक फड है और यह जल्द ही उड़ाएगा :) – U62

+0

@RHM, मेरे विचार बिल्कुल, इसलिए प्रश्न में 'व्यवहार्य' शब्द। –

उत्तर

5

संक्षिप्त उत्तर यह है कि यह व्यवहार्य है, जावा का उपयोग न करें, और यह काफी मात्रा में काम करेगा।

कुछ अच्छे साल पहले (आईई 5 के समय के आसपास) मुझे क्लाइंट ने इस तरह के एक प्रश्न का उत्तर देने के लिए कहा था। प्रश्न में आवेदन एक अच्छी तरह से संरचित तीन स्तरीय डेस्कटॉप अनुप्रयोग था।

अध्ययन का उछाल यह था कि यह संभव है। माना जाता है कि जावा, और सीजीआई, या तो कॉर्बा या COM/DCOM का उपयोग कर रहे थे। जावा एप्लेट बनाने के लिए विचार किया गया था, लेकिन इनकार कर दिया क्योंकि यह सी ++ डेस्कटॉप संस्करण से बहुत अलग नहीं होता।

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

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

मुझे पता चला कि एक अच्छी तरह से संरचित प्रणाली में भी बैकएंड में होना चाहिए जो कोड का एक उचित हिस्सा सामने के अंत में लीक हो गया था।

अगर मुझे अभी भी ऐसा ही करना है, तो कुछ उत्कृष्ट जावास्क्रिप्ट पुस्तकालय हैं जो मदद करेंगे, लेकिन मैं अभी भी अजाक्स का उपयोग कर ब्राउज़र में जितना संभव हो उतना करने का एक ही दृष्टिकोण लेता हूं, संभवतः qooxdoo या YUI। मैं शायद XUL का उपयोग करके देख सकता हूं और कम से कम अधिकांश संवाद बैकएंड में ले जा रहा हूं।

एकमात्र चीज जो आपकी आवश्यकताओं की सूची से मुझे चिंतित करती है वह 3 डी वेक्टर ग्राफिक्स है, हालांकि this JS toy या JS3D में कुछ माइलेज हो सकता है।

यह केवल एक संक्षिप्त सारांश है, क्योंकि मैं एक शोध प्रबंध लिखने से बचने की कोशिश कर रहा हूं।

+0

पूरी तरह से जवाब के लिए धन्यवाद। यह बहुत सारे काम की तरह दिखता है, इसलिए मुझे यह जांच करके शुरू करना होगा कि लाभ प्रयास को वारंट करेंगे। –

1

यह काम की एक बड़ी मात्रा होगी, लेकिन आप पहले से ही अच्छा डिज़ाइन कर चुके हैं ताकि आप पहले से ही आधा रास्ते हो!

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

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

वेब इंटरफ़ेस के लिए, मैं आपके बैक-एंड सर्वर से इंटरैक्ट किए गए वेबसर्वर कोड लिखूंगा। इस तरह आप एक बहुत आसान युग्मन प्राप्त करते हैं, और आपके पास चिंता करने के लिए बहुत कम सुरक्षा और कनेक्टिविटी समस्याएं हैं। मुझे हमेशा लगता है कि वेबसर्वर + ब्राउज़र एक एन-स्तरीय ऐप में प्रस्तुति परत है।

वेब तकनीकों के लिए, आप ब्राउज़र में समृद्ध सामग्री प्राप्त करने के लिए फ्लेक्स, सक्रिय, चांदी की रोशनी, या संभव jquery/jsext का उपयोग कर सकते हैं।

4

एमएफसी एप्लिकेशन को वेब एप्लिकेशन में कनवर्ट करने पर विचार करने से पहले, मैं आपको जेफ एटवुड से "Avoiding The Uncanny Valley of User Interface" पढ़ने का सुझाव देता हूं।

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

मुझे नहीं पता कि आपका एप्लिकेशन कैसा दिखता है और यह कितना अच्छा "वेब पोर्टेबल" है, लेकिन शायद वेब के लिए एप्लिकेशन की एक सटीक प्रतिलिपि करना सबसे अच्छा विकल्प नहीं है।

1

कुछ साल पहले मैंने इसके साथ खेला था, लेकिन मैंने एक बार एक छोटा एप्लीकेशन लेने और सक्रिय एक्स घटक के रूप में संकलित करने का प्रयास किया था जिसे तब आसानी से वेब पेज में उपयोग किया जा सकता था। (यह ऐप बोर्लैंड सी ++ बिल्डर के साथ बनाए गए फॉर्म पर आधारित था, इसलिए यह सक्रिय एक्स घटक बनाने के लिए काफी छोटा था। मैं यह तय नहीं कर सका कि आपके एमएफसी डी/वी ऐप को सक्रिय के रूप में लपेटना होगा एक्स घटक)।

उपयोगकर्ता मशीन पर सक्रिय एक्स घटक पंजीकृत करना आवश्यक था (यह भी काफी मामूली है, लेकिन आपको घटक के प्रत्येक नए संस्करण को फिर से पंजीकृत करना था - मुझे लगा जैसे मैं रजिस्ट्री भर रहा था) और आजकल इंटरनेट एक्सप्लोरर ActiveX का उपयोग कर वेब पृष्ठों के साथ चेतावनियां फेंकता है, इसलिए उपयोगकर्ता को आईई में सुरक्षा स्तर को कम करने की आवश्यकता होगी इसे शिकायत से रखने के लिए।

1

हां, हमने इसे एक बड़े (बोर्लैंड) सी ++ एप्लिकेशन के साथ किया है जिसे सर्वोत्तम रूप से 'मिट्टी की बड़ी गेंद' वास्तुकला के रूप में वर्णित किया जा सकता है।

आपके पास कुछ दिलचस्प मुद्दे हैं, लेकिन हमने एक बहुत ही 'वेबबी' और आकर्षक फ्रंट एंड बनाया है (प्रोटोटाइप एएसपी.नेट में है लेकिन जावा सहित कुछ भी हो सकता है) जो कि बड़े पैमाने पर डेस्कटॉप ऐप में चल रहा है सर्वर, फिर परिणामी ग्राफिक्स, टेबल और पाठ प्रदर्शित करता है। हम इस बात पर लचीला हैं कि ग्राफ जैसे कुछ कैसे प्रदर्शित होते हैं - जैसे कि पीएनजी, फ्लैश ऑब्जेक्ट्स या एसवीजी ब्राउज़र

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

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

हम भी आवेदन से वेब अंतरफलक के एक बड़े पैमाने पर स्वत: उत्पादन को देखा, लेकिन डिजाइन के स्तर पर फैसला किया कि यह बहुत ज्यादा एक ब्राउज़र विंडो में चल रहे एक Windows32 आवेदन की तरह लग रहा था ....

2

देखें कि Wt आपकी आवश्यकताओं के अनुरूप हो सकता है या नहीं। यह एक सी ++ वेब अनुप्रयोग टूलकिट है।

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