2014-10-07 4 views
7
Android Studio 0.8.11 

हैलो,एंड्रॉयड

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

मैं बस सोच रहा हूं कि पैकेजिंग कक्षाओं के लिए सबसे अच्छा अभ्यास क्या है। मेरी विशेष परीक्षण के लिए मैं इस पैकेज के नाम के तहत निम्नलिखित श्रेणियां होती हैं:

com.viewsys.ncon

मेरे कक्षाएं इन गया:

DBHelper   <-- database creating and ugprading 
DetailActivity <-- activity that add the NconDetailFragment 
NconContract  <-- properties of the database schema columns, table name 
NconDetailFragment <-- detail fragment 
NconListFragment <-- list fragment 
NconViewPager <-- just the view pager 
JsonNewsFeed <-- class that downloads and parses the json format 
MainActivity <-- Main activity 
NewsFeed  <-- class of properties getters/setters for news feed 
NewsFeedDB  <-- simple array list to store all the object from the sqlite3 DB 
SplashActivity <-- activity that add the splashFragment and the NconListFragment 
SplashFragment <-- splash fragment 
Utilities <-- just some simple utility functions 

किसी भी सुझाव के लिए बहुत धन्यवाद,

+0

मेरे लिए आपने ठीक किया। आपके पास केवल तेरह वर्ग हैं। उन्हें विभिन्न निर्देशिकाओं में जमा करने की आवश्यकता नहीं है। – greenapps

उत्तर

17

सबसे पहले आप से अलग कर सकता मॉडल (आपके डेटा को रखने वाले वर्ग) और देखें (प्रदर्शन के लिए सब कुछ) और फिर आप विभिन्न प्रकार के वर्गों के लिए उप-पैकेज बना सकते हैं।

उदाहरण के लिए:

com.viewsys.ncon

Utilities 

com.viewsys.ncon.model

NconContract 
JsonNewsFeed 
NewsFeed 

com.viewsys.ncon.model.db

DBHelper 
NewsFeedDB 

com.viewsys.ncon.view

NconViewPager 

com.viewsys.ncon.view.activities

DetailActivity 
MainActivity 
SplashActivity 

com.viewsys.ncon.view.fragments

NconDetailFragment 
NconListFragment 
SplashFragment 

आप पैकेज निर्भरता साइकिल चलाना कम करने की कोशिश करनी चाहिए। इसका मतलब है कि एक पैकेज दूसरे (या एकाधिक अन्य) पैकेज पर निर्भर हो सकता है और अपनी कक्षाओं का उपयोग कर सकता है लेकिन आवश्यक पैकेज को निर्भरता को पहले पैकेज में कम करना चाहिए। इसलिए निर्भर कॉल केवल एक दिशा में जाना चाहिए।

+0

कक्षा के नाम पर "टुकड़ा" या "गतिविधि" प्रत्यय रखने के मेरे स्वाद पर थोड़ा अनावश्यक है, खासकर अगर उन्हें ऐसे पैकेज में रखा गया है जिनमें पहले से ही इस तरह के प्रत्यय शामिल हैं। –

+2

@AlexK निश्चित रूप से प्रत्यय सहित 'परियोजना संरचना के बाहर कोड पठनीयता में मदद करेगा, नहीं? – Chackle

4

पैकेजों में अपनी कक्षाओं को विभाजित करना कोसियन और कपलिंग के प्रोग्रामिंग सिद्धांतों के अनुसार किया जाना चाहिए।

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

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

4

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

5

मैं सिमुलेंट की सलाह के समान अपने पैकेजों को ढूढ़ता हूं, मैंने पाया है कि एक अच्छी तरह से संरचित परियोजना को बनाए रखने का सबसे अच्छा तरीका है।

हालांकि, मैं उन वस्तुओं के लिए उप-पैकेज भी बनाता हूं जो आपकी अपनी वस्तुओं में से एक को विस्तारित कर रहे हैं। उदाहरण के लिए:

com.viewsys.ncon.view.fragments 
ViewPagerFragment 


com.viewsys.ncon.view.fragments.viewpagerfragments 
YourViewPagerFragment1 extends ViewPagerFragment 
YourViewPagerFragment2 extends ViewPagerFragment 
YourViewPagerFragment3 extends ViewPagerFragment 

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

9

ठीक है, मैं निम्नलिखित संकुल

  1. project.activity का उपयोग करें - टुकड़े
  2. project.broadcastReceiver
  3. - सभी गतिविधियों
  4. project.fragment कहें project.databaseHelpers - डेटाबेस के लिए डेटाबेस सहायक वर्ग डालने के लिए अलग-अलग टेबलों के साथ-साथ मुख्य स्क्लाइट हेल्पर क्लास का उपयोग करना जो सभी डेटाबेस टेबल बनाने के लिए उपयोग किया जाता है।
  5. project.networkTasks - विभिन्न सेवाओं के विभिन्न एपीआई के लिए सभी कॉल यहां जाएं।
  6. project.services - इसमें कक्षाएं शामिल हैं जो सेवाओं के रूप में चलती हैं। कभी-कभी वे नेटवर्क कार्यों के साथ ओवरलैप करते हैं।
  7. project.general - इसमें सामान्य कक्षाएं शामिल हैं। उदाहरण के लिए, मान लें कि आप एक तालिका में छात्र डेटा स्टोर करते हैं। फिर आप छात्र वर्ग हो सकते हैं। जब आप इसका उदाहरण बनाते हैं और पॉप्युलेट करते हैं, तो आप स्पष्टता के साथ छात्र से जुड़े डेटा को पास कर सकते हैं।
  8. project.utils - इसमें उपयोगिता कक्षाएं शामिल हैं। इन वर्गों में मुख्य रूप से स्थिर तरीके होते हैं। उदाहरण के लिए, स्ट्रिंग के रूप में HttpResponse प्राप्त करने की विधि इन कक्षाओं में से एक में रखी जाएगी।

एक सामान्य नियम के रूप में, स्टीव ने जो कहा वह सही है, एकजुटता और युग्मन के सिद्धांत को लागू करें।

2

कृपया इस repository पर एक नज़र डालें, यह एंड्रॉइड विकास के लिए सर्वोत्तम प्रथाओं को प्रस्तुत करता है, और इनमें से एक प्रथा जावा पैकेज आर्किटेक्चर है।

संक्षेप में, अगर आप इस तरह कर सकते हैं:

com.business.project 
├─ network 
├─ models 
├─ managers 
├─ utils 
├─ fragments 
└─ views 
    ├─ adapters 
    ├─ actionbar 
    ├─ widgets 
    └─ notifications 

क्योंकि वे नियंत्रकों हैं गतिविधियों और टुकड़े, विचार के रूप में वर्गीकृत नहीं कर रहे हैं, लेकिन वे भी देखने के लिए, तो अपने स्वयं के पैकेज में डाल संभालती है।