我是否遵循具有此结构的 SRP?

Am I following the SRP with this structure?

我正在尝试为 Autocad 编写一个插件,在那里,他们有这些扩展词典,您可以在其中将数据保存到 Autocad 对象中,这样当您关闭图形文件时,保存的数据仍然存在。

现在我需要4个函数来操作扩展字典:

目前,我有一个 ExtensionDictionaryManager.cs,它被部分分解为 4 个 .cs 文件,如下所示:

partial class ExtensionDictionaryManager
{
    public bool Exist() {...}
}

partial class ExtensionDictionaryManager
{
    public bool Create() {...}
}

partial class ExtensionDictionaryManager
{
    public bool Set() {...}
}

partial class ExtensionDictionaryManager
{
    public bool Get() {...}
}

这是否遵循单一职责原则?或者我应该将它进一步分解为 ExtensionDictionaryCreatorExtensionDictionaryCheckerExtensionDictionarySetterExtensionDictionaryGetter?

我担心的是,如果我确实将其分解为绝对单一的职责,而不是将相关功能组合在一起,并且在我的程序中始终如一地这样做,我最终会得到这么多对象。

执行此操作的正确方法是什么?

SRP 很难处理。例如参见 [​​=10=] class。这个 class 应该包含一个 Send() 方法吗?一个方法可以发送自己吗?或者应该有另一个class MessageSender?

有些人使用 SRP 只是为了让 classes 越来越小,这可能最终导致 classes 只包含一种方法。但是属于一起的方法应该在一起。一个很好的帮助是如何决定相同的内容 class 是:如果我必须更改一个功能,通常我必须更改几个方法。这些方法应该在同一个 class 中。如果我总是同时更改相同的两个 classes,那么这些 classes 可能应该合并。如果我只更改 class 的一部分或另一部分,但绝不会同时更改两个部分,则应该拆分 class。另见 https://hackernoon.com/you-dont-understand-the-single-responsibility-principle-abfdd005b137

回到消息示例:如果发送消息的机制与消息包含的数据完全无关,则两个 classes MessageMessageSender可能会更好。如果消息的格式与消息的发送方式密切相关,那么使用单个 class 可能会更好。但这总是一些主观的考虑。

对于您的代码:我会把它放在一个 class 中。参见示例 List<T>:这是一个用于操作列表的 class,而不是 ListAdder<T>ListInserter<T>ListRemover<T>,...如果您的 autocad 更改,您将不得不同时更改检查某物是否存在、创建等的算法。这就是为什么它们属于一个 class.