2014-10-07 63 views
7
Android Studio 0.8.11 

你好,什麼是把班的Android

我剛剛完成了在Android上一個測試是建立一個應用程序,需要一個實時新聞,並將其顯示在包名的最佳實踐。然而,由於我把所有的課程都放在一個包裹裏,導師非常關鍵。

我只是想知道什麼是包裝類的最佳做法。對於我特定的測試我下這個包名以下類:

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 2014-10-07 18:57:42

回答

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

根據我的口味,以類別名稱保留「片段」或「活動」後綴有點多餘,特別是如果將它們放入已包含此類後綴的包中。 – 2014-10-23 22:06:20

+2

@AlexK當然,包含後綴'有助於代碼在項目結​​構之外的可讀性,不是嗎? – Chackle 2015-05-27 14:29:07

4

根據凝聚力和耦合的編程原則將你的類分成包。

凝聚力,簡單地說,意味着相關(或類型)的東西應該一起去。例如,按照Simulant的建議,您的碎片和您的活動。

耦合是多麼不同的東西彼此依賴。只要有可能,事情應該是鬆耦合耦合 - 其中依賴只有一種方式。如果兩個模塊相互依賴,我們說它們緊密結合,它們應該是同一個包的一部分 - 儘管你可能想通過引入一個接口來分離它們的依賴關係。如果依賴關係只有一種方式(它們應該是這樣),那麼你可以將它們分成不同的包。

4

請務必始終保持模塊間的鬆耦合,以便在將來支持可擴展性。如果您將所有類放在同一個包中,可能會導致可伸縮性問題。保留碎片,活動,將所有東西放入不同的包中。

5

我的結構與Simulant的建議類似,我發現這是維護結構良好的項目的最佳方法。

但是,我還爲擴展自己的對象之一的對象創建子包。 例如:

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.fragment - 片段
  3. project.broadcastReceiver
  4. project.databaseHelpers - 將數據庫幫助程序類創建單獨的表以及用於創建所有數據庫表的主要SqliteHelper類。
  5. project.networkTasks - 對不同服務的不同API的所有調用都在這裏。
  6. project.services - 這包括作爲服務運行的類。有時它們與網絡任務重疊。
  7. project.general - 這包括一般類。例如,假設您將學生數據存儲在一個表中。然後你可以有一個學生班。當您創建並填充實例時,您可以清晰地傳遞與學生關聯的數據。
  8. project.utils - 這包括實用程序類。這些類主要有靜態方法。例如,以字符串形式獲取HttpResponse的方法將被放入其中一個類中。

作爲一般規則,史蒂夫說的是正確的,應用了內聚和耦合的原理。

2

請看看repository,它介紹了android開發的最佳實踐,其中一個實踐是java包體系結構。

概括地說,你可以這樣做:

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

活動和碎片不屬於意見,因爲他們是控制器,但他們也處理的觀點,所以把自己的包。