Java 在Android中,将类放在包名下的最佳实践是什么

Java 在Android中,将类放在包名下的最佳实践是什么,java,android,packages,Java,Android,Packages,你好, 我刚刚在Android上完成了一项测试,该测试旨在构建一个应用程序,该应用程序可以接收实时新闻提要,并显示它们。然而,老师非常挑剔,因为我把所有的课程都放在一个包里 我只是想知道包装类的最佳实践是什么。对于我的特定测试,我在此包名称下有以下类: com.viewsys.ncon DBHelper <-- database creating and ugprading DetailActivity <-- activity that add the Nc

你好,

我刚刚在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
我的课程是:

Android Studio 0.8.11

DBHelper首先可以按模型(保存数据的类)和视图(显示的所有内容)进行分离,然后可以为不同类型的类创建子包

例如:

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
com.viewsys.ncon.model

Utilities
com.viewsys.ncon.model.db

NconContract
JsonNewsFeed
NewsFeed
com.viewsys.ncon.view

DBHelper
NewsFeedDB
com.viewsys.ncon.view.activities

NconViewPager
com.viewsys.ncon.view.fragments

DetailActivity
MainActivity
SplashActivity

您应该尽量减少包依赖循环。这意味着一个包可以依赖于另一个(或多个其他)包并使用它们的类,但是所需的包应该最小化对第一个包的依赖。因此依赖性调用应该只进入一个方向。

将类划分为包应该根据内聚和耦合的编程原则来完成

简单地说,内聚意味着相关(或某一类型)的事物应该结合在一起。例如,Simulant建议的片段和活动


耦合是指不同事物之间相互依赖的程度。在可能的情况下,事情应该是松散耦合的——依赖关系只能单向进行。如果两个模块相互依赖,我们说它们是紧密耦合的,它们应该是同一个包的一部分——尽管您可能希望通过引入接口来分离它们的依赖关系。如果依赖项只有一种方式(应该是这样),那么您可以将它们分为不同的包。

始终尝试保持模块松散耦合,以便将来支持可伸缩性。如果将所有类放在同一个包中,可能会导致可伸缩性问题。将片段、活动和模型都保存在不同的包中

我的软件包结构与Simulant的建议类似,我发现这是维护结构良好的项目的最佳方法

但是,我也为扩展您自己的一个对象的对象创建子包。 例如:

NconDetailFragment
NconListFragment
SplashFragment

当项目变得更大时,这种特殊的方法对于在项目中导航非常有用,特别是当您扩展了许多以前的自定义对象功能时-

  • 项目活动-放置所有活动
  • 项目.片段-片段
  • project.broadcastReceiver
  • project.databaseHelpers-放置用于处理单个表的数据库助手类以及用于创建所有数据库表的主SqliteHelper类
  • project.networkTasks-对不同服务的不同API的所有调用都转到此处
  • 项目服务-包括作为服务运行的类。有时它们与网络任务重叠
  • 项目。常规-包括常规课程。例如,假设您将学生数据存储在表中。然后你可以有一个学生班。当您创建并填充它的实例时,您可以清晰地传递与student关联的数据
  • project.utils-这包括实用程序类。这些类主要有静态方法。例如,将HttpResponse作为字符串获取的方法将放在其中一个类中

  • 一般来说,Steve所说的是正确的,应用内聚和耦合原则

    请看一下,它介绍了android开发的最佳实践,其中一个实践是java包体系结构

    简而言之,您可以这样做:

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

    活动和片段没有被归类为视图,因为它们是控制器,但它们也处理视图,所以放在它们自己的包中。

    对我来说,你做得很好。你只有十三节课。不需要将它们存放在不同的目录中。根据我的口味,在类的名称中保留“Fragment”或“Activity”后缀有点多余,特别是如果它们放在已经包含此类后缀的包中。@AlexK当然包括后缀“将有助于项目结构之外的代码可读性,不是吗?在这个包体系结构中,com.viewsys.ncon.view中的模型类应该有基本数据和对象的getter和setter,而com.viewsys.ncon.model.db应该只有与后端和服务交互的模型,对吗?