C# 通信协议中的组合

C# 通信协议中的组合,c#,design-patterns,composition,C#,Design Patterns,Composition,我正在研究一种通信协议,该协议将通过USB或TCP连接与设备进行通信 在代码中,我有一个名为Device的类,它表示设备。从这里我想能够做两件事;与设备通信(请求和写入数据),并从设备备份和恢复设置 我正在考虑实施以下组合: Device -BackupManager --Backup() --BackupAsync() --Restore() --RestoreAsync() -RequestManager --Request() 请求管理器实际上包含7个以上的函数,这些函数使用不同的参数执

我正在研究一种通信协议,该协议将通过USB或TCP连接与设备进行通信

在代码中,我有一个名为Device的类,它表示设备。从这里我想能够做两件事;与设备通信(请求和写入数据),并从设备备份和恢复设置

我正在考虑实施以下组合:

Device
-BackupManager
--Backup()
--BackupAsync()
--Restore()
--RestoreAsync()
-RequestManager
--Request()
请求管理器实际上包含7个以上的函数,这些函数使用不同的参数执行基本相同的操作

我遇到的问题是,为了执行请求,我必须调用Device.RequestManager.request()

您建议这样做,还是设备类同时实现BackupManager和RequestManager的功能,并将调用转发到适当的组件?

  • 建议您这样做
  • 建议您不要引入委派方法
  • 我也推荐你
    • 缺点:客户端的可读性稍差。您可以重新考虑类和函数的命名
    • 优点#1:这样维护起来容易多了。这包括重构和调试
    • 优点#2:层次结构内部的可读性要容易得多,因为容器类的唯一职责是包含某些内容(再次强调单一职责原则)

@saracaen轻量级结构可以通过使用内部类或将具有相同目的(或职责)的代码片段分组到现有C#类中来构建。通过这种方式,您可以设计类层次结构属性并以更轻量级的方式实现它