2016-06-28 13 views
0

私には2つの方法のクラスがあります。アプリケーションの実行中に、操作のインスタンスを別のクラスにパラメータとして送信します。単一の責任原則違反

public class Operations 
{ 
    /// <summary> 
    /// calculating the available money to use in operations 
    /// </summary> 
    void CalculateAvailableAmount(int x) 
    { 
     //making some calculation 
    } 

    /// <summary> 
    /// sharing some values between shareholders 
    /// </summary> 
    void Distribute(decimal total) 
    { 
     //making some calculation 
    } 
} 

Iは上記に書いた後、方法の論理は、(Iパラメータなどのインターフェースを使用する)に変更することができるので、私は、インターフェイスを使用する必要が実現。

public interface IOperations 
{ 
    void CalculateAvailableAmount(int x); 
    void Distribute(decimal total); 
} 

しかし、私はそれを決めることができない、直接それらの両方がいくつかの値を計算すること、しかし、お互いに依存し、これらの値を配布するこれらの2つの方法ではありません。ここでは、しばらくすると2つのメソッドのロジックを変更できると思いました。おそらく私は上記のような10以上の方法を書いていますが、それはSRPに違反していますか? SRPの原則に違反する可能性はあるものの、関連する方法を維持することはクラスでは良いアイデアだと思われますが、どちらを実装する方が良いですか?異なるクラスと異なるインターフェースのすべてのメソッド、またはそれは大丈夫ですか?

あなたは

答えて

1

ですね感謝のようなSRPない本当にですが、コードを整理する方法の詳細については、あなたが懸念している何か。これは、コードの整理のきわめて良い方法である、一緒のメソッドをまとめて整理しているようです。 CalculateAvailableAmountDistributeが論理的にまたは機能的に接続されていると、それは私に見えます。はい、OOPのパラダイムでは、操作対象のデータに基づいてメソッドを構成することがしばしば要求されますが、ロジックや関数による整理も有効です(OOPではないかもしれませんが)。

単一責任原則は、非常に曖昧で哲学的な原則です。多くの人は、単一のメソッド/クラス/モジュールがどれほど細かいか粗いかを決めるのに苦労します。以下は、それ自体の考え方によるものであり、正確な定義が存在しないため、決して正確な定義ではありません。

私は、そのコードが周囲のコードから独立して変化する可能性が高い場合には、それ自身のモジュールにコードを分けることが一般的なルールであると思います。これは、クラス内のメソッドまたはメソッドのグループ、またはメソッド内のコードのブロック、またはライブラリの分割さえも意味します。

私は、SRPを適用する際には一般に2つの異なる角度があると思います。

YAGNI/DTSTTCPWの角度があります。ここでは、意味が分かるまで、または100%になるまでSRPを適用しないと、将来的に役立ちます。あなたの例を挙げると、同じクラスの2つのメソッドを、周囲のコードに比べて1つまたは複数の実装がかなり頻繁に変更されていることがわかるまで、実行します。その時、SRPを適用することによってそれらを分離することは意味をなさないかもしれません。そうでないかもしれません。たぶん、コードを1つの場所に保持する方が、SRPを使用して別のファイルにコードを分けるほうが有益です。複数の開発者が同じモジュールで作業する場合は、SRPを適用する必要があります。そのモジュールをSRPにしてお互いの足を踏み外してはいけないかもしれません...しかし、それはSRPとは対照的に、懸念の分離のほうが多いかもしれません。

また、どのコードブロックが周囲のコードに比べて頻繁に変更されるのかを推測し、SRPをあなたのコードベースに時期尚早に適用します。コードを断片化する傾向があると思うので、私はこのアプローチ(特に社内コードのみ)に偏っています。私は個人的に断片化したコードを維持するのをより困難にしています。他の人は、小さなコードを理解して維持するのが簡単であることを知っています。

とにかく、少し助けてくれることを願っています。あまりにも上にそれをつかまえてはいけません。 SOLIDとデザインパターンは問題を解決するためのものです。問題がなければ、簡単に保つようにしてください。そして、もしあなたが問題を抱えるなら、それがリファクタリングの目的です:

関連する問題