【问题标题】:Java extends vs object reference?Java扩展vs对象引用?
【发布时间】:2014-04-11 11:05:22
【问题描述】:

我正在开发一个 android 应用程序,并且我有一个用户类,其中包含有关用户的属性。我还有一个具有在屏幕上显示适当属性的视图(即 TextViews)的类,这些是用于 GUI 目的。这个 GUI 类需要用户类的属性,所以我也可以访问这些属性。所以我只能做出一个我不确定的决定。我想选择一个在编程实践中更好的。我不想将包括 GUI 在内的所有属性合并到一个类中。

我看到的方式是,我可以让 GUI 类扩展用户类,或者让 GUI 类有一个保存用户对象的私有全局变量。

有谁知道哪个更好,为什么?

【问题讨论】:

  • 如果您有这个选择,并且没有充分的理由使用extends,请不要使用extends。另一种方式在以后引起头痛的可能性要小得多。

标签: java android class extend


【解决方案1】:

根据MVC architecture(Android 使用的),我认为您的任何选择都不是一种好的编程习惯。

GUI 类(UI 层的一部分)扩展 User class(模型层的一部分)或在 GUI 类中引用 User 都是一个好主意(恕我直言)。 Model 和 UI 之间的交互应该委托给你的Controller(Activity)

附带说明一下,如果您可以使用Category,还有其他语言,例如Objective-C。使用类别,您可以装饰您的 UI 类以执行此类操作,而不会违反架构。

【讨论】:

    【解决方案2】:

    使用encapsulation 更好。 GUI 类扩展“用户”类是没有意义的——两者不具有任何"is-a" 关系。然而,确实让 GUI 类维护一个要使用的用户对象。

    换句话说,说一个GUI对象是一个用户对象是没有意义的,但是说一个GUI对象包含用户是有意义的用户对象。

    最后,您通常希望前端和后端尽可能独立和模块化。让您的 GUI 类扩展您的用户类会破坏这一原则。

    【讨论】:

    • 在我的例子中,gui 类不会包含人员列表,更像是,对于每个用户对象,还有一个 GUI 对象。从这个意义上说,我可以结合两个类的属性,但我不想这样做,因为其他一些类可能只需要没有 GUI 属性的用户对象......
    • @omega 是的,所以在这种情况下,您不应该通过继承来组合它们。您仍然可以对 GUI 类使用封装。
    • 那么哪个班在外面呢?
    • @omega 根据您的描述,GUI 类当然应该在外面。用户对象不应该对 GUI 有任何了解,但 GUI 需要维护一个用户对象。
    猜你喜欢
    • 1970-01-01
    • 2015-04-29
    • 2011-05-07
    • 1970-01-01
    • 2010-09-19
    • 2023-02-02
    • 2016-08-22
    • 2018-12-12
    • 1970-01-01
    相关资源
    最近更新 更多