,而不是使用一个接口这样的:

public interface IStartable
{
    void Start();
    void Stop();
}

我通常只是使对象的构造运行Start()的代码,并实现IDisposable使得dispose方法运行停止()码。

时,它只是一个风格问题?还是我失去了一些东西通过不必像IStartable重要?我看到的是额外的复杂性,因为你必须保持它的启动/停止状态。

什么是使用开始的利弊/停止VS使用构造函数/处置,特别是在一个IoC / DI容器的上下文

编辑:伟大的答案,你说服我使用启动的对象的接口。我不能决定谁的答案是最好的,所以我会接受24小时后,谁拥有最先进的选票。

有帮助吗?

解决方案

要使用的接口的一般优点在于,它们是自描述和自广告。如果没有接口,你没有办法问的对象,“你能启动和停止?”如果你使用一个接口,通过对比,你可以查询对象,看看哪些人将这些类型的消息作出回应。然后,你可以安全地保证这样的对象已经实现由接口封装的功能。

其他提示

在一般情况下,构造函数应该产生适当初始化的对象

,仅此而已!

它可能依靠什么,特别是,你的意思是要发生的事情,当你说开始()。但在常规执行一般情况下,混合对象初始化(尤其是有状态和/或长期运行的执行力!)违反的SoC

这也留下模糊性很大。给消费者,给定对象我们怎么知道它是“开始”的时候,我们调用构造函数? “对于这个给定的对象,它实现了没有合同,我必须离开它,因为它符合我的期望笔者希望”?接口使得动作明确的存在和可用性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top