![]() |
1
15
鲍勃·马丁写了一系列关于课堂设计的文章,他称之为“坚实的原则: http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod 原则是:
因此,根据这些,让我们看看其中的一些陈述:
这是第一个大的危险标志:yadayadafile开始有两个职责:1)维护节/键/值数据结构,2)知道如何读写一个类似ini的文件。所以有第一个问题。添加更多的文件格式会使问题复杂化:当1)数据结构更改,或2)文件格式更改,或3)添加新的文件格式时,yadayadafile会发生更改。 同样,对于所有三个职责都有一个单一的验证器,这会给单个类带来太多的责任。 一个大类就是一种“代码味道”:它本身并不坏,但它常常是由一些真正坏的东西造成的——在本例中,是一个试图成为太多东西的类。 |
![]() |
2
14
我不认为班级的大小是一个问题。关注的是更多的内聚和耦合。您希望设计松散耦合和内聚的对象。也就是说,他们应该关注一件定义明确的事情。因此,如果事情非常复杂,那么这个类就会增长。 您可以使用各种设计模式来帮助管理复杂性。例如,您可以做的一件事是创建一个验证器接口,让yadakunfile类依赖于接口而不是验证器。这样,只要接口不变,就可以在不更改yadakungfufile类的情况下更改validator类。 |
![]() |
3
4
yadakungfoofile不应该知道如何从磁盘读取自己。它应该只知道如何遍历自身、公开其子项等,还应该提供添加/删除子项等方法。 应该有iyadakungfooreader接口,Yadakungfoofile将使用他的加载方法从磁盘加载自己。还有一些实现,比如abstractKungFooReader、plaintextYadakungFooReader、xmlyAdakungFoowriter,它们知道如何读取以及相应的格式。 写作也是如此。 最后,应该有yadakungfoovalidatingreader,它将带一个iyadakungfoooreader阅读器进来,使用它来读取并在读取时验证输入。然后您将验证读卡器传递给yadakungfoofile.load,只要您希望它在从磁盘读取时进行验证。 或者,您可以使读卡器处于活动状态,而不是被动类。然后,您将它用作一个工厂,使用后一种正常访问方法创建您的yadakungfoofile,而不是传递给yadakungfoofile。在这种情况下,您的读卡器还应实现YadakungFoofile接口,以便您可以链接普通读卡器->验证读卡器->YadakungFoofile。有道理吗? |
![]() |
4
2
我来解决这个问题
是的,因此根据这一点,找出如何使之尽可能无缝。在最好的情况下,设计YadakungFoofile类的方式应该使验证器能够自己接受它。 首先,语法本身应该非常简单。我不希望语法验证发生变化,所以您可以安全地硬编码。 对于可接受的属性,您可以公开来自验证程序将检查的文件类的枚举器。如果解析的值不在给定节的任何枚举器中,则引发异常。 等等…… |
![]() |
5
0
在这种情况下,我个人处理事情的方式是让一个类YadakungFoofile由一个YadakungFoofilections列表组成,它是一个YadakungFoofileValues列表。 对于验证器,您将让每个类调用它下面的类的validate方法,层次结构中最低的类实现验证方法的实际部分。 |
![]() |
6
0
如果验证不依赖于整个文件,而是只对单个节值有效,则可以通过指定对节值操作的一组验证程序来分解YadakungFoofile类的验证。 如果验证确实依赖于整个文件,那么验证自然地耦合到文件类,您应该考虑将其放入一个类中。 |
![]() |
7
0
类大小并不像方法大小那么重要。类是一种组织方式,虽然有好的和坏的方法来组织代码,但它并不直接与类的大小联系在一起。 方法大小不同,因为方法正在执行实际工作。方法应该有非常具体的工作,这将不可避免地限制其规模。 我发现确定方法大小的最佳方法是通过编写单元测试。如果您编写的单元测试具有足够的代码覆盖率,那么当一个方法太大时,它就会变得明显。 单元测试方法必须简单,否则您将最终需要测试来测试单元测试,以了解它们是否正常工作。如果您的单元测试方法变得越来越复杂,很可能是因为一个方法试图做的太多,应该被分解成职责明确的更小的方法。 |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |