【问题标题】:the right design approach for creating different User classes创建不同用户类的正确设计方法
【发布时间】:2016-02-28 14:03:34
【问题描述】:

我正在尝试创建具有不同用户的聊天应用程序:简单用户、vip 用户等等。

所有类型的用户都将拥有简单用户拥有的数据,例如:姓名、密码、电子邮件等,但所有其他用户类型只有他们的唯一选项。

我想创建一个 SimpleUser 类,该类将具有通过使用私有变量、getter/setter 等实现的基本功能,而所有其他用户类型将具有自己的类,这些类扩展 SimpleUser 类并添加其独特的功能.

但是在我看到这篇文章之后 Do subclasses inherit private fields? 这似乎不是正确的方法。

我不确定使用接口提供可选功能是否会有所帮助,因为我在使用 getter/setter 访问的每个用户类型中仍然有私有变量。

目前我也在每个屏幕上检查用户的类型(以便为他选择正确的选项),它看起来很笨重,有没有办法只检查一次用户的类型(当用户登录)并在所有屏幕中简单地使用他的独特功能?

  • 设计课程的正确方法是什么?

  • 他们的一个解决方案是我的两个问题吗?

【问题讨论】:

  • 简单用户和VIP用户会有哪些不同的行为?专注于建模行为,而不是数据。

标签: java android oop design-patterns


【解决方案1】:

也许从另一面处理事情,而不是考虑用户,也许考虑屏幕,每个用户都有一个“级别”,屏幕提供每个级别的功能,因为实际上功能并不是真正的用户屏幕,屏幕只是根据用户决定。

我想我会用 Simple VIP 等枚举来统计,这个枚举将具有为该级别用户做适当事情的方法。

【讨论】:

  • 你说得对,但是每个人的屏幕都是一样的,只是一些功能变化,一些字段出现/消失。
  • 然后让我印象深刻的是屏幕负责,所以,如果你有一个大厅屏幕,它知道如何为登录的User绘制自己,这取决于用户的“级别”,如果User 必须了解如何控制Screen,那么您添加到聊天程序中的每个新Screen 都会导致User 类发生变化。例如,您可以拥有一个配置对象LobbyConfig,它可以为用户级别返回适当的配置。
  • 你说得对,但每个人都有相同的屏幕,只是一些功能变化,一些字段出现/消失。如果我将 Enum 与方法一起使用,如何确认只有“正确”类型的 Enum 才能使用该方法?同样从我在 OOP 中学到的东西(也许我误解了)它不是创建类型(类,枚举等)的最佳方法,他的部分对象(在我们的例子中是枚举)从不使用他的某些功能。
  • 一个枚举代表一个Level的可用性,终端上的每个物理用户都会得到自己的Screen实例,它会有一个方法,比如init(Level level)这将调用@987654332 @ 返回一个 ScreenConfig init 可以用来关闭和打开字段。使用类型确保正确的访问,没有理由不能让一个类不具有不总是使用的功能,在继承时不实现所有内容有时是不好的形式,因为这会破坏 IS-A 关系,但有时它会发生,我认为这里不会发生这种情况。
  • 谢谢,我需要找到在 Android 使用方面实现这一点的正确方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
相关资源
最近更新 更多