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

Java/J2EE标准实践和设计选择,java,unit-testing,testing,jakarta-ee,Java,Unit Testing,Testing,Jakarta Ee,我有几个设计/架构问题总是出现在我们的店里。我说的是“我们的”,而不是我本人。一些决策是在J2EE首次引入时做出的,因此存在一些不好的设计选择和一些好的设计选择 在web环境中,如何使用过滤器。什么时候应该使用J2EE过滤器,什么时候不应该?是否可能有许多过滤器,特别是如果您有太多的逻辑在他们。例如,在我们的身份验证过程中有很多逻辑。如果您是此用户,请转到此网站,如果不是,请转到其他网站。调试很困难,因为一个URL路径可能最终呈现不同的目标页面 JSP文件中替换值的属性资源捆绑文件:Java社区

我有几个设计/架构问题总是出现在我们的店里。我说的是“我们的”,而不是我本人。一些决策是在J2EE首次引入时做出的,因此存在一些不好的设计选择和一些好的设计选择

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

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

  • 例如,labels.properties文件可能包含用户名:label。被某个键替换并呈现给用户的

  • 所有J2EE开发的单元测试——我们不鼓励单元测试。有些人这样做,但我从未在使用广泛单元测试的商店工作过。一旦place做了,然后当关键时刻来临时,我们停止了单元测试,过了一会儿,单元测试就没用了,永远也不会编译。我所做的大部分开发都与服务器、web应用程序开发、数据库连接有关。我知道单元测试可能会很麻烦,因为您需要一个环境来进行单元测试。我认为单元测试宣言鼓励开发人员不要实际连接到外部源。但似乎测试的主要部分应该是连接到数据库并运行所有代码,而不仅仅是一个特定的单元。这就是我的问题,对于所有类型的开发(如您在面向CRUD的J2EE开发中看到的),我们是否应该在所有情况下编写单元测试?如果我们不编写单元测试,我们还可以使用哪些其他开发人员测试机制
  • 编辑:这里有一些关于这些主题的好资源


    过滤器有助于移动逻辑(如用户已通过身份验证)以正确处理此问题,因为您不希望在每个页面中都使用此逻辑

    因为您没有中央控制器,所以听起来您的过滤器是为这个功能服务的,这很好,但是,正如您所提到的,它确实使调试更加困难

    这就是单元测试可以派上用场的地方,因为您可以测试不同的情况,分别使用每个过滤器,然后在容器外部使用链中的所有过滤器,以确保其正常工作

    单元测试确实需要规范,但是,如果规则是没有单元测试就没有任何东西可以交给QA,那么它可能会有所帮助,并且有许多工具可以帮助生成测试,所以您只需要编写测试。在调试之前,编写或更新单元测试,并显示单元测试失败,因此问题重复出现

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


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

    过滤器有助于移动逻辑,例如用户经过身份验证的逻辑,以正确处理这个问题,因为你不希望每页都有这样的逻辑

    因为您没有中央控制器,所以听起来您的过滤器是为这个功能服务的,这很好,但是,正如您所提到的,它确实使调试更加困难

    这就是单元测试可以派上用场的地方,因为您可以测试不同的情况,分别使用每个过滤器,然后在容器外部使用链中的所有过滤器,以确保其正常工作

    单元测试确实需要规范,但是,如果规则是没有单元测试就没有任何东西可以交给QA,那么它可能会有所帮助,并且有许多工具可以帮助生成测试,所以您只需要编写测试。在调试之前,编写或更新单元测试,并显示单元测试失败,因此问题重复出现

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


    对于资源束。如果你确信你永远不会支持另一种语言,那么当你重构的时候,你就可以不再需要捆绑包了,但是,我认为如果文本实际上在一个地方,那么拼写/语法更正就更容易了

  • 过滤器通常需要执行更小的功能单元,并且过滤器链接将用于根据需要应用过滤器。在您的情况下,重构可能有助于将一些逻辑转移到其他过滤器,重定向逻辑可以通过控制器集中起来,以便更容易调试和理解
  • 资源包对于保持灵活性是必要的,但是如果您绝对知道该站点将在单个语言环境中使用,那么您可能会跳过它。也许您可以将维护捆绑包的部分工作转移给设计师,即让他们能够访问资源捆绑包,这样您就可以获得带有p中键的HTML