2010-07-09 16 views
23

जावा एप्लिकेशन को डिजाइन करते समय ध्यान में रखने के लिए सामान्य दिशानिर्देश और सर्वोत्तम प्रथाएं क्या हैं [जे 2 ईई ऐप्स पर सरल कंसोल ऐप्स]?जावा एप्लिकेशन कैसे डिज़ाइन करें?

हाय

मैं हाल ही में सूर्य से पूरा जावा प्रोग्रामिंग ट्यूटोरियल और कोर जावा (मैं पिछले प्रोग्रामिंग अनुभव है) का अभ्यास किया। अब मैं विरासत, एब्स्ट्रक्शन, पॉलिमॉर्फिज्म, एनकैप्यूलेशन

की मूल बातें समझता हूं अब मैं बिना किसी कठिनाई के जावा कोड लिख रहा हूं, लेकिन मुझे एप्लिकेशन डिज़ाइन की जानकारी नहीं है। यह मेरी मुख्य समस्या है: आवेदन "डिजाइनिंग"। कहें कि क्या मैंने जावा में कोई एप्लिकेशन बनाने का कार्य दिया है, मुझे किसके साथ शुरुआत करना चाहिए? इसके बारे में कैसे सोचें? वर्ग पदानुक्रमों के विकास के दौरान मुझे कोई औपचारिक/अनौपचारिक दिशानिर्देशों का पालन करना चाहिए? मैं वास्तव में उलझन में हूँ (सार वर्ग या इंटरफ़ेस या उप वर्ग ..?)। क्या मुझे कोड लिखने से पहले मॉडल सब कुछ शुरू करना चाहिए?

मेरे जैसे लोगों के लिए सामान्य दिशानिर्देशों/सर्वोत्तम प्रथाओं का सेट होना बहुत उपयोगी होगा, जिसे हम एक नया जावा एप्लिकेशन विकसित करने के दौरान अनुसरण कर सकते हैं।

मुझे प्रदान करें कुछ दिशा निर्देश/विचार/पुस्तकों/संसाधन/उपकरण मैंने पढ़ा या अग्रिम में प्रयोग करें

धन्यवाद करना चाहिए स्कॉट

+0

ऐसा करने के कई तरीके हैं। जावाईई ऐप्स को अलग-अलग कंसोल ऐप्स से डिज़ाइन किया जाएगा, स्विंग ऐप्स से अलग-अलग डिज़ाइन किए जाएंगे, मोबाइल ऐप्स से अलग-अलग डिज़ाइन किए जाएंगे, अलग-अलग डिज़ाइन किए जाएंगे .... हमें बताएं कि आप किस प्रकार का ऐप सोच रहे हैं और यह मदद करना आसान होगा आप। – FrustratedWithFormsDesigner

+0

धन्यवाद, मैं सरल कंसोल ऐप्स के साथ शुरू करना चाहता हूं, फिर जे 2 ईई ऐप्स – Dushyanth

उत्तर

14

यह वास्तव में सामान्य सलाह देने के लिए के रूप में वहाँ बहुत से अलग जावा हैं मुश्किल है विभिन्न डोमेन पर ऐप्स। हालांकि, एरिक इवांस द्वारा Domain Driven Design पर एक बिल्कुल अनुशंसित पुस्तक है। इस पर एक संक्षिप्त परिचय के लिए Wikipedia भी देखें।

जनरल सलाह:

  • सामने सब कुछ डिजाइन करने की कोशिश नहीं है - जो आप कोडिंग शुरू करने के लिए, तो समस्या डोमेन की अपनी समझ और कार्यान्वयन गहरा के रूप में refactor सक्षम बनाता है एक यथोचित अच्छे डिजाइन करना
  • मुश्किल समस्याओं को छोटे भागों/चरणों/मॉड्यूल में विभाजित करने का प्रयास करें, जिन्हें आप एक से एक
  • अच्छी तरह से परिभाषित जिम्मेदारियों के साथ वस्तुओं के संदर्भ में सोचने का प्रयास करें, जो (अधिक या कम) समस्या डोमेन मॉडल करते हैं और सहयोग करते हैं एक समस्या/हैंडल हल करें ई एक कार्य
  • डिजाइन में अच्छा बनने के लिए अभ्यास की आवश्यकता होती है, सबसे पहले और सबसे महत्वपूर्ण; गलतियों को बनाने के लिए डरो मत। हालांकि, जब आप ऐसा करेंगे, उनके विश्लेषण और जितना उनसे सीखते हैं के रूप में आप
  • डिजाइन पैटर्न सीख सकते हैं, लेकिन ज्यादा नहीं है - उन्हें इस्तेमाल केवल जब वे वास्तव में एक समस्या को हल करने और अपने कोड क्लीनर
बनाने
1

प्रारंभ यूएमएल वर्ग चित्र है कि गेंद को सही दिशा में रोलिंग मिल जाएगा ऊपर देखकर भी है, तो चार के गिरोह डिजाइन पैटर्न पर एक नज़र डालें। यह एक उत्कृष्ट पहला कदम है।

http://en.wikipedia.org/wiki/Class_diagram

http://en.wikipedia.org/wiki/Design_Patterns

अन्त में, मैं स्प्रिंग फ्रेमवर्क

तरह

http://www.springsource.org/

+0

पर जाएं और हां आपको निश्चित रूप से सबकुछ मॉडल करना चाहिए, लेकिन वापस जाने और मॉडल को बदलने के लिए तैयार रहें, अगर यह काम नहीं करता है। कुंजी लचीलापन है ... – Ayubinator

2

में आपका स्वागत है अच्छे ओपन सोर्स कोड डाल अतिप्रवाह ढेर होगा। आप जावा के साथ अच्छा कर रहे हैं, Head First Design Patterns. और Head First Object-Oriented analysis and design पढ़ें - एर, उलटे क्रम में हो सकता है :)

+2

अगर मैं शुरुआत करने वाला था तो मैं खुद को डिजाइन पैटर्न में नहीं फेंक दूंगा। –

1

मैं TDD साथ आकस्मिक डिजाइन सलाह देते हैं।

मुझे लगता है कि जावा डिज़ाइन के लिए कुछ भी विशिष्ट नहीं है: यदि आप ऑब्जेक्ट डिज़ाइन के बारे में पहले ही जानते हैं, तो आप जाने के लिए तैयार हैं!

+0

मैं असहमत हूं। जावा ऐप के लिए डिज़ाइन की जाने वाली कक्षाएं कक्षाओं से लगभग निश्चित रूप से अलग होती हैं जिन्हें आप सी ++ या सी # में एक ही ऐप के लिए डिज़ाइन करेंगे - स्मॉलटाक या ओकैमल जैसी भाषाओं का उल्लेख न करें। – Gabe

3

विभिन्न मानदंड हैं (बहुत बार 3 अक्षरों संक्षिप्त):

  • DDD: डोमेन प्रेरित डिजाइन
  • SDD: Serviice प्रेरित डिजाइन
  • एमडीए: मॉडल प्रेरित वास्तुकला (कोड और स्थापत्य कला से निकाला जाता है यूएमएल मॉडल)
  • TDD: टेस्ट प्रेरित विकास (सत्यापन परीक्षण आवेदन से पहले लागू किया जाता है)

प्रमुख कुंजी शब्द के साथ, आपको वेब पर बहुत सारी जानकारी मिल जाएगी।

जे 2 ईई में, मैं कहूंगा कि एसडीडी सबसे अधिक उपयोग किया जाता है (यह अब बहुत सामान्य है ", भले ही मुझे यकीन नहीं है कि यह सबसे अच्छा समाधान है): सेवा (सॉफ्टवेयर" खुफिया ")> डोमेन (दृढ़ता के लिए इस्तेमाल बीन वस्तुओं)> डीएओ (दृढ़ता)।

अब डीडीडी अधिक से अधिक उपयोग किया जा रहा है: अवधारणा को डोमेन ऑब्जेक्ट्स पर फिर से लगाया जाता है, जो "सॉफ़्टवेयर इंटेलिजेंस" परत ले रहे हैं।

+1

टीडीडी प्रति डिज़ाइन दृष्टिकोण नहीं है (हालांकि इसका उपयोग आपके एपीआई की उपयोगिता को _test_ करने के लिए किया जा सकता है, और इस तरह यह बहुत उपयोगी है)। एमडीए 90 के दशक में बहुत ज्यादा प्रचारित था, फिर यह एक अच्छे कारण के लिए दूर हो गया: यूएमएल आपके डिजाइन को _communicating_ के लिए एक बहुत अच्छा टूल है, लेकिन इससे स्रोत कोड उत्पन्न करने के लिए अच्छा नहीं है। –

1

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

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

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

+0

धन्यवाद मुस्तफा। अब मैं क्या कर रहा हूं छोटे अनुप्रयोगों को एक इंटियल डिज़ाइन के साथ लिख रहा है जो मूल कार्यक्षमता करता है, फिर ओप का पालन करने के लिए कोड (रेडिज़िंग) को दोबारा प्रतिक्रिया देता है। – Dushyanth

1

अच्छी तरह से बाधाएं आप पहले से ही कर चुके हैं - कम से कम कुछ समान। सौभाग्य से, आजकल बहुत सारी खुली स्रोत सामग्री है।इसलिए यदि आपको वास्तव में कोई जानकारी नहीं है, तो आप एक चीज कर सकते हैं जो कई ओपन-सोर्स एप्लिकेशन डाउनलोड करता है जो एक ही काम करते हैं और उनका अध्ययन करते हैं। यह आपको एक अच्छी शुरुआत देनी चाहिए।

4

मेरी राय में यह सब

  • बनाए रखने के लिए आसान समझते हैं और
  • कई करने में सक्षम डेवलपर्स विकसित परियोजना में योगदान करने के लिए नीचे दिए गए

    1. आसान बैठक करने पर निर्भर करता है (ज्यादातर में समानांतर)

    ऊपर प्राप्त करने के लिए कुछ दिशानिर्देश और सिद्धांत हैं जो विशेषज्ञों द्वारा अनुभव के आधार पर सुझाए जाते हैं जो कर रहे हैं

    1. का पालन करें layered architecture
    2. भीतर और परतों में SOLID principles का पालन करें। सभी डिज़ाइन पैटर्न एक ही तरीके हैं या दूसरी सहायता केवल इन सिद्धांतों को प्राप्त करती है। SRP: एकल जिम्मेदारी सिद्धांत, ओसीपी: ओपन बंद सिद्धांत, LSP: Liskov प्रतिस्थापन सिद्धांत, आईएसपी: इंटरफ़ेस पृथक्करण सिद्धांत, DIP निर्भरता उलट सिद्धांत
    3. सूखी और KISS सिद्धांतों

    ये दिशा-निर्देश और सिद्धांतों किसी भी स्वतंत्र हैं प्रोग्रामिंग प्रतिमान या भाषा। हालांकि, ओओपी भाषाएं इन्हें आसान बनाने में मदद करती हैं।

  • 3

    मैं वास्तव में आपको GRASP principles पर एक नज़र डालने की सलाह देता हूं, यह आपको एक अच्छा डिजाइन आधार कौशल प्रदान करता है।

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

    • कोई संबंधित समस्या नहीं^_^