【问题标题】:Composition in a communication protocol通信协议中的组合
【发布时间】:2014-08-11 13:27:56
【问题描述】:

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

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

我正在考虑按如下方式实现组合:

Device
-BackupManager
--Backup()
--BackupAsync()
--Restore()
--RestoreAsync()
-RequestManager
--Request()

请求管理器实际上包含大约 7 个函数,它们基本上都用不同的参数做同样的事情。

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

您会建议保持这种方式,还是应该让 Device 类实现 BackupManager 和 RequestManager 的功能并将调用转发到适当的组件?

【问题讨论】:

    标签: c# design-patterns composition


    【解决方案1】:
    • Single Responsibility Principle 建议您保持这种方式。
    • Code Smell "Middle Man" 建议您不要引入委托方法。
    • 我推荐你一样
      • 缺点:客户端的代码可读性稍差。您可能会重新考虑类和函数的命名。
      • 优势#1:这样维护起来更容易。这包括重构和调试。
      • 优势 #2:层次结构内的可读性要容易得多,因为容器类的唯一职责是包含某些内容(再次强调单一职责原则)。

    【讨论】:

    • @saracaen 可以通过使用内部类或仅通过将具有相同目的(或职责)的代码段分组到 C# #region 中,在现有 C# 类中构建轻量级结构。这样您就可以设计类层次结构属性并以更轻量级的方式实现它
    猜你喜欢
    • 1970-01-01
    • 2017-05-16
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 2020-01-16
    • 2016-10-22
    相关资源
    最近更新 更多