2016-08-21 6 views
4

OKは、IComparableをを実装され、単一のクラスの他のインタフェース(同様IDisposableをSRP原理の違反。すべてのクラスは、ACシングルresponsabilityとメソッドを実装する必要がありSOLID、SRP、IComparableを

SRP状態が凝集クラスを達成するために高度に相互接続する必要があります。

他の責任を比較していないのですか?

何らかの明確化が認められるであろう。

+0

ISPはどうですか? SRPとISPの両方がSOLIDの一部であるため、競合してはいけません。 –

答えて

4

もし私があなただったら、私はSRPに固執しようとしますが、その努力が最終的には非生産的になるほど厳密ではありません。それで今言われたように、あなたは何をすべきですか? IComparableを実装し、オブジェクト内に完全にカプセル化された比較を持つか、別の比較器を持ち、その中に比較ロジックを実装します。比較のために、SRPに関する限り、比較がかなり基本的であり、変更の対象にすべきではない場合、私はIComparableを実装し、それを使って完了します。将来的にいくつかの変更が予想される場合や、比較がユースケースに依存する場合、私はコンパレータのルートに行きます。究極の目的は、閉じたコンポーネントを開発し、それらを合成することで協力させることです。そのため、比較の変更がほとんどない場合、コンポーネントを閉じることができ、再度聞くことはありません。あなたのコードでIComparableの使用についてコメントすることもできます。将来変更が起こった場合は、実際には起こらなかった変更が起こったので、コンパレータを使用してコンパイルするように切り替えてください。

+0

ありがとうございますので、これらの原則を順守することはあまり厳しくすべきではありません。状況によって異なります。エンティティの比較はどうですか? –

+1

SOLIDはツールであり、終了する手段ではありません。あなたはしばしば、厳密さと寛容の間にする選択肢があります。あなたはすべての変更を予見することはできませんし、簡単に保つ必要があります。私の謙虚な意見では、厳格なSRPはあなたに力を与えるでしょう。エンティティに関しては、エンティティが永続オブジェクトを意味する場合、私が以前に書いたものはまだ成立しています。これは、変更の類似性とユースケースの依存性に依存します。また、将来同じエンティティに対して異なる比較を持つ異なるユースケースを使用しますか。 –

3

私は、IComparableとIDisposableの義務は、ではなく、という責任があり、したがってSRPに違反しないと主張します。

SRPのコンテキストでは、システムのインタラクタ(つまり、ユーザ、ロール、外部システム)に責任があります。システムにビジネス要件文書がある場合、すべての責任は機能要件または非機能要件内で少なくとも推論されるべきです。そうでない場合は、オブジェクトがどのように処理されるかを変更するよう依頼するビジネスオーナーがいます。

私はSRCについて学んだ後、最初のプロジェクトで「クラスごとに1つのパブリックメソッド」と解釈し、それを厳しいルールとして適用しました。それが「コンプライアンス」にとどまるのは簡単でしたが、必要以上に複雑なコードで終わりました。

IComparable/IDisposable実装を変更する必要がある場合、その変更はクラスの機能(ビジネス)部分によっても変更されます(同時にの理由)。

関連する問題