【问题标题】:Why use ObjectDataSource control?为什么要使用 ObjectDataSource 控件?
【发布时间】:2011-07-27 06:25:30
【问题描述】:

我的应用程序分为三层(表示层、业务层和数据访问层)。我的应用程序中的大多数页面都是这样工作的:

[表示层]

    public override void FillData()
    {
        grid.DataSource = AnimalBll.FindAnimal(
            SessionHelper.GetLoginInfo(base.sessionId).First().Id);
        grid.DataBind();
    }

[业务层]

    public static DataTable FindAnimal(int id)
    {
        var result = DBHelper.GetDataTableFromSP("FindAnimal", id);
        return result;
    }

如您所见,我直接绑定到网格。那么,我为什么要使用 ObjectDataSource?

【问题讨论】:

标签: c# asp.net architecture


【解决方案1】:

您不应该 - 它们永远不应该在严肃的应用程序中使用。 ObjectDataSource 控件不鼓励在应用程序中分离关注点。由于您已经正确划分了应用程序的不同层,ObjectDataSource 只会导致问题和跨层责任。

【讨论】:

  • 嗯,我对你的回答有点困惑。 “ObjectDataSource 控件支持三层架构...”msdn.microsoft.com/en-us/library/9a4kyhcx.aspx
  • @subt13 - 抱歉,我混淆了ObjectDataSourceSqlDataSource。没错,ObjectDataSource 可用于 >2 层架构。
  • @subt13 - 我仍然认为 ObjectDataSource 在这一点上对你来说没有多大意义,因为你的基础设施。
  • @Andrew - 该应用程序仍在开发中,我只是想退后一步,看看我是否错过了什么。
  • 我觉得 ObjectDataSources 只是让我们不清楚幕后发生了什么......是 sqlserver 还是 OLEDB?记忆课?或者..也许..一个串行通信设备?在三层中检查的方式,可能很长。
【解决方案2】:

使用 ODS 的好处是它还允许您自动更新和保存实体。以现在的方式,您必须捕获适当的事件(row_saving?),然后去除新值,并将它们传递给您的 ORM 进行保存。

虽然 Andrew 是对的,但 ObjectDataSource 几乎不会很好地工作,你应该不惜一切代价避免它。

对于基本的网格类型更新,我在 LinqDataSource 或 EntityDataSource(假设您使用的是 L2S 或 EF)方面取得了不错的成绩,但同样,对于大型应用程序,您将希望远离事物像这样(关注点分离等等)

【讨论】:

  • Ummmmmmmm,老实说,我已经有很多年没有尝试过了,我一直无法让它按照我需要的方式工作。我记得它被设计用于一种非常特定类型的 ORM,而这对我来说从来没有奏效过。对不起,我不能给你更多的细节。只需找到适合您的最佳解决方案并使用它即可。也许你有一个独特的案例,ODS 产生了最好的代码。
  • 我现在有一个,这是一场噩梦。使用存储过程和实体的简单 3 层方法会简单得多。通过双重绑定,这个怪物在解决方案中有 61 个项目。它只有 20-30 个屏幕。
猜你喜欢
  • 2020-06-30
  • 2016-07-27
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
  • 1970-01-01
  • 2013-02-17
  • 2011-03-10
相关资源
最近更新 更多