【问题标题】:Android best practices for package structure issue [closed]包结构问题的Android最佳实践[关闭]
【发布时间】:2013-07-22 09:38:11
【问题描述】:

基于

我做了如下的Android包结构:

  • com.company.product.activities

  • com.company.product.database

  • com.company.product.fragments

  • com.company.product.fragments.adapters

  • com.company.product.models

但有时,根据要求,我需要一个用于自定义对话框的适配器。

我应该把这个放在哪里?因为它是一个小型适配器,所以它主要用于对话框中的 Activity 中,操作会反射回 Activity。

面临的问题是:

  1. 过多的上下文(Activity)引用被传递给适配器。

  2. 所有方法最终都是公开的,这违反了隐藏实现细节的 OOP 概念。

  3. 私有适配器和封装结构会有多大不同?这是Android项目包结构的标准方法吗?

【问题讨论】:

    标签: android package standards project-structure


    【解决方案1】:

    我会将适配器放在adapters 包中。即使it is small adapter, mostly its to be used within a activity in a dialog, with operations reflecting back to activity,您也永远不会知道该适配器将如何发展以及将在什么情况下使用它。

    关于您的担忧:

    1. Too much of context references - 适配器的每个实例都有一个 Context 可供参考。只要您没有从适配器泄漏任何东西,那么这不是问题。您也可以通过其他实现扩展此适配器,这也将适用于这些实现。
    2. All methods end up public, which fails the OOP's concept of hiding implementation details。只要您从您的应用程序调用适配器(应该始终如此)并且您没有构建 SDK,那么我真的看不出问题。如果您担心 OOP 最佳实践,我宁愿担心让适配器尊重 Single Responsibility Principle:除了显示给定数据之外,不要让适配器做更多事情。
    3. 考虑到可重用性,我宁愿不将适配器作为私有(静态或非静态)类成员。要添加更多内容,当您处理从内部类调用 private 代码时,有一个 best practice 不鼓励使用 private 访问。

    总结一下,考虑到可重用性、Single Responsibility 和最佳实践文章,我赞成或将 adapters 分离到专门的课程中。

    【讨论】:

    • 好的,明白你的意思,但是在适配器上每个项目视图(例如图像视图)单击需要关闭相应的对话框等,到目前为止在哪里处理该原因,需要关闭对话框跨度>
    • 对于这种情况,我将遵循片段中描述的模式:在适配器中定义一个静态接口,负责显示/关闭对话框,并且可以实现实现本身(DialogFragment 的实际显示和关闭)在父活动或片段中。您可以为该对象传递一个实例,也可以在适配器构造函数上强制进行类转换。这尊重我以上 3 个陈述。
    • 感谢您确认,想这样做,但不确定
    猜你喜欢
    • 2011-09-30
    • 1970-01-01
    • 2011-07-23
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 2018-12-29
    相关资源
    最近更新 更多