2009-03-20 12 views
4

ビジネスオブジェクトに「データアクセス」メソッドを置くと、私はSingle Responsibility Principle(SRP)に違反しますか?ロードメソッドがクラス自体に存在する場合、メソッドがどのクラスにあるかを推測する必要がなくなり、APIがよりユーザーフレンドリーであると感じていますか?ビジネスオブジェクトの静的ファクトリが単一責任原則に違反していますか?

例:私は問題を見ない

public class Image 
{  
    public static Image FromFile(string filename) 
    { 
     return ImageLoader.LoadImage(filename) 
    } 

    public void SetPixel(int x, int y, Color color) 
    { 
    } 
} 

答えて

3

この自体には依存しないため、静的メソッドは、(Imageクラスで生活するための説得力のある理由が存在しない以外クラス内の何でも、クラス自体に)。あなたは、負荷からのメソッドの束で終わる場合

することは、彼らは別のクラスでは一般的に

1

良いかもしれない、私は単一のパスを介して自分自身のインスタンスを作成する方法を知っていることはないと思います(この場合、画像ファイルから)、有効な状態が必ずSRPに負担をかけることを保証する。このような方法が普及している場合、それはコードの匂いになります。そして、あなたは物を分けるためにヒントを取るべきです。

+0

@Johnあなたは、(自分のクラスに入っていても)このために別々のメソッドを追加し始めたら、コールの匂いに気づくでしょう。その臭いは、クラスがいくつかのことをしているからです。 – eglasius

+0

@Freddy:私が言っていることは、外部のデータストリームから自分自身を水分補給することはおそらくあなたの責任ではないと言うのは妥当だが、これの一例は必ずしも悪いことではないということだ。 –

1

私はそれが静的であるため、SRPの違反を「悪い」ものにしないと思っていますが、私は最大のソリッドの純粋さではありません。この種のヒューリスティクスはあまりにも宗教的に取られるべきではありません...

1

ところで、はい、それはあなたが考えるほど悪くはありません。どのような原則も、それを不快にする極端なものにすることができます。

静的を他の画像に適用したい場合、または他のタイプのデータに適用できるより複雑な方法を実装したい場合は、後でそれらを分離したい場合はどうでしょうか。

一般的に、Javaをリファクタリングするのは簡単ですが、今は意味を成し遂げることをお勧めします。複雑さを元に戻すような場合はいつでも再訪することを忘れないでください。

関連する問題