2009-07-10 12 views
0

私はプログラミングに慣れていません(現在6週間)。私は今、多くの本、サイト、ブログを読んでおり、毎日何か新しいことを学びます。豆、方法、アクセスおよび変更?それらを処理するために推奨されるプラクティス(ColdFusionなど)は何ですか?

現在、私はcoldfusion(仕事)を使用しています。私はweb上でoopとcfの関連記事の多くを読んできました。次に、いくつかのフレームワークを見るためにmxunitに入る予定です。

1つのことが私を悩まし、満足のいく答えを見つけることができません。 BeanはDataTransferObjectsと記述されることもあり、1つまたは複数のソースからDataを保持します。

このデータを処理するために推奨される方法は何ですか?

データを読み取る別個のObjectを使用し、それを変更してBeanに書き戻す必要があります。そのため、Beanはデータ(getterを介してアクセス可能)の記憶域であるため、 Bean内のデータ

2つのオプションがあります。
1. Beanはストレージのみで、他のオブジェクトはデータで何かをしなければなりません。
2. Beanはストレージとロジックで、他のオブジェクトはそのデータで何かをするように指示します。

第2の選択肢は、最初は豆が使用される方法であるように見えますが、カプセル化にもっと忠実に従うように思えます。

どちらのオプションも誰かが必要としていると確信していますが、特定のコンテキストでは推奨されますが、一般的には何が推奨されていますか?

例:
アイテムID、名前、および1次元配列を持つデータベースからアイテムを保持するBeanを作成しました。すべての配列要素は、そのID、その名前、およびアイテムの量を保持する構造体です。ゲッターを介して私はテーブル内のデータを出力します。このテーブルでは、各ユーザーの金額を変更したり、ユーザーにこのアイテムの削除をチェックさせることもできます。

アプリケーションユーザーの入力を処理するロジックはどこに配置しますか。
Beanにユーザーの入力に従って配列を変更するように指示しますか?
または、配列を変更するオブジェクトを作成し、その新しい配列をBeanに書き込みますか?

(すべてのデータベースアクセス(CreateReadUpdateDelete)は、Beanを引数として取得するDataAccessObjectによって処理されます。DAOには、データベースから複数のレコードを読み取るゲートウェイメソッドも含まれています。アイテムをクリックすると、Beanとそのデータを作成できます)。

答えて

1

"anemic domain model"という名前のものがあります。はい、それは非常に一般的です。いいえ、良いOOデザインではありません。一般的に、ロジックは操作対象のデータである必要があります。

ただし、ドメインモデルにすべてを埋め込むことは望ましくありません。separation of concernsもあります。たとえば、データベースアクセスは、技術的に別個のレイヤーとみなされることが多く、ドメインモデル自身が実行すべきものではありません。すでに分離されているようです。正確にドメインモデルの一部であるべきであるべきでないことは、具体的なケースに依存します。良いデザインは絶対的なルールでは表現できません。

また、ネットワーク経由で転送されるモデルもあります。アプリケーションサーバーとWebフロントエンドの間これらは、データ自体のみを格納して、不正な使用や遅延を減らすために使用します。しかし、それは、メソッドが直列化されたオブジェクトの一部ではないため、論理を含むことができないというわけではありません。派生フィールドとキャッシュはありますが、通常、転送されないように一時的に何らかの方法でマークすることができます。

1

あなたのbeanには、データとロジックの両方が含まれている必要があります。

データ転送オブジェクトは、ColdFusionからブラウザのFlexアプリケーションなど、ネットワーク経由でオブジェクトを転送するために使用されます。 DTOには、オブジェクトのデータに関連するフィールドのみが含まれます。

可能であれば、Beanの内部実装(ユーザー構造の配列など)を他のオブジェクトに公開するのを最小限に抑えるようにしてください。配列を変更するには、ユーザー構造体を内部配列に追加するyourBean.addUser(user)のように、Bean上で直接ミューテータ関数を呼び出す必要があります。

データアクセスのために構成されたゲートウェイオブジェクトを持つ別のDAOを作成する必要はありません。すべてのデータベースアクセスメソッド(CRUDとテーブルクエリ)を単一のゲートウェイオブジェクトに入れるだけです。

+0

私はゲートウェイオブジェクトの一部を引き継ぐ(私の意見では)私のケースでは(私の場合はデータベースを照会して、私が望むすべてのレコードを取得するという、 – mrt181

+0

それは良い(私はあなたの元のコメントを誤って読んで)聞こえる。 –

関連する問題