Java / J2EE标准实践和设计选择

时间:2009-11-11 16:53:35

标签: java unit-testing testing java-ee

我有一些设计/建筑问题总是出现在我们的商店里。我说“我们的”,而不是“我”。在J2EE首次引入时做出了一些决定,因此有一些糟糕的设计选择和一些好的。

  1. 在网络环境中,您如何使用过滤器。什么时候应该使用J2EE过滤器,什么时候不应该使用?是否有可能有许多过滤器,特别是如果你有太多的逻辑。例如,我们的身份验证过程中有很多逻辑。如果您是此用户,请转到此站点,如果没有,请转到另一个站点。调试很困难,因为一个URL路径最终可能会呈现不同的目标页面。

  2. JSP文件中替换值的属性资源包文件:似乎Java社区的共识是使用包含jsp解析的标签和标题的包文件。如果您使用多种不同的语言进行开发并根据区域设置切换标签值,我可以看到好处。但是如果你不使用多种语言呢?是不是必须将JSP文件或其他模板文件中的每个静态文本放入属性文件中。再一次,我们遇到调试问题,由于拼写错误的属性值键或损坏的属性文件,文本可能无法显示。此外,我们有一个过程,图形设计师将向我们发送html模板,然后我们将它们转换为jsp。然后删除静态文本,添加密钥,在属性文件中添加键/值等似乎更令人困惑。

  3. E.g。 labels.properties文件可能包含Username:标签。它被一些键替换并呈现给用户。

    1. 所有J2EE开发的单元测试 - 我们不鼓励单元测试。有些人这样做,但我从未在使用大量单元测试的商店工作过。一旦到位,然后当关键时刻到来时,我们停止进行单元测试,然后一段时间后单元测试无用且无法编译。我所做的大部分开发都是关于服务器,Web应用程序开发,数据库连接。我看到单元测试可能很麻烦,因为你需要一个单元测试的环境。我认为单元测试清单鼓励开发人员不要实际连接到外部源。但似乎测试的主要部分应该是连接到数据库并运行所有代码,而不仅仅是特定的单元。所以这是我的问题,对于所有类型的开发(就像你在CRUD导向的J2EE开发中看到的那样)我们应该在所有情况下编写单元测试吗?如果我们不编写单元测试,我们可以使用其他开发人员测试机制吗?
    2. 编辑:以下是其中一些主题的一些很好的资源。

      http://www.ibm.com/developerworks/java/library/j-diag1105.html

4 个答案:

答案 0 :(得分:5)

答案 1 :(得分:0)

过滤器对于帮助移动逻辑(例如用户进行身份验证)非常有用,可以正确处理,因为您不希望每个页面都使用此逻辑。

由于你没有中央控制器,听起来你的过滤器正在提供这个功能,这很好,但正如你所提到的,它确实使调试更难。

这是单元测试可以派上用场的地方,因为你可以测试不同的情况,单独使用每个过滤器,然后测试容器外链中的所有过滤器,以确保它正常工作。

单元测试确实需要规范,但是,如果规则是在没有单元测试的情况下没有任何内容进入QA那么它可能有所帮助,并且有许多工具可以帮助生成测试,因此您只需编写测试。在调试,编写或更新单元测试之前,并显示单元测试失败,因此问题重复。

这将确保该错误不会返回,并且您已修复错误,并且您已更新单元测试。

对于资源包。如果你确定你永远不会支持另一种语言,那么当你重构时你就可以不再使用这些包,但是,如果文本实际上在一个地方,我认为更容易进行拼写/语法修正。

答案 2 :(得分:0)

  1. 过滤器通常需要执行较小的功能单元,过滤器链将用于根据需要应用过滤器。在您的情况下,重构可能有助于将一些逻辑移出到其他过滤器,并且重定向逻辑可以通过控制器在某种程度上集中,以便更容易调试和理解。
  2. 资源包是保持灵活性所必需的,但如果您完全知道该网站将在单个区域设置中使用,那么您可以跳过它。也许你可以将一些维护捆绑包的工作转移给设计人员,即让他们可以访问资源包,这样你就可以获得带有密钥的HTML。
  3. 单元测试在项目开始时更容易实现,而不是将其构建到现有产品中。对于现有软件,您仍可以为新功能实施单元测试。但是,它需要团队领导的一定程度的坚持,团队需要购买进行单元测试的必要性。单元测试的代码审查有助于确定代码的哪些部分需要绝对涵盖,这可以帮助开发人员。像Coverlipse这样的工具/插件可以指示单元测试的覆盖范围,但是它们倾向于查看每个可能的代码路径,其中一些可能是微不足道的。
    在我之前的一个项目中,单元测试只是强制性的,每次办理登机手续后都会自动启动单元测试。但是,这不是测试驱动的开发,因为测试主要是在编写小块代码之后编写的。 TDD可能导致开发人员编写代码以使用单元测试,因此,开发人员可能会失去他们正在开发的组件的大局。

答案 3 :(得分:0)

  

在网络环境中,您如何使用过滤器。什么时候应该使用J2EE过滤器,何时不应该使用?

过滤器旨在引导/修改/拦截实际的请求/响应/会话。例如:设置请求编码,确定登录用户,包装/替换请求或响应,确定应将请求转发到哪个servlet,等等。

要控制实际的用户输入(参数)和输出(结果和目标)并执行实际的业务逻辑,您应该使用servlet。

  

JSP文件中替换值的属性资源包文件。

如果你不做i18n,就不要使用它们。但是如果你成长并且客户/用户想要i18n,那么你会很高兴你已经准备好了。不仅如此,它还简化了CMS的使用,只需使用java.util.Properties API即可编辑内容。

  

所有J2EE开发的单元测试

JUnit可以照顾它。您也可以考虑“正式”进行用户测试。创建几个用例并进行测试。