加载/延迟加载相关实体

时间:2015-07-03 13:04:25

标签: c# .net oop design-patterns architecture

情境:

我有(主要)设计问题。我有DTO类来填充数据库中的数据并在UI中使用。我的情景是:

我有一个HouseObject,它有TenantObject(一对多),每个租户都有AccountObject(一对多),依此类推 (仅限示例场景)

问题:

现在我的问题是,在从House for DB中检索数据的同时,我是否应该获取所有TenantObjects的列表并列出所有AccountObjects的列表,依此类推?由于一对多的关系,对于一个HouseObject,我们可能会为租户,帐户等检索大量数据。

我们应该只检索HouseObject并根据依赖关系触发各个依赖查询吗?或者我应该在一次通话中一次获得所有数据并将其绑定在屏幕上。哪个是理想的解决方案?

请建议。

1 个答案:

答案 0 :(得分:0)

如果您正在寻找表现,而这正是我认为您正在寻找的,那么您必须从广义上思考,而不仅仅是Lazy/not lazy。你必须思考,你有多少数据,以及它更新的频率;它存放在哪里?应用程序运行,如何使用等等。

我看到几个场景:

  1. 懒散加载小块。我喜欢这个,因为它经常被修改时很有用。您始终拥有最新数据。

  2. 在应用程序层中缓存。这可以是2个子场景

    一个。缓存准备模型。您准备好完全初始化的模型。

    湾缓存单独的数据段(房屋,租户,帐户)并在内存中查询。

  3. 准备非规范化的连接数据并将其存储在 Materialized (Oracle)或 Indexed (Sql Server)视图中。您仍然可以访问数据库,但每次加入数据会更有效,或者每次都会进行多次调用。

  4. #1和#2.b的组合,我最喜欢它。它需要更多编码,但在性能和并发性方面可以获得最佳结果。即使您的数据发生变化,您也可以使用机制来转储缓存。如果您的帐户发生变化,您就不需要转储租户。

  5. 还有一件事,如果您需要更新数据,请记住 - 使用不同的模型。您的展示广告模型应该只有ViewModel,而您应该为Save设置单独的模型。例如,您的保存模型可能包含字段updatedBy,而您的查看模型没有。

    你真的没有"专业"问题。这对开发人员来说是正常的日常问题您需要考虑系统的所有方面。