【问题标题】:Creating globally available map创建全球可用的地图
【发布时间】:2011-11-08 15:05:33
【问题描述】:

我正在开发一个医院应用程序,我需要在下拉列表中每隔一页显示血型,并从它们中获取值到 db 表 由于血型不是经常变化的实体,所以我们计划创建一个带有键值对的映射,并在整个应用程序中提供该映射,以便多次创建同一个映射

我的问题是实现这一目标的最佳方法是什么。我想到的一些快速选择是

  1. 在应用程序启动时创建地图并将其放置在应用程序上下文中
  2. 创建一个实用程序类,该类读取属性文件并使用这些值填充地图,或者简单地使用现有血型创建地图。

但我不确定这些选项的效果如何,因为网站将不得不在不久的将来处理大量用户点击。

提前致谢

【问题讨论】:

    标签: java web-applications jakarta-ee architecture


    【解决方案1】:

    创建一个实用程序类,在系统启动时加载这些值或在类加载时加载值。以这种方式创建一个类并没有什么好处:

    • 您可以通过为此类编写测试用例来测试此类及其功能。 (检查内容是否正常加载等)
    • 这可以减少您对上下文以及上下文如何工作的依赖。如果您出于某种原因需要更改应用程序服务器,可让您的应用程序更容易迁移。
    • 代码变得更具可读性(BloodGroupUtils.getAll()Application.getContext().get("bloodGroups"); 或类似内容相比。)

    在性能方面,这可能会快一些。不过不一定(我们需要检查其他几个系统使用情况/参数才能得出这个结论。)

    【讨论】:

    • 应用程序上下文中的地图将以与静态类相同的方式加载-不会影响其可测试性。每个应用程序服务器都以相同的方式访问应用程序上下文;这是规范的一部分。
    • 我的意思是,测试类将是微不足道的。测试静态类和方法是有问题的,不是吗?
    • 测试静态类并不比其他任何事情都难。测试使用静态类的代码更加困难,这也是我们使用DI/IoC的主要原因之一——BloodGroupUtils.getAll() 只使用不同的静态类。使用 map 本身 的代码应该与 retrieves map 的机制分离。
    • +1 用于提出有关使用地图的代码的问题;我认为将如何从使用它的代码中创建和/或访问某物分开是非常重要的。
    • @RaviBhatt 你所说的术语类加载是什么意思,因为在我的情况下,我将在我的操作中使用这个实用程序类,所以当我的操作被调用时,我应该在“操作”中调用这个实用程序类执行方法'还是什么?
    【解决方案2】:

    从静态类或应用程序上下文中检索值将具有基本相同的性能。静态类可能会稍微快一些,因为您不必将地图从应用程序上下文中取出,但我无法想象这值得担心。

    【讨论】:

    • @user702325 注意我和 Ravi 之间的 cmets;它带来了一个很好的观点,即保持使用映射的代码与检索映射的机制分离,无论是从静态类、应用程序上下文还是从任何地方否则。
    猜你喜欢
    • 2012-08-28
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    相关资源
    最近更新 更多