【发布时间】:2020-03-29 02:04:07
【问题描述】:
是否有任何策略来划分类以应用单一职责原则?
在一个中等规模的团队中,我们正在开发一个可穿戴管理器应用程序,它可以连接不同类型的可穿戴设备,例如 Wearable1 和 Wearable2(一次连接一个连接)。每个可穿戴设备都有不同类型的数据交换功能。所以我决定根据可穿戴类型来划分责任。即
interface Manager {
// common functionalities
}
class Wearable1manager implements Manager {
// Manages wearable1 specific functionalities
// as well as wearable1 related capabilities
}
class Wearable2manager implements Manager {
// Manages wearable2 specific functionalities
// as well as wearable2 related capabilities
}
我的一位同事否认我的设计,称它违反了Single Responsibility Principle (SRP),因为与能力相关的功能应由单一能力管理器处理。他的提议就像,
interface Manager {
// common functionalities
}
class WearableManager implements Manager {
// Manages wearable1 specific functionalities
// as well as wearable2 specific functionalities
}
class CapabilityManager implements Manager {
// Manages wearable1 related capabilities
// as well as wearable2 related capabilities
}
基本上,我发现我们都在强调应用单一职责原则,但我们划分职责的想法是基于不同的方面。当我需要根据哪个职责来决定我应该对类进行划分时,我经常发现我处于这种危急情况。所以我的问题是,
对于 OOP 设计,是否有任何特定的指导方针有助于决定划分类以应用 SRP?还是这纯粹依赖于经验?我希望应该有具体的步骤来分析和解决这种混乱。感谢有经验的人提出建议。
【问题讨论】:
-
这两种设计看起来都不对。这些“经理”类用于是什么?
-
@Matt 管理器用于处理功能。虽然它应该包含可穿戴实例和其他东西。我只是向 MWE 展示了面对决策困境的实际问题。
-
这很模糊。 “经理”类通常管理事物或事件的集合、聚合状态、跟踪添加和删除等——与人类“经理”所做的事情相同。 SRP 意味着每个组件为一个老板做一项工作。我没有看到任何需要完成的工作或任何需要完成的老板。没有它,你只是将代码分割成多个文件,而不是设计软件。从您的应用程序的目的来看,您似乎可能需要 一个 WearableManager 类 + 管理用户拥有的可穿戴设备集合的接口。
标签: class oop design-patterns single-responsibility-principle