【问题标题】:Updating DataSet - in which layer?更新 DataSet - 在哪一层?
【发布时间】:2012-05-23 17:33:10
【问题描述】:

我尝试构建 3 层应用程序。在DAL 中,我从database (No-SQL) 获取数据到DataSets。 在BLL 中,如果有必要,我会处理这些数据。在PL 我显示了适当的数据。

问题是: 如果database 中的数据仍在更新,并且我需要立即拥有最新的“行”,我应该使用某个计时器或其他方式更新BLL 中的DataSet

【问题讨论】:

    标签: architecture dataset 3-tier


    【解决方案1】:

    当您说“立即”时,我不得不假设您的应用程序非常渴望数据...为此您应该在 DLL 和 BLL 之间使用第四层并调用 缓存

    因为它表明你想要快速的东西,而对于快速的东西,你永远不会一遍又一遍地调用数据库,你调用一次,当有更新时,你清除该实体上的缓存,下次你的 BLL 询问数据时,缓存是空的,因此它会传递给 DAL 以检索一组新记录,并将其放入缓存中以供下次调用。

    要注意更新,您可以创建自己的通知系统,或者简单地实现INotifyCollectionChanged 接口...

    如果您不想麻烦,当您发送要更改的新行时,您已经拥有数据,您可以轻松地将其添加到网格(或您正在使用的任何集合对象)中简单

    DataTable dt = bll.ListAllEmployeesByCompanyId( 2 );
    dt.Rows.Insert(0, myNewRow);
    gv.DataSource = dt;
    

    您可以通过在该网格中制作顶部边框并将其设为黄色(因为数据并非来自数据库)并在数据全部来自数据库(以及所有同步)...

    这完全取决于您的策略,始终取决于我们开发的每个软件的唯一问题:

    用户真的关心这个真棒功能吗?

    因为,我们开发人员往往会做出很多假设,有时,您确实会错误地假设 :)

    【讨论】:

    • 感谢您的回答。但是如果每秒都有数据包进来,我认为更好的主意只是更新缓存,而不是清除。我的意思是当发生任何变化时,然后缓存刷新自己的数据。
    • 如果每秒都有包来,你会采取完全不同的方法,而不是这种只适用于 80% 情况的正常方法,在这样的更新率下,你会使用不同的数据库和技术,就像我有 asked in the Programmers site
    • 我现在使用 MongoDB (en.wikipedia.org/wiki/MongoDB),它需要“归档和事件记录”、“聚合”、“服务器端 JavaScript 执行”、“上限集合”等机制,所以我认为数据库是合适的。仅关于架构和数据更新方式的问题。
    猜你喜欢
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    相关资源
    最近更新 更多