【问题标题】:A better way to implement Business Logic in MS Web Forms在 MS Web 表单中实现业务逻辑的更好方法
【发布时间】:2011-09-18 10:56:07
【问题描述】:

我使用 C# Entity Framework 和 Asp.net Web Forms 4。

目前我正在为 Cms 开发管理员部分,因此我必须使用许多 GridView 控件来对我的数据进行 CRUD 操作。

我将 EF 用作 DAL,并在每个 .aspx 页面中实现我的业务逻辑;页面按文件夹进行逻辑组织。

我的 BL 非常简单,例如:用户 A 从 DB X、Y、Z 获取并将其显示在 GridView 上,而用户 B 仅从 DB X 获取并显示在同一个 GridView 上。

在我的小经验中,我发现自己花了很多时间使用事件触发器 Web 表单机制将我的 BL 角色嵌入到每个 .aspx 中。我的问题是相同的页面可能具有相同的 BL,因此我必须将我的代码复制并粘贴到可能不同的 .aspx 页面中。

我的问题:

  • 如何集中我的业务逻辑并在多个 GridView 中相应地显示数据,而不在每个 GridView 编码的页面中实现 BL?
  • 我对类有点了解,在类中实现 BL 并使用 ObjectDataSource 将其附加到 GridView 是否有意义? Example here
  • 根据您的经验,解决这类问题的更好方法是什么?
  • MVC 方法可以成为解决方案吗?

感谢您抽出宝贵时间!

【问题讨论】:

    标签: c# asp.net business-logic


    【解决方案1】:

    您需要对应用程序进行分层 - 例如,在典型场景中,您可以拥有以下项目:

    • 实体(更准确地说是 DTO(数据传输对象))和其他需要在所有其他层中使用的类/逻辑
    • 数据访问层,用于处理实体到数据存储的持久性
    • 业务逻辑层
    • UI 层

    您已选择 EF4 作为您的 DAL。您可以使用 POCO 实体(代码优先模型)将您的实体/DTO 类放在单独的项目中。就您的业务逻辑而言,将其放在业务层中,这实际上是一堆定义 API 的类。例如,

    public static class CustomerHelper
    {
       public static Customer Get(int customerId)
       {
          // do access control security
          ...
          // use EF4 to get the customer object
       }
    
       public static void Update(Customer customer)
       {
          // do access control security
          ...
          // use EF4 to update the customer object
       }
    
    }
    

    通常,业务层可以进行验证、安全检查、事务控制、业务事务所需的任何前/后处理等。

    最后,您的 aspx 页面将成为您的 UI 层,它将使用 BL 类来获取/更新数据。对于声明性数据绑定,您必须使用对象数据源。

    【讨论】:

    • 感谢 Vinay,感谢您对此提供的帮助
    • 抱歉,Vinay 但我仔细阅读了您的评论,但我无法理解什么是 POCO,我的意思是我可以在那里放置不应该在 BL 中的内容?
    • @Gibbok,POCO 的意思是“普通的旧 c# 对象”。 POCO 类代表一个业务实体,用于传输相应的数据。这样的类可能有验证规则,但没有处理逻辑或持久性机制。所有其他层将使用这个类来传输数据。在我回答的代码中,Customer 将是 POCO 实体/DTO,而 CustomerHelper(或 CustomerManager)将代表 BL 类。请参阅 EF4 中的 POCO 支持:blogs.msdn.com/b/adonet/archive/2010/01/25/…
    • 从上一条评论继续...有关使用 Code First 模型的 POCO,请参阅本文:blogs.msdn.com/b/adonet/archive/2011/03/15/… 最重要的是,通过本文了解使用 EF4 的多层/层应用程序的设计相关问题:msdn.microsoft.com/en-us/magazine/ee335715.aspx
    • 再次感谢您的解释,祝您有美好的一天!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多