【问题标题】:What is the most DRY way to get data out of my database?从我的数据库中获取数据最干燥的方法是什么?
【发布时间】:2009-01-30 20:08:52
【问题描述】:

我必须编写一个 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 类中关闭它吗?

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

【问题讨论】:

    标签: c# coding-style class-design u2 universe


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:
      1. 自定义异常类
      2. 一个想法是构建批处理请求(代表列表)。

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

      【讨论】:

        猜你喜欢
        • 2017-12-11
        • 2010-10-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-02
        • 2019-11-22
        • 2019-09-15
        • 2012-07-13
        • 1970-01-01
        相关资源
        最近更新 更多