c# - 我是否遵循这种结构的 SRP?

标签 c# oop solid-principles single-responsibility-principle

我正在尝试为 Autocad 编写一个插件,在那里,他们有这些扩展词典,您可以在其中将数据保存到 Autocad 对象中,以便在您关闭图形文件时,保存的数据仍然存在。
现在我需要 4 个函数来操作扩展字典:

  • 存在 - 用于检查扩展字典是否存在
  • create - 用于创建扩展字典
  • set - 用于在扩展字典中设置数据
  • get - 用于从
    扩展词典

  • 目前,我拥有的是一个 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() {...}
    }
    
    这是否遵循单一职责原则?或者我应该将其进一步分解为 ExtensionDictionaryCreator , ExtensionDictionaryChecker , ExtensionDictionarySetterExtensionDictionaryGetter ?
    我担心的是,如果我确实将其分解为绝对单一的职责,而不是将相关功能组合在一起,并且在整个程序中始终如一地执行此操作,我最终会得到这么多对象。
    这样做的正确方法是什么?

    最佳答案

    SRP 很难处理。参见例如 Message类(class)。这个类是否应该包含 Send()方法?一个方法可以发送自己吗?或者应该有另一个类MessageSender ?
    有些人使用 SRP 只是为了让类越来越小,这可能最终导致类只包含一种方法。但是属于一起的方法应该保持在一起。一个很好的帮助是如何确定应该在同一个类中的内容是:如果我必须更改一个功能,通常我必须更改几个方法。这些方法应该在同一个类中。如果我总是同时更改相同的两个类,则这些类可能应该统一。如果我只更改类(class)的一个部分,或另一部分,但从不同时更改两个部分,则应拆分该类(class)。另见 https://hackernoon.com/you-dont-understand-the-single-responsibility-principle-abfdd005b137
    回到消息的例子:如果发送消息的机制与消息包含的数据完全无关,则有两个类MessageMessageSender可能会更好。如果消息的格式与如何发送消息密切相关,那么最好有一个类。但这总是一些主观考虑。
    对于你的代码:我会把它留在一个类(class)。参见例如 List<T> : 这是一个用于操作列表的类,而不是 ListAdder<T> , ListInserter<T> , ListRemover<T> , ... 如果您的 autocad 发生变化,您将不得不同时更改检查某物是否存在、创建等的算法。这就是为什么他们属于一类。

    关于c# - 我是否遵循这种结构的 SRP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67898699/

    相关文章:

    C# 枚举和转换

    Java通过多线程共享对象 - 需要设计模式

    oop - 单一职责原则(SRP)和我的服务等级

    c# - 线程和SOLID原理

    c# - 开源 .Net Jabber/XMPP 服务器?

    c# - Neo4j 返回 HTTP 400

    c# - 在 MVVM 中给出一些命令来查看

    c# - 接口(interface)不接受继承的成员(OO问题)

    c++ - 在另一个 objectB 中创建 objectA 时,objectA 是否是 objectS 的本地对象,并且 objectS 是否存在于对象实例化之外?

    c# - 如何克服从数据库插入方法设计挑战返回 ID