【问题标题】:How To Maintain Transaction in N-Tier Architecture如何在 N 层架构中维护事务
【发布时间】:2010-12-19 18:22:23
【问题描述】:

我正在 N 层架构中开发应用程序。众所周知,我们需要在插入/更新/删除操作时实现事务。请告诉我如何在 N-Tier 架构中使用 c#.net 中的事务。 我的架构是这样的 Applicationform->middle_Layre->Factory->DataAccessLayre->StoredProcedure->Table 在应用程序表单中,我创建中间层对象并在中间层的插入/更新/删除功能中传递数据。 我在 factoryclass 中创建 sqlcommand 对象并填充我从中间层获取的数据并将该对象 os sqlcommand 传递给 DAL。

【问题讨论】:

    标签: asp.net architecture transactions n-tier-architecture


    【解决方案1】:

    这是您可以遵循的软件层的代表性模式:

    Database <-> DAL <-> Repository <-> BLL <-> Controller <-> View Model <-> UI
    

    在哪里

    DAL == Data Access Layer (aka ORM, Object-Relational mapper)
    BLL == Business Logic Layer*
    

    在此模型中,事务发生在存储库中,其中安排了“工作单元”。通常,这是通过从 DAL 请求数据、对其执行工作并保存更改来实现的。 DAL 通常会围绕您的工作单元包装事务。

    数据库、DAL、存储库和 BLL 共同构成了 MVC(模型-视图-控制器)架构中的模型。所有业务逻辑和数据操作都发生在模型中。控制器充当模型和视图模型/UI 之间的中间人,它们共同形成视图。

    存储库是您设置“工作单元”的地方。

    *可选

    【讨论】:

    • 我没有使用 MVC 架构。
    • 我想在同一个事务中进行多个操作的事务。
    • 是的,这就是“工作单元”。 MVC 架构只是一个例子。简而言之,你的事务应该和你的业务逻辑在同一层。
    • 您的回答似乎自相矛盾。您说“事务发生在 BLL 中”,但后来您说“DAL 通常会围绕您的工作单元包装事务。那是什么?这是最初的问题。:) BLL 是否启动事务,还是 DAL?
    • @RobertPappas:这是个好问题。您可以在 BLL 中启动一个事务,而 DAL(数据库,扩展名)将维护该事务,直到您提交它。 DAL总是执行事务,换句话说,即使事务是从其他地方启动和提交的。
    【解决方案2】:

    另一种选择是将逻辑放在存储过程中。这样,您的 DAL 就会对失败时回滚的数据库进行一次调用。

    【讨论】:

      【解决方案3】:

      只要您的代码在同一台机器上运行,层之间没有任何 WCF 或 Web 服务调用,您就可以使用 TransactionScope。

      http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx

      只需将您希望在事务中发生的调用放在事务范围内即可。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 2013-07-03
        相关资源
        最近更新 更多