![]() |
1
25
这取决于谁知道应该这样调用方法。
在您的特定情况下,对象的使用者似乎不关心正在进行的处理操作以外的任何事情。因为它不需要知道这些步骤发生的顺序,所以应该只有一个名为
(*)但是,通常对象至少知道
秩序
其中可以调用方法以防止无效状态,即使它不知道
什么时候
去做这些步骤。也就是说,对象应该知道足够多的信息,以防止自己进入一种无意义的状态;如果试图调用
|
![]() |
2
14
如果除非首先调用a(),否则方法b()确实无法调用,那么正确的设计要求a返回b作为参数所需的某个对象。 这是否总是切实可行是另一回事,但就是这样 应该 完成。 |
![]() |
3
4
是的,私人的,否则你就给用户留下了做错事情的机会,这只会给每个人带来痛苦。 你需要自己调用这些方法吗?他们中有人单独做些有用的事吗?如果是这样,那么您可能希望保持这些公开,但即使您将它们全部公开,您也应该拥有按正确顺序(最好使用有用的名称)调用它们的方法,以使您的用户更轻松。 |
![]() |
4
4
这完全取决于操作是否本质上是原子的。在这种情况下,对我们这些局外人来说,这看起来像是一个单一的行动,但这真的是吗?如果
在这种情况下,我会这样做:
或者更理想的情况是这样:
现在,在强制执行正确的操作顺序时,您有了粒度。 |
![]() |
5
3
在我看来,从你对象的消费者的角度来看,对象做了一件事:它将图像从一个地方移动到另一个地方。作为目标的消费者,你需要采取的所有独立步骤与我无关;毕竟,这就是为什么我要你为我这样做。
所以你应该有一个
|
![]() |
6
2
private——获取构造函数中的参数并在那里执行顺序。 不要以为打电话的人会或知道如何按顺序打电话给他们。 所以,我不想举你列举的例子,而是这样做:
|
![]() |
7
1
这实际上取决于您是否估计有人只想调用其中一个方法,以及这些方法是单独的还是可以独立实现。如果没有,那么最好避免暴露除了高层操作之外的任何东西。 |
![]() |
8
1
尽可能少地暴露,尽可能多地暴露。
如果调用
|
![]() |
9
1
是的,它绝对应该是私有的,特别是因为所有的方法似乎都是无参数的,而您只关心顺序。 我唯一考虑显式调用每个方法的时候是,如果每个方法都有几个不重叠的参数,并且您不希望将这么长的参数字符串传递给一个方法,并且希望模块化。然后你应该确保记录下来 清晰地 . 但请记住,评论是不可执行的…你仍然需要比你真正应该信任你的用户多一点。 信息隐藏和面向对象的最大因素之一…只给用户绝对必要的东西。留出尽可能小的空间来收拾残局。 |
![]() |
10
0
公共或私人的问题完全取决于你想为你的目标公开的合同。您希望对象的用户单独调用这些方法,还是希望他们调用单个“dostuff”方法并使用它? 它 全部的 取决于类的预期用途。 在你给出的例子中,我认为dostuff应该是公共的,其余的应该是私有的。 |
![]() |
11
0
你认为哪个对你班的消费者更容易? 绝对的 编写一个按正确顺序执行正确步骤的公共方法。否则,打电话的人不会做对的;他们会忘记一步或跳过一些事情。 |
![]() |
12
0
两者都不。我认为你至少有三个目标否则你就违反了单一责任原则。您需要一个“获取并保存图像”的对象、一个“操纵图像”的对象和一个“管理外部供应商通信”的对象。 |
![]() |
13
0
它们公开的一个原因是,如果您希望用户能够在步骤之间插入逻辑。在这种情况下,您应该通过保留一个非常小的状态机来强制要求函数在内部以正确的顺序调用。如果状态机以错误的顺序转换,除了做一些错误的事情(例如引发异常)之外,您还有其他选择。
但是,如果确实存在需要在步骤之间执行操作的情况,则允许它们全部保持私有的替代设计。提供一个公共回调接口,让用户附加在进程的每个步骤调用的处理程序,而不是将方法公开。在您现在的私有doiTall()方法中,您可以执行如下粒度的操作:
|
![]() |
14
0
我的软件工程经验法则是总是给用户/消费者/调用者尽可能少的机会把事情搞砸。因此,请将方法保密以确保工作秩序。 |
![]() |
15
0
fowler使用术语“特性嫉妒”来描述一个对象在另一个对象上调用少数方法(特别是重复调用)的情况。 我不知道他从哪儿弄来的。你在文学作品中看不太多,多年来很多人都不知道我在说什么(我不知道为什么,我觉得这个名字一听到就很明显了)。这就是我重复的原因) |
![]() |
A B · C#Excel自动调整列避免长文本时出错 5 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 5 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 5 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 5 月前 |