【问题标题】:Calling a getter without assigning it to anything (lazy loading)调用 getter 而不将其分配给任何东西(延迟加载)
【发布时间】:2009-03-25 13:40:24
【问题描述】:

我有一个可以使用延迟加载模式完全加载或延迟加载的 DTO。它的加载方式取决于 Flex 应用程序的需求。但是,此 DTO 将被发送到 Flex 应用程序 (swf)。通常,例如一个集合,只会在调用时加载。然而,在我的情况下,集合只会在 Flex 中调用,所以我在 .NET 端的实现显然在这种情况下不起作用(除非 Flex 会进行服务器调用......我想避免的事情)。

在集合的getter中,从数据库中检索数据。如果我将使用 ASP.NET 页面,它会工作,但如果 DTO 发送到 Flex,则不会。

你会如何处理这个问题?我可以在将 DTO 发送到 Flex 之前调用 getter,但这似乎很糟糕...... + 只有在将 getter 分配给某些东西时才能调用 getter(并且永远不会使用将保存集合的局部变量...... )。

【问题讨论】:

    标签: apache-flex lazy-loading dto


    【解决方案1】:

    您可以引入一种加载依赖项的方法 - loadDependencies - 在通过网络发送(到 Flex)之前,它应该为您的 DTO 对象进行所有延迟加载。您可以将此方法抽象为一个接口,以简化跨不同 DTO 的此类过程。按照您在此方法中描述的方式使用 getter 并不反对。

    【讨论】:

      【解决方案2】:

      我可能会为该类引入一个Finalize 方法,并可能为该类的各种集合引入一个FinalizeAll 扩展方法。此方法将简单地遍历并引用类的公共属性上的所有 getter,以确保它们被加载。在将对象发送到 Flex 应用程序之前,您将调用 Finalize(或 FinalizeAll)。您甚至可能希望将其设为接口,以便在传输对象之前测试是否需要完成,并根据接口测试调用方法,而不是单独检查每个类。

      注意:Finalize 只是脑海中浮现的第一个名字。可能(可能)有一个更好的名字。

      【讨论】:

      • EagerLoad 或 Load 是我对函数名称的想法。我们在这里得出了同样的结论,即一种方法会做得很好。
      • 有没有办法在这个 Finalize 方法中调用 getter 而不必将其分配给变量?
      • 如果不使用反射,我不这么认为。但是,您可以重构让 getter 调用设置属性的方法,然后让 Finalize 方法调用相同的方法。我可能会重构它以使用反射,以便您的所有属性都可以使用它。
      • 必须检查 .NET 中的反射。一直在 Flash 和 Flex 中编写 ActionScript,并在 spring.actionscript 中使用 Reflection。你有链接吗,资源让我开始反思。您将如何重构它以使用反射?
      • 这是个大问题,尤其是在没有代码的情况下。基本思想是您使用名称(字符串)来告诉方法要设置什么以及在哪里以及如何使用该值。您在对象上使用反射来获取适当的字段,然后获取/设置它们的值。
      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 1970-01-01
      相关资源
      最近更新 更多