gpt4 book ai didi

c# - 如何在n层应用中管理内存中的主数据以避免损坏数据库

转载 作者:行者123 更新时间:2023-11-29 19:20:49 25 4
gpt4 key购买 nike

我正在开发一个用于学习目的的桌面应用程序,并且我正在处理每次用户打开表单(窗口、用户控件)时如何避免损坏不断查询主数据的数据库的不确定性、 View 等等)以及由于加载时间而导致的糟糕的用户体验

例如:
要创建新产品,应用程序必须加载所有类别和品牌。一般来说,主表中的所有数据(客户、员工、产品类别等)都会发生这种情况。

对我来说最简单的解决方案:
由于此类数据的性质,我可以拥有一个集合:
- 当需要新数据时查询自上次更新时间跨度以来的查询。
- 每 X 次(也许 1 小时)更新一次集合的所有内容。

如果这是最好的解决方案,我应该在哪里收集这些集合?
我使用 3 层,DAL、BLL、PL,其中 PL 知道 BLL。
这些集合应该是静态的吗?或者在单例类中?

额外:
我尝试尽可能笼统(不提及语言或框架)。不过,我使用C#和MySQL。我正在编写没有 DataTable 的程序(只是将通过 Command.ExecuteReader() 获得的数据映射到我的实体)。
我最近制作了一份副本并开始使用 EntityFramework 6。我认为可能有一种方法可以让 EF 缓存结果,但为此您需要实现二级缓存,而我不想这样做(因为考虑到数据的性质,我的需求更简单)。

谢谢,如果我的英语一点都不好的话,抱歉!

最佳答案

我不确定如何将主数据值存储在内存中,但逻辑上应该如下所示。

BLL 应首先在内存中查找主数据,如果找到,则使用该数据。

如果内存中中没有数据,那么它应该从 DAL 请求该数据。 DAL 将从数据库中提取数据,而不用担心上次更新日期并将其发送回 BLL。

现在BLL应该首先将来自DAL的数据存储在内存中并具有一定的过期时间,然后使用该数据。过期时间将确保当过期时间结束时,数据会自动从内存中删除。

然后循环重复。

内存中存储数据的最佳方式是集合,例如List。这样您就可以轻松地迭代它并轻松访问它的属性。

理想情况下,如果您有存储库层,那么存储库层应该处理这些事情。 BLL 层仅调用存储库来获取主数据,存储库会担心检查内存中 并从数据库中获取(如果内存中 中不可用)并将其存储回来到内存中并过期。

关于c# - 如何在n层应用中管理内存中的主数据以避免损坏数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42459676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com