1

私は数人でソフトウェアを開発しています。完成したクラス図から1つDatabaseのクラスがあり、たとえば、Orderクラスには2つのコンストラクターがあります。1つは引数がなく、もう1つはid。また、メソッドもあるので、コンストラクターでを指定すると、クラスはクラスを使用してオブジェクトのプロパティにデータを入力し、コンストラクターまたはセッターメソッドにこのクラスを挿入する場所がないとsave()想定しています。だから私は彼らがを使いたいと思っていると思います。idDatabaseDatabaseSingleton

私は彼らにそれを言う前に私の議論が有効であるかどうか知りたいので、ここに彼らはあります:

  • このようにすると、SOLID Single Responsibility Principle(SRP)が破られます。
  • Databaseクラスを必要とするすべてのクラス間に緊密な結合を導入します
  • オブジェクトの依存関係を非表示にします
  • ユニットテストがはるかに難しくなります
  • 不要なグローバル状態を導入

それらは有効な議論であり、このようにそれを行う他の欠陥はありますか?私のポイントが有効であるならば、それを彼らに言う価値がありますか?

ありがとう。

4

1 に答える 1

1

これは、アクティブレコードと呼ばれるよく知られたパターンです。これは、RubyonRailsなどのいくつかの大きなフレームワークで一般的に使用されています。それにはあなたが言及する欠点があります、そして私はあなたが潜在的な問題を強調するべきであると思いますが、議論するための選択肢がないわけではありません。

一般的な代替案の1つは、オブジェクト(DAOのセット)を保存するサービスファサードを用意することです。このパターンを使用すると、データベースへのアクセスがより明確になり、利便性が低下しますが、IMOを使用すると、メインアプリでのDB結合が減少します。おっしゃるように、これはSRPの観点からは優れており、とりわけテストがはるかに簡単になります。

于 2013-03-16T11:23:27.150 に答える