4

単一責任の原則について読んだばかりですが、ある時点で、Robert C. Martinは、クラスに複数の責任があることを確認するのは難しい場合があると述べています。

誰かがそのようなクラスの例を提供できますか?

4

2 に答える 2

4

メソッドを持つHTTPクラスを考えてみましょう

  • Get(URL url)
  • SendRequest(文字列リクエスト)

これらの方法は両方ともHTTPと関係があります。ただし、GetとSendRequestの抽象化レベルは異なります。Getは、実際にはSendRequestを使用してGETリクエストを送信する場合があります。したがって、SendRequestは低レベルのHTTPクラスにあり、Getは低レベルのHTTPクラスを使用する高レベルのHTTPクラスにある必要があります。

于 2010-09-30T09:27:36.593 に答える
2

別のStackOverflowユーザーが数時間前にそのような例を質問で示しているので、面白いです。

このクラスを検討してください。

[Serializable]
class MyClass
{
  //Serializable fields
  public void Save()
  {
     //Saving data into file
  }

  public void Load()
  {
    //Loading data from file
  }
}

このクラス(MyClass)には、いくつかの個別の役割があります。

  1. このクラスはシリアル化可能です

  2. このクラスは、彼の状態をいくつかのストレージに保存できます

多くの場合、永続ストレージを単純なバイナリファイルからXmlファイル、またはリモートストレージ(たとえばWCF経由)に変更する場合、このシリアル化可能なエンティティを簡単に再利用できないため、これはお勧めできません。

MyClassWCFSaverのようなサブクラスを作成することもできますが、この場合でも、シリアル化可能なクラスMyClassとMyClassSaversの独立した階層(xml、バイナリ、またはWCFストレージ用のいくつかの異なるサブクラスを使用)を使用する方がはるかに簡単です。

ところで、そのため、多くのORMでは、エンティティをリポジトリから区別することがよくあります(リポジトリパターンを参照)。

于 2010-09-30T19:22:00.603 に答える