2014-10-07 143 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 

活动和碎片不属于意见,因为他们是控制器,但他们也处理的观点,所以把自己的包。