0

我必须编写一个 ASP.NET 应用程序来连接到我们的旧版 IBM Universe 数据库,并且我们正在使用一个名为 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. 如何在我的 INVOICE 类中返回错误?例如,如果我们无法连接到数据库、无法打开文件、无法读取记录,则可能会发生错误。

  2. 如果我需要从我的 INVOICE 中获取一些数据然后读取 TERMS 表怎么办。当我刚打开一个数据库时,我不想打开一个新的连接。

  3. 我应该在所有有这个的类上调用 Dispose 方法吗?例如,mvAccount 有一个 Dispose 方法。没有文档说要调用它,但是我应该在 Logout() 之后调用它吗?

  4. 我可以在执行 myAccount.Logout() 的 TechDB 类上创建一个 Dispose 方法吗?这样连接将保持打开状态,当我完全完成它时,我可以从我的 INVOICE 类中关闭它吗?

给我一些关于处理这个问题的最佳方法的意见?我的目标是一个健壮的应用程序,它易于修改并且代码重复尽可能少。

4

2 回答 2

1

我会使用闭包,我认为对于 C# 你有代表。所以像:

MyAccount.loginAndDo(servername, login, delegate(account){
   invoice = account.read("INVOICE");
   .
   .
   .
});

在 loginAndDo 中,您将登录,调用代理,然后关闭帐户。

于 2009-01-30T20:18:01.043 回答
0
  1. 自定义异常类
  2. 一个想法是构建批处理请求(代表列表)。

按照 3/4。在我的例子中,我所有的数据访问对象都继承自一个包含对连接的静态引用的类。我对在 Dispose 中实现断开逻辑犹豫不决,因为可能会出现断电或系统崩溃或其他情况,并且连接未释放。

于 2009-01-30T20:33:21.560 回答