这是反模式吗?

ins*_*pid 8 oop design-patterns anti-patterns

情况如下:您有两个类都实现相同的接口,并且两个类一起工作以完成一些业务流程.

例如,对于networkUserManagerlocalUserManager实施IUserManager其具有方法getUser(). networkUserManager.getUser()发出请求以获取User队列并返回答复. localUserManager.getUser()从队列中获取请求,在某个数据库中查找用户信息,然后使用用户数据进行回复.

当我看到类似于这样的东西时,我忍不住想知道这是不是很糟糕的设计.这是一个糟糕的设计,如果不是这样的例子,做这样的事情会是个好主意吗?

Jef*_*dge 10

那闻起来很糟糕.当然,不同的类可能具有相同名称的方法,但如果它们都实现相同的接口,则假设它们将执行相同的操作.在这里他们正在做相反的事情!

也许这是我缺乏想象力,但我无法理解为什么这会是一个好主意.

  • +1 - 这是我第一次看到这个问题时的想法,但无法用语言表达.谢谢=) (4认同)

kdg*_*ory 2

您似乎在描述装饰器模式。在这种情况下,NetworkUserManager提供了比 提供的附加功能LocalUserManager。您没有说明您正在使用什么语言,但这种模式出现在整个java.io包中。

另一方面,您对LocalUserManager.getUser()从队列中提取消息的描述似乎是错误的——它与NetWorkUserManager工作方式背道而驰。LocalUserManager如果访问数据库,我会认为这是一个适当的装饰器,以响应其他内容(可能是NetworkUserManagerService)调用getUser().

  • 听起来确实像实现这些对象的人需要与定义接口的人进行对话:听起来“LocalUserManager”超出了接口的方法概念。希望他们不是同一个人。 (2认同)