C# 单一责任原则混乱
我正在阅读这篇文章以了解SRP。 最初有一个IModem接口C# 单一责任原则混乱,c#,solid-principles,C#,Solid Principles,我正在阅读这篇文章以了解SRP。 最初有一个IModem接口 interface IModem : IDisposable { void Dial(String number); void Send(char c); char Recv(); } 此接口有两个职责,一个是连接,另一个是数据交换,因此应在子接口中对其进行分解,并完成以下操作:- interface IModemConnection : IDisposable { void Dial(String
interface IModem : IDisposable
{
void Dial(String number);
void Send(char c);
char Recv();
}
此接口有两个职责,一个是连接,另一个是数据交换,因此应在子接口中对其进行分解,并完成以下操作:-
interface IModemConnection : IDisposable
{
void Dial(String number);
}
interface IModemDataExchange
{
void Send(char c);
char Recv();
}
直到这一部分我理解了,但进一步的,上面的接口被更改如下,我无法获得什么公共IModemDataExchange拨号(字符串号)部分正在做
interface IModemConnection : IDisposable
{
IModemDataExchange Dial(String number);
}
interface IModemDataExchange
{
void Send(char c);
char Recv();
}
谁能告诉我为什么我们要这么做。教程有这样一句话 调制解调器连接实现成为数据传输的工厂 交换实现 。据我所知,作者的目标是在您拨打另一个调制解调器(建立连接时)时返回数据交换对象。当然,关于信令部分还有其他问题,例如接受呼叫/请求等。然而,作者并没有深入讨论这个细节,因为这可能有点脱离本教程的主题。在我看来,Dial返回一个IModemDataExchange,您可以在该对象上调用Send/Recv。比如说,
using (IModemConnection modemConnection = new IsdnModem())
{
IModemDataExchange dataExchange = modemConnection.Dial("123456")
dataExchange.Send("Hello");
}
正如作者所暗示的,Dial调用另一个调制解调器并创建一个数据路径,以便通过该数据路径进行通信。这也是关于工厂模式的。教程有这样一句话 调制解调器连接实现成为数据传输的工厂 交换实现 。据我所知,作者的目标是在您拨打另一个调制解调器(建立连接时)时返回数据交换对象。当然,关于信令部分还有其他问题,例如接受呼叫/请求等。然而,作者并没有深入讨论这个细节,因为这可能有点脱离本教程的主题。在我看来,Dial返回一个IModemDataExchange,您可以在该对象上调用Send/Recv。比如说,
using (IModemConnection modemConnection = new IsdnModem())
{
IModemDataExchange dataExchange = modemConnection.Dial("123456")
dataExchange.Send("Hello");
}
正如作者所暗示的,Dial调用另一个调制解调器并创建一个数据路径,以便通过该数据路径进行通信。这也是关于工厂模式的。我没有通读整篇文章,但示例很简单:当您只有
公用无效拨号(字符串号)时
在IModemConnection
中,通过此接口使用的对象可以直接拨号和。。。好吧,如果他们只是拨号,因为void
返回“type”,调用此方法后就没有其他事情要做了。有点没用,对吧?因此,为了在调用
拨号
方法后执行某些操作,接口现在返回IModemDataExchange
对象,该对象可用于发送
和接收
如果
IModem
接口没有拆分为两个单独的接口,那么返回void
就可以了(您可以看到返回void
的相同方法概念的示例)。但是为了强制和展示SRP原理,作者决定给出这个例子,通过这种设计,拨号(字符串编号)
应该返回IModemDataExchange
结果,可以在拨号后用于执行其他操作。我没有通读整篇文章,但这个例子很简单:当你刚刚有了公用无效拨号(字符串号码)
在IModemConnection
中,通过此接口使用的对象可以直接拨号和。。。好吧,如果他们只是拨号,因为void
返回“type”,调用此方法后就没有其他事情要做了。有点没用,对吧?因此,为了在调用
拨号
方法后执行某些操作,接口现在返回IModemDataExchange
对象,该对象可用于发送
和接收
如果
IModem
接口没有拆分为两个单独的接口,那么返回void
就可以了(您可以看到返回void
的相同方法概念的示例)。但是为了强制和显示SRP原理,作者决定给出这个例子,通过这种设计,拨号(字符串编号)
应该返回IModemDataExchange
结果,可以用于拨号后的其他操作。记住:
- 单一责任:每个接口负责单一责任
- 打开以进行扩展,关闭以进行修改:
- Liskov替换:传递接口,以便您可以替换所有使用该接口的不同类
- 界面分离:因为分离,一个改变不会影响另一个李>
- 依赖项反转:通过使用接口和实现您的可靠规则,您已经为控制反转和依赖项注入做好了准备李>
- 单一责任:每个接口负责单一责任
- 打开以进行扩展,关闭以进行修改:
- Liskov替换:传递接口,以便您可以替换所有使用该接口的不同类
- 界面分离:因为分离,一个改变不会影响另一个李>
- 依赖项反转:通过使用接口和实现您的可靠规则,您已经为控制反转和依赖项注入做好了准备李>
因此,当您创建IModemConnection实例并调用拨号(123456)时,它会传回接口IModemDataExchange的实例。这基本上是说,一旦连接,您就会对使用接口IModemDataExchange的任何类的数据交换感兴趣。课堂上的其他内容都是额外的 一旦连接上调制解调器,你就只能和它交换数据了,不是吗?@CédricBignon我正在读关于固体原理的书,我正在读