0

従来の IBM ユニバース データベースに接続する ASP.NET アプリケーションを作成する必要があり、サーバー側プログラムの接続、読み取り、書き込み、選択、実行などを可能にする mv.net という製品を使用しています。

コードの繰り返しをできるだけ少なくしたいのですが、データ転送もできるだけ少なくしたいと考えています。

接続を開くには、まず次のようなコードを使用してアカウントへの参照を取得する必要があります。

mvAccount myAccount = new mvAccount(serverName, login);

次に、アイテムを読み取ることができます。

mvFile myInvoiceFile = myAccount.FileOpen("INVOICE");
mvItem myInvoiceRecord = myInvoiceFile.Read(invoiceID);

これで完了です。

myAccount.Logout();

モジュールごとにクラスがあるため、INVOICE、PURCHASE_ORDER、RMA、REQ、SHIPMENT などがある場合があります。INVOICE 内で、CUSTOMER、INVOICE、TERMS、SHIPVIA などの複数のテーブルにアクセスする必要がある場合があります。

私が計画していたのは、データベースの名前である TechDB というクラスを作成し、そこにコードを配置することでした。そのため、私の INVOICE クラスでは次のように言えます。

TechDB connection = new TechDB();
mvItem myInvoiceRecord = connection.Read("INVOICE", invoiceID)

これを行うと、私の TechDB クラスは接続を開き、レコードを読み取り、すべて 1 ステップでログアウトします。

私は正しい道を進んでいると思いますが、そうでない場合はお知らせください。これに関する私の問題は次のとおりです。

  1. INVOICE クラスでエラーを返すにはどうすればよいですか? たとえば、データベースに接続できない、ファイルを開くことができない、レコードを読み取ることができない場合、エラーが発生する可能性があります。

  2. 次に、INVOICE からデータを取得して TERMS テーブルを読み取る必要がある場合はどうでしょうか。データベースを開いたばかりのときに、データベースへの新しい接続を開く必要はありません。

  3. これを持つすべてのクラスで Dispose メソッドを呼び出す必要がありますか? たとえば、mvAccount には Dispose メソッドがあります。ドキュメントのどれもそれを呼び出すとは言っていませんが、Logout() の後にすべきですか?

  4. myAccount.Logout() を実行する Dispose メソッドを TechDB クラスに作成できますか? そうすれば、接続は開いたままになり、完全に完了したら INVOICE クラスから閉じることができますか?

これを処理する最善の方法について意見を聞かせてください。私の目標は、変更が容易で、コードの繰り返しができるだけ少ない堅牢なアプリケーションです。

4

2 に答える 2

1

私はクロージャーを使用します.C#ではデリゲートがあると思います。次のようなものです:

MyAccount.loginAndDo(サーバー名、ログイン、デリゲート(アカウント){
   請求書 = account.read("INVOICE");
   .
   .
   .
});

loginAndDo では、ログインしてデリゲートを呼び出し、アカウントを閉じます。

于 2009-01-30T20:18:01.043 に答える
0
  1. カスタム例外クラス
  2. 1 つのアイデアは、バッチ リクエスト (デリゲートのリスト) を作成することです。

3/4の通り。私の場合、すべてのデータ アクセス オブジェクトは、接続への静的参照を保持するクラスから継承しています。Dispose に切断ロジックを実装するのをためらっています。電源が切れたり、システムがクラッシュしたりして、接続が解放されない可能性があるためです。

于 2009-01-30T20:33:21.560 に答える