Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# OOP-OOD-哪个方法应该在哪个类中?_C#_Oop - Fatal编程技术网

C# OOP-OOD-哪个方法应该在哪个类中?

C# OOP-OOD-哪个方法应该在哪个类中?,c#,oop,C#,Oop,多年以来,我一直用过程语言(主要是VB6)编写程序。现在我在学C。我读了几本书,完成了一些事情,但有时我会问自己:一个方法应该在这门课上,还是在那门课上,还是在别的什么地方 下面是一个示例:我编写了一个控制台程序,它扫描目录树中的所有文件,并根据一些规则为所有文件设置NTFS安全性。对于每种“文件类型”(即发票、电子邮件、Excel文件),我都有具有正确安全设置的模板文件 我的程序执行以下操作: 读取MyApp.exe.config中应该写入日志文件的位置 启动日志文件 用“文件类型”(当前硬编

多年以来,我一直用过程语言(主要是VB6)编写程序。现在我在学C。我读了几本书,完成了一些事情,但有时我会问自己:一个方法应该在这门课上,还是在那门课上,还是在别的什么地方

下面是一个示例:我编写了一个控制台程序,它扫描目录树中的所有文件,并根据一些规则为所有文件设置NTFS安全性。对于每种“文件类型”(即发票、电子邮件、Excel文件),我都有具有正确安全设置的模板文件

我的程序执行以下操作:

  • 读取MyApp.exe.config中应该写入日志文件的位置

  • 启动日志文件

  • 用“文件类型”(当前硬编码)的详细信息填写列表
  • 在MyApp.exe.config中读取上述列表中模板文件的位置和文件名
  • 更多步骤
  • 我有一个带有Main方法的classes程序,FileWork可以扫描文件,SecurityWork可以设置NTFS安全权限,ApplConfig可以读取和写入配置信息

    现在我的问题是:我应该把上面列表中步骤4的方法放在哪里?这涉及通过ApplConfig类读取的SecurityWork类的设置。该方法应该在SecurityWork类中,因为它涉及安全设置,还是应该在ApplConfig类中,因为它从配置文件读取信息,还是应该在Program类中?从技术上讲,所有版本都可以工作,我知道如何编写它们

    我知道有一些面向对象的原则,比如封装和其他。我要寻找的不是上述不完整示例的答案,而是一组我应该问自己的问题,以决定涉及多个类的方法应该在哪里

    以前也有人问过类似的问题,也有人回答过类似的问题,但大多数时候我都会读到这样的答案:你可以这样做,也可以那样做,这或多或少取决于你自己

    你有什么建议?也许是一个问题清单,一篇文章或一本书

    为了将这个问题保持在Stackoverflow规则的范围内,我也很乐意阅读上面例子的答案,并解释为什么应该是这样而不是那样

    对这个问题的一个简短补充:我认为在许多情况下,A类方法属于哪个类是显而易见的。这就是我从书本中学到的,因为它们经常使用直截了当的例子

    只有在涉及两个或多个类的情况下,才会出现“我如何做到这一点?”这种情况,并且该方法可以在这些类中的任何一个类中使用,并且程序可以工作。那么问题是:它如何才能发挥最好的作用?记住未来的修正案,最好的办法是什么

    我已经很感激到目前为止所有的评论和回答。谢谢。

    好吧,这不是stackoverflow的问题,但我不知道在哪里问这个问题更好。
    对于您的示例,答案是将步骤4的方法放在
    ApplConfig
    类中,并让它将读取的值发送到
    SecurityWork

    除了封装之外,还有一种称为的东西,它基本上表示类(和方法)应该只负责一件事。
    设想一个场景,您希望位置和文件名存储在数据库中,而不是存储在app.config中。通过保持单一责任原则,你所需要改变的就是一个类,一切都应该像以前一样工作

    关于确定方法属于哪一类的正确方法,有很多事情要说,但我认为这可能是最容易解释和理解的方法之一,它至少会在80%的时间里给你答案。

    我想问

    • 与其他对象的耦合程度最低的位置
    • 这种药物的副作用最少(最好是没有副作用)可以用在哪里
    • 是否有任何有用的模式(请参阅)

    我从这里开始:每个类及其所有成员,无论是属性、方法、事件等,都应该有一个共同的职责,因此,如果您有一个方法ReadXml()和WriteXml(),那么它们将属于一个名为XmlManager的类。第三种方法SaveUserData()不适合放在XmlManager类中。SaveUserData可以使用WriteXml()来保存用户数据,但也可以使用DatabaseManager类来保存用户数据。另一个指导原则是,您应该将表示(GUI)与业务逻辑(当前项目的逻辑)和数据访问/数据对象分开。