私が書いているアプリケーションには、Policy クラスがあります。ポリシーには 4 つの異なるタイプがあります。各ポリシーは、ポリシー A > ポリシー B > ポリシー C > ポリシー D のように、他のポリシーに対して重み付けされます。
あるポリシーが別のポリシーよりも優れているかどうかを判断するロジックを実装する責任は誰にありますか? 私が最初に考えたのは、> および < 演算子をオーバーロードし、ポリシー タイプ自体にロジックを実装することです。
それはSRPに違反していますか?
私が書いているアプリケーションには、Policy クラスがあります。ポリシーには 4 つの異なるタイプがあります。各ポリシーは、ポリシー A > ポリシー B > ポリシー C > ポリシー D のように、他のポリシーに対して重み付けされます。
あるポリシーが別のポリシーよりも優れているかどうかを判断するロジックを実装する責任は誰にありますか? 私が最初に考えたのは、> および < 演算子をオーバーロードし、ポリシー タイプ自体にロジックを実装することです。
それはSRPに違反していますか?
PolicyComparer クラスが評価を行うべきだと思います。
PolicyComparator クラスが必要です。< と > をオーバーライドしたい場合は問題ありませんが、Policy 基本クラスでそのオーバーライドを行い、それらの実装で PolicyComparator を使用してそれを実行させます。
あなたは過負荷で正しい軌道に乗っていると思いますが、これの延長は明らかにはるかに長くなります
if (A > B || B > C || C > D) ...
クラスに PolicyWeight 属性を格納することもできます。これは、簡単に比較できる単純な組み込み型 ( int、unsigned int、... ) です。
確かに専用の比較クラスです。追加のロジックを提供する必要がある場合 (たとえば、ポリシーを比較する 2 つまたは 3 つの異なる方法がある場合)、このアプローチにより柔軟性が向上します (演算子のオーバーロードでは実現できません)。