2010-12-07 10 views
3

オブジェクト指向設計で言えば、オブジェクトのデータベースに自分自身を保存する機能をクラスのCOHESIONを台無しにする機能を与えると思いますか?オブジェクトをDataBaseに保存してクラスの結束性を損なう可能性はありますか?

想像:

Product p = new Product() 
      { 
      Name = "Joy Rider", 
      Price = 100, 
      Currency = "USD" 
      }; 

あなたがデータベース上にこの製品Pを保存すると思いますが、この方法で行われなければ良いです:

p.Save(); 

かの方法でこのような何か:

ProductServices.SaveProduct(p); 

あなたはどう思いますか?

答えて

5

これは、単一責任の原則に干渉します。この例のProductクラスの目的は、Productとその製品の操作を表すことです。データベースとのやりとりは、クラスの責任の中核部分ではありません。

ProductServicesクラスを使用すると、コードのメンテナンス性が向上します。データベース内のオブジェクトを保存するためのロジックが変更されたとします(システム内のすべてのエンティティクラスを変更できます)。

8

データベースに保存できるオブジェクトは、SRP(単一責任の原則)に違反します。

永続性はすべて単独で責任があり、専用のクラスで処理する必要があります。

これは、低持続性を持つことに加えて、永続性と関係があるメンバは、持続性を扱わないクラスのメソッドで使用されないものとは関係がありません。

-1

オブジェクト指向設計の場合のみ、Saveメソッドの一部がProductの一部になっていても問題ありません。実際には、オブジェクト指向設計の世界では好ましい方法です。純粋なオブジェクト指向の観点からは、それはオブジェクトよりも機能的であるため、分割したくないということは望ましくありません。

しかし、高レベルのモジュールが低レベルのモジュールに依存すべきではないと言う依存性の逆転原理を信じている場合は、 Saveメソッドは適切ですが、抽象的なConnection型をパラメータとして使用する必要があります。これはSaveメソッドを含む素敵なオブジェクトモデルを提供しますが、接続の種類についての知識はありません。

+0

burak - ProductにSaveメソッドが必要かどうか知りたいですか?それとも、別のクラスのProductServicesに移動する必要があるかどうかを知りたいですか? – phillip

+0

実際の処理を保存することをお伺いしている場合は、製品に保存してください。その後、Odedは正しく、DRPをSRPで保存してください。しかし、メソッドをProductServicesに移動する必要があるかどうかを尋ねる場合は、正しいステートメントではなく、少し詳しく説明する必要があります。 – phillip

関連する問題