我用程序语言编写程序(主要是VB6)多年以来。现在我正在学习C#。我读了几本书并完成了工作,但有时候我会问自己:一个方法应该在这个课程中,还是在那个班级或其他地方。
这是一个例子:我编写了一个控制台程序,它扫描目录树中的所有文件,并根据一些规则为所有文件设置NTFS安全性。对于每个“文件类型”(即发票,电子邮件,Excel文件),我都有具有正确安全设置的模板文件。
我的程序执行以下操作:
读入应在其中写入日志文件的MyApp.exe.config
启动日志文件
我有使用Main方法的类Program,扫描文件的FileWork,设置NTFS安全权限的SecurityWork,以及读取和写入配置信息的ApplConfig。
现在我的问题:我应该在上面的列表中将第4步的方法放在哪里?这涉及通过ApplConfig类读取的SecurityWork类的设置。该方法是否应该在SecurityWork类中,因为它涉及安全设置,还是应该在ApplConfig类中,因为它从配置文件中读取信息,还是应该在Program类中?从技术上讲,所有版本都可以使用,我知道如何编写它们。
我知道有一些OOP原则,比如Encapsulation和其他相关的原则。我正在寻找的不是上述不完整的例子的答案,而是一些问题,我应该问自己决定哪些方法涉及多个类应该是什么。
类似的问题之前被问过并回答过,但大多数时候我都会读到这样的答案:你可以这样做或者像那样,这或多或少取决于你。
你有什么建议?也许列出一些问题,一篇文章或一本书?
为了将这个问题保留在Stackoverflow的规则中,我也很高兴看到上面例子的答案,并解释为什么它应该是这样而不是那样。
这个问题的一个简短补充:我认为在很多情况下,方法所属的类很明显。这就是我从书本中学到的东西,因为他们经常使用直截了当的例子。
“我该怎么做?”仅在涉及两个或更多类的某些情况下发生,并且该方法可以在任何这些类中并且程序可以工作。那么问题是:它如何最好地发挥作用?这样做的最佳方法是保持未来的修正。
到目前为止,我已经完全赞赏所有的评论和答案。感谢。
答案 0 :(得分:0)
嗯,这不是真的一个关于stackoverflow的问题,但我不知道在哪里问它会更好。
在您的示例中,答案是将第4步的方法放在ApplConfig
类中,并让它将读取的值发送到SecurityWork
类。
除了Encapsulation之外,还有一个名为Single responsibility principle的东西,它基本上表明类(和方法)应该只负责一件事。
想象一下,您希望将位置和文件名存储在数据库中,而不是存储在app.config中。通过保持单一责任原则,你必须改变的是一个班级,一切都应该像以前一样工作。
关于确定方法所属的类的正确方法,有很多事情要说,但我认为这可能是最容易解释和理解的方法之一,它会给你答案至少80%的时间。
答案 1 :(得分:0)
我会问