2012-03-05 5 views
0

この問題は、オブジェクト全体を別のオブジェクトのプロパティまたはそのIDとして含めるときに混乱する問題があります。オブジェクト全体をインクルードすると、オブジェクトをロードするための呼び出しで、参照が必要な場合のみインクルードされたオブジェクトも不必要にロードされるようです。プロパティアプローチとは何ですか?実際のオブジェクトを参照するか、オブジェクトIDだけを参照しますか?

答えて

2

通常、常に他のオブジェクトを参照します。

多くのORMテクノロジには、「プロキシ」と「遅延読み込み」という概念があります。つまり、オブジェクトを参照しない限り、読み込まれません。

2

オブジェクトを実際に別の実際のオブジェクトとの関係があるため、オブジェクトIDは実装の詳細です。不要な通話の問題に対処するには、「lazy loading」を参照してください。

2
  1. 詳細が必要な場合のみ、他のオブジェクトを含めてください。

  2. MVCでは、ViewModelを理想的に使用し、エンティティは使用しません。 ViewModelには必要なものだけが含まれています。たとえば、OrderEditViewModelにカスタム名を表示する場合を除いて、customeridが含まれます。カスタム名を表示する場合は、customerのフィールドを追加します。一部の人は、オブジェクトをビューモデルに展開することをお勧めします。そのため、OrderEditViewModel.Customer.CustomerIdではなく、ORderEditViewModel.CustomerIdがあります。オートマッパでこれを手助けすることができます(値インジェクタ - スペルに注意してください)

  3. データベースに保存するときにIDを含める必要がある場合は、更新情報に 'where id = @ customerId and logicここで、ユーザーが実際にその得意先とルートオブジェクトへのアクセス権を持って確保するために)

私はそれができます(同様に改ざんを防ぐために、Webページ上のレコードIDを暗号化を支援するmvcsecurity.codeplex.comを持っていますが、あなたはまだすべき照会の中にフィールドの改ざんを防ぐために何かを持っているので、攻撃者は他人の顧客idを追加することはできません)。

さらにパラメータtamもし誰かが興味があれば、MVCに行ってください。 http://www.pluralsight-training.net/microsoft/Courses/TableOfContents?courseName=hack-proofing-dotnet-app

1

私の提案は、パフォーマンスについてではなく、デザインについて常に考えることです。パフォーマンスは調整できますが、設計では調整できません。したがって、2つのオブジェクトにAggregation/Compositionが必要な種類の関係がある場合は、それを行う必要があります。

しかし、あなたの所有するオブジェクトがIDを処理するだけであれば(IDを処理する別のオブジェクトに渡すなど)、IDフィールドのみを保持することができます。オブジェクト全体を公開する必要はありません(ただし、オブジェクトを含むオブジェクトが他のオブジェクトについて何も知る必要はありません)。

関連する問題