Class 是否有任何策略来划分责任以应用SRP?

Class 是否有任何策略来划分责任以应用SRP?,class,oop,design-patterns,single-responsibility-principle,Class,Oop,Design Patterns,Single Responsibility Principle,是否有任何策略来划分类别以应用单一责任原则? 在一个中等规模的团队中,我们正在开发一个可穿戴管理器应用程序,它可以连接不同类型的可穿戴设备,比如说,Wearable1和Wearable2(一次连接一个)。每个可穿戴设备都有不同类型的数据交换功能。所以我决定根据可穿戴类型划分责任。i、 e interface Manager { // common functionalities } class Wearable1manager implements Manager { // M

是否有任何策略来划分类别以应用单一责任原则?

在一个中等规模的团队中,我们正在开发一个可穿戴管理器应用程序,它可以连接不同类型的可穿戴设备,比如说,
Wearable1
Wearable2
(一次连接一个)。每个可穿戴设备都有不同类型的数据交换功能。所以我决定根据可穿戴类型划分责任。i、 e

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
}
我的一位同事否认我的设计,说它违反了
单一责任原则
(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?或者这完全取决于经验?我希望应该有一套具体的步骤来分析和解决这种混乱。感谢有经验的人的建议。

没有“责任”的定义。因此,没有这样的战略。然而,这里有:1)几乎没有定义的常识,2)你所处环境的感觉

根据我的个人经验,正确的问题是“为什么我需要更改此代码?”。如果有不止一个(业务?)原因,那就触发了更多思考。

没有“责任”的定义。因此,没有这样的战略。然而,这里有:1)几乎没有定义的常识,2)你所处环境的感觉


根据我的个人经验,正确的问题是“为什么我需要更改此代码?”。如果有不止一个(业务?)原因,则会引发更多思考。

单一责任原则的定义:

单一责任原则是计算机编程 说明每个模块、类或函数[1]应 对所提供功能的单个部分负责 而这个责任应该完全由软件来承担 由类、模块或函数封装。它的所有服务都应该 严格遵守这一责任。罗伯特·C·马丁 将原则表述为:“一个类应该只有一个理由 改变,“[1]虽然,由于混淆了“原因”这个词,他 最近有人说“这个原则是关于人的(演员)”[2]

正如我们可以看到的,责任的定义在上面的定义中,让我们将其表述为:

责任等同于功能的逻辑约束部分 由软件提供

因此,如果您有与功能相关的功能,那么您应该在单个类/模块中实现这些功能,因此您的同事是对的,您的初始代码将功能的实现划分为两个不同的可穿戴管理器类,这违反了原则,因为与功能相关的功能是一种责任

不过,您也有必要指出,不同的可穿戴管理器具有不同的功能。为了解决这个问题,您将需要可穿戴管理器实例的一个属性,该属性将确定它具有哪些功能。这可能是一个数组、一个字符串,甚至是第三个管理器的实例,用于处理可穿戴设备的功能,因为您可以将功能和可穿戴设备之间的关系定义为单独的职责

SRP取决于您的职责。您需要定义您的案例中的责任。要做到这一点,您需要将您的功能划分为逻辑绑定的分区(职责),从那以后,一切都将适应。然而,如果你和你的同事做了不同的划分,那么你们两人在脑海中有不同的责任实体,讨论这一点是明智的


责任作为一个概念显然是可以定义的,然而,定义你的责任是你和你的同事的工作。对问题的经验和理解越多,分区就越好。

单一责任原则的定义:

单一责任原则是计算机编程 说明每个模块、类或函数[1]应 对所提供功能的单个部分负责 而这个责任应该完全由软件来承担 由类、模块或函数封装。它的所有服务都应该 严格遵守这一责任。罗伯特·C·马丁 将原则表述为:“一个类应该只有一个理由 改变,“[1]虽然,由于混淆了“原因”这个词,他 最近有人说“这个原则是关于人的(演员)”[2]

正如我们可以看到的,责任的定义在上面的定义中,让我们将其表述为:

责任等同于功能的逻辑约束部分 由软件提供

因此,如果您有与功能相关的功能,那么您应该在单个类/模块中实现这些功能,因此您的同事是对的,您的初始代码将功能的实现划分为两个不同的可穿戴管理器类,这违反了原则,因为与功能相关的功能是一种责任

不过,您也有必要指出,不同的可穿戴管理器具有不同的功能。为了解决这个问题,您需要一个属性f