5

かなり基本的な質問をしているように感じます。インターネット上のどこかで適切な答えを見つけることができるはずです。しかし、私は検索に疲れ果てており、乾いた骨は数個しか見つかりませんでした. それに加えて、この質問はおそらく主観的すぎるのではないかと私は今恐れています:)

とにかく、ここで質問です。オブジェクト指向プログラムでリレーショナル データベースのデータにアクセス、処理、および操作するための適切な方法は何ですか? これまでのプログラミングでは、手続き型の方法でデータベース データを処理してきました。私は現在、OOP の習慣を改善しようと積極的に取り組んでいますが、この問題を処理する方法がわかりませんでした。

これは、私が取り組んでいるシナリオの 1 つです。多くの製造ジョブ エントリを含むテーブルがあります。私が書いている(改善している)アプリケーションは、各ジョブで多くの処理を実行します。たとえば、テーブルの各行を繰り返し処理し、次のことを行います。

  • 期日をGoogleカレンダーに投稿する
  • 特定のディレクトリにジョブに固有のフォルダを作成する
  • 仕事の作業指示書を作成する
  • 仕事の契約書を作成する
  • 旅行者の書類を管理します
  • 数人に情報をメールで送信
  • など、リストは続きます

あなたは要点を理解します。各ジョブで多くの処理が行われます。現在、私は最も優れたプログラマーがスパゲッティ コードの素晴らしいがらくたの山と呼ぶものを持っています。それほど悪くはないかもしれませんが、ほとんどです。テーブル内の各行を for each ループで繰り返し処理し、各行に対して各アクションを順番に実行します。現在の設計方法は好きではありませんが、どうすればよいかわかりません。

ジョブのすべてのプロパティを実装し、各アクションを実行するためのメソッドを提供する「ジョブ」と呼ばれるきちんとしたオブジェクトがあればいいのにと思います。そうすれば、自分の仕事を処理するためのカスタム コレクションを作成することさえでき、世界全体が明るくなるでしょう。ソリューション全体が読みやすくなり、保守が容易になり、各ジョブで実行するアクションを追加しやすくなります (これは頻繁に発生します)。

しかし、私の問題は、派手なオブジェクトとデータベースを接続する方法がわからないことです。ある種のオブジェクト リレーショナル マッピングを使用する必要がありますか (これについてあらゆる種類のさまざまな意見を読みました)。すべての行をループして、コレクションに蓄積されるオブジェクトに変換するだけですか? それとも、手続き的な方法でそのようなプロジェクトを続けるための最良の選択肢はありますか? 回答とご意見をお待ちしております。

私は抽象的な方法でこの主題に関する情報に興味があります。言い換えれば、一般的にこのような状況をどのように処理するのだろうか. 私が示した例に固有のものではありません。しかし、もちろん、詳細も素晴らしいです。VS 2010 を使用して、ほとんどのプログラミングを Visual Basic と C# で行っています。

4

2 に答える 2

4

リポジトリ パターンを見てください。これは、意味のある方法でデータ アクセスをビジネス処理から分離する優れた方法です。このパターンを適用して、いくつかのプロジェクトがあります。

  • エンティティ - ものを格納するオブジェクト
  • DataAccess - ORM DbContext および ADO.NET ラッパー
  • リポジトリ - クエリをラップして、厳密に型指定された関数をアプリの残りの部分に提示します
  • TheRest - その他のプロジェクト / 階層: ビジネス、GUI など

依存性注入で Entity Framework コンテキストを使用する方法を参照してください。各プロジェクト タイプの適切な説明

于 2012-05-15T05:38:19.980 に答える
1

しかし、私の問題は、派手なオブジェクトとデータベースを接続する方法がわからないことです。ある種のオブジェクト リレーショナル マッピングを使用する必要がありますか (これについてあらゆる種類のさまざまな意見を読みました)。

はい。

加工に関しては。ビジター パターンを使用して、データを処理するすべての異なるコードがビジターとして登録されるようにします。コントロールコンテナの反転を使用してそれを管理することもできます(IHandlerOf<Job>またはIHandlerOf<TravelerDocument>)。

これにより、データを処理する方法がより疎結合になります。

于 2012-05-15T05:38:58.997 に答える