在我正在编写的应用程序中,我有一个 Policy 类。有 4 种不同类型的策略。每个策略都根据其他策略加权,例如 PolicyA > PolicyB > PolicyC > PolicyD。
谁负责执行逻辑来确定一个策略是否大于另一个?我最初的想法是重载 > 和 < 运算符并在 Policy 类型本身中实现逻辑。
这是否违反 SRP?
在我正在编写的应用程序中,我有一个 Policy 类。有 4 种不同类型的策略。每个策略都根据其他策略加权,例如 PolicyA > PolicyB > PolicyC > PolicyD。
谁负责执行逻辑来确定一个策略是否大于另一个?我最初的想法是重载 > 和 < 运算符并在 Policy 类型本身中实现逻辑。
这是否违反 SRP?
我认为 PolicyComparer 类应该进行评估。
你想要一个 PolicyComparator 类。如果您想覆盖 < 和 >,那很好,但是在 Policy 基类中进行覆盖,并让这些实现利用 PolicyComparator 来完成。
我认为您在过载的情况下走在正确的轨道上,但是扩展显然要长得多
如果 (A > B || B > C || C > D) ...
您还可以在您的类中存储一个 PolicyWeight 属性,它是一个简单的内置类型(int、unsigned int、...),然后可以很容易地进行比较。
Certianly 是一个专门的比较器类。如果您需要提供额外的逻辑(例如,有两种或三种不同的策略比较方式),这种方法可以让您更加灵活(通过运算符重载无法实现)。