【问题标题】:Data Access Layer - Using sessions to CRUD data数据访问层 - 对 CRUD 数据使用会话
【发布时间】:2011-02-18 02:27:00
【问题描述】:

我有一个 DAL 到 CRUD 产品数据。

例如:

Order someOrder = new Order();
someOrder.Description = "Test";

someOrder.Save();
someOrder.Remove();

我需要设计 DAL,以便只有锁定 Order 类型对象的用户才能执行 CRUD 操作。

我的想法是将会话传递给 CRUD 方法。一旦我通过会话,该方法将检查该用户是否锁定了该特定对象,如果是,它将继续执行该方法。

例如:

someOrder.Save(sessionThatContainsLockInformation);

// Pseudo-code
public void Save(Session session)
{

   1. Get user GUID from the session.
   2. Get lock details from the session.
   3. Check that the provided user has a lock.
   4. On success, proceed with saving the order.

}

我担心我在数据访问层中使用会话。我的直觉告诉我,我不应该这样做。我的目标是尽可能少地编写代码以促进代码的可重用性,但我似乎坚持相同的想法。

有人可以告诉我这是否是一种明智的方法,或者它是否有一些基本的缺点或维护开销?

欢迎任何替代解决方案。我对代码不感兴趣,请提供一些想法。

谢谢

【问题讨论】:

    标签: session data-access-layer


    【解决方案1】:

    好的,感谢您的澄清,我想我现在更清楚地了解您的担忧了。

    前段时间我遇到了类似的问题。我的解决方案是一个通用的超类(在您的类中,它将是 Order、Item、Customer 的超类),所有参数都相同(时间戳已更改,谁进行了更改等)。然后我创建了一个实用程序类,您提到的所有检查都得到了处理。 所以这个“维护”逻辑只在一个地方实现。

    我并不是说这是最好的方法,它只是对我有用...

    希望这会有所帮助, 一月

    【讨论】:

    • 谢谢,我目前正在处理这个问题。仍然不确定我是否应该在 DAL 中处理会话数据。
    【解决方案2】:

    这只是几个想法,取决于您选择的持久性 API。我相信 Hibernate 提供了一些“乐观/悲观锁定”机制。我不知道这些工作的确切细节,但你应该能够在 hibernate 主页上找到一些东西(如果你想使用 hibernate)。 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html

    http://docs.jboss.org/hibernate/core/3.3/reference/en/html/transactions.html#transactions-locking

    一个简单的(也许太简单了,取决于手头的情况......)DIY 方法可能是有一个简单的 timestampChanged 行。在写入数据库时​​,您必须检查要保存的时间戳是否与数据库中的最后一个时间戳相同。但正如我所说,并不是所有的应用程序都适合这个......

    希望这会有所帮助, 一月

    【讨论】:

      【解决方案3】:

      感谢您的回复。我的 CRUD 方法有效,我没有任何问题。

      我担心的是我会有很多内部签名和逻辑非常相似的方法。例如我有以下课程:

      订购 物品 客户

      这些类中的每一个都有以下方法: 。保存() .删除()

      在每个方法内部,我必须检查尝试运行该方法的用户是否有权这样做(对该对象具有锁定)。为此,我必须将用户详细信息和锁定详细信息传递到方法中,因此我将得到以下结果:

      Public void Save(UserAndLockDetails 详细信息) {

      }

      现在图像我有 50 个类而不是 3 个,这意味着当需求发生变化时我必须更新 100 个方法(Save()、Remove())。我认为这是一种维护开销,但我想不出任何替代解决方案。

      希望这是有道理的。

      谢谢

      【讨论】:

        猜你喜欢
        • 2011-03-27
        • 2014-09-04
        • 1970-01-01
        • 2018-10-03
        • 2011-10-20
        • 1970-01-01
        • 1970-01-01
        • 2014-10-01
        相关资源
        最近更新 更多