如何在Android中实现良好的打包策略

时间:2013-07-30 19:26:25

标签: android project structure packages code-organization

我开发了几个Android应用程序,我仍然不确定如何将类结构化为不同的包。

例如,假设我们正在构建一个书店应用程序,其中包含 BookListActivity和BookDownloadActivity。

BookListActivity使用ListView,它需要一个列表适配器。 BookDownloadActivity需要BookDownloadAsyncTask。

我见过像这样构建代码的人:

src/com/company/bookapp\
                  + activity\
                  |   +-BookListActivity.java
                  |   +-BookDownloadActivity.java  
                  |  
                  + adapter\
                  |    +-BookListAdapter.java
                  |
                  + asynctask\
                       +-BookDownloadAsyncTask.java

这种结构对于我们拥有所有活动的包的方式是有意义的。但是,我认为这看到java包就像文件夹,抽屉放到哪里放东西。 如果我们这样做,BookListAdapter类及其一些方法需要公开。我想使用不像文件系统的java包来组织不同文件夹中的文件,但是喜欢某种“命名空间”,从java可见性修饰符中获取全部好处,包括包可见性。

因此,由于BookListAdaper仅用于BookListActivity,我希望它具有包访问级别。 BookDownloadAsyncTask也是如此,它仅用于BookDownloadActivity。

当然在这个例子中,Adapter和AsyncTask是微不足道的,所以我们可以将它们作为嵌套类写在各自的活动中。但是想象一下,活动使用的类更大或不止一个,并且再次特定于该活动

从这个角度来看,我很想做:

src/com/company/bookapp\
                  + list\
                  |   +-BookListActivity.java
                  |   +-BookListAdapter.java  
                  |  
                  + download\
                       +-BookDownloadActivity.java
                       +-BookDownloadAsyncTask.java  

使用这种方法,只有Activites对应用程序的其余部分可见,并且他们使用的类具有包可见性,而应用程序的其余部分不知道它们,我认为它更封装且更好。< / p>

但是,这是否意味着每个活动应该有不同的包?如果两个活动使用相同的适配器怎么办?

我很想知道你们在这方面做了什么,以及其他相关的问题,比如在哪里放置扩展视图。

1 个答案:

答案 0 :(得分:0)

您可以从其他包导入类,因此您可以根据需要将其拆分。 我一直把它放在MVC包中。

但是如果你创建一个protectet类或方法,它只能在相同的包中使用。