- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的商店经常出现一些设计/建筑方面的问题。我个人说“我们”,而不是“我”。一些决定是在首次引入J2EE时做出的,因此有一些不好的设计选择,也有一些好的选择。
在Web环境中,如何使用过滤器。什么时候应该使用J2EE过滤器,什么时候不应该?是否可以有很多过滤器,特别是如果您有太多的逻辑。例如,在我们的身份验证过程中有很多逻辑。如果您是此用户,请转到此站点,否则请转到另一个。调试困难,因为一个URL路径可能最终呈现不同的目标页面。
用属性资源束文件来替换JSP文件中的值:Java社区中的共识似乎是使用包含标签和标题的束文件进行jsp解析。如果您使用多种不同的语言进行开发并根据语言环境切换标签值,那么我会看到好处。但是,如果您不使用多种语言怎么办?是否真的必须将JSP文件或其他模板文件中的每条静态文本放入属性文件中。再次,我们遇到调试问题,由于属性值键拼写错误或属性文件损坏,文本可能无法显示。另外,我们有一个过程,图形设计师将向我们发送html模板,然后将它们转换为jsp。然后删除静态文本,添加键,在属性文件中添加键/值等似乎更加令人困惑。
例如。 labels.properties文件可能包含Username:标签。那将被某些键替换并呈现给用户。
所有J2EE开发的单元测试-我们不鼓励单元测试。有人这样做,但我从未在使用大量单元测试的商店工作过。一旦放置好了,然后在紧迫的时间到了,我们就停止进行单元测试,然后过一会儿,单元测试就没用了,永远也不会编译。我所做的大部分开发工作都是与服务器,Web应用程序开发,数据库连接有关。我看到了单元测试可能很麻烦的地方,因为您需要一个针对单元测试的环境。我认为单元测试宣言鼓励开发人员不要实际连接到外部资源。但是似乎测试的主要部分应该连接到数据库并运行所有代码,而不仅仅是一个特定的单元。这就是我的问题,对于所有类型的开发(如您在面向CRUD的J2EE开发中所看到的),我们是否应该在所有情况下都编写单元测试?如果我们不编写单元测试,那么我们还可以使用其他哪些开发人员测试机制?
编辑:这里有一些有关这些主题的好资源。
http://www.ibm.com/developerworks/java/library/j-diag1105.html
最佳答案
重定向是一种根据角色处理不同页面的更简单方法。该过滤器可以仅用于身份验证,以将User对象和所有关联的Roles放入会话中。
正如詹姆斯·布莱克(James Black)所说,如果您有中央控制器,则可以省去将这种逻辑放入过滤器中的需要。为此,您需要将中央控制器映射到所有URL(或所有非静态URL)。然后,筛选器将“用户和角色”传递给中央控制器,该中央控制器决定将用户发送到哪里。如果用户尝试访问他没有权限的URL,则此控制器可以决定如何处理。
大多数主要的MVC Web框架都遵循这种模式,因此只需检查一下就可以更好地理解这一点。
我在这里也同意James的观点-您不必将所有内容都移到这里,但是将来可以使事情变得更简单。就个人而言,我认为您经常必须权衡这一点才能有效地与设计师合作。我经常投入基础架构和逻辑来使其正常工作,但是在与设计师合作时,用静态文本乱丢了我的模板。最后,返回并将所有静态文本提取到外部文件中。果然,那样发现了一些拼写错误!
测试-这是最大的测试。以我的经验,高度纪律的测试优先方法可以消除开发这些应用程序时的90%压力。但是单元测试还不够。
我使用了三种测试,如敏捷社区所指出的:
验收/功能测试-客户根据每项要求定义这些测试,并且直到它们全部通过之前我们才发货(请查看FitNesse,Selenium,Mercury)
集成测试-确保逻辑正确,并且不会跨层或与实际数据一起出现问题(请查看Cactus,DBUnit,Canoo WebTest)
单元测试-既定义了类的用法和期望,又保证可以迅速捕获重大更改(请参阅JUnit,TestNG)
因此,您会看到单元测试确实为开发人员带来了好处...如果我们中有五个人在从事该项目,那么不编写单元测试会导致两件事之一:
随着开发人员试图弄清楚如何使用(或有人破坏)彼此的类,必要的交流激增
由于“孤岛”,没有沟通,风险也增加了,只有一个开发人员接触代码,而公司完全依赖该开发人员
即使只是我一个人,也很容易忘记为什么六个月前我在课堂上放了这么少的特殊情况逻辑。然后,我破坏了自己的代码,不得不弄清楚怎么做……这是浪费时间,并且无济于事,无法减轻压力!另外,如果您强迫自己仔细考虑(并键入)类中每个重要功能的测试,并弄清楚如何隔离任何外部资源,以便可以通过模拟版本,那么您的设计将得到不可估量的改进。因此,无论如何,我倾向于首先进行测试。
可以说,最有用但最不常见的是自动验收测试。这是确保开发人员了解客户要求的内容。有时,这留给质量检查人员,我认为这很好,但是理想的情况是这些是开发过程中不可或缺的一部分。
它的工作方式是:针对每个需求,将测试计划转换为脚本,并添加到测试套件中。然后,您会看到它失败。然后,您编写代码以使其通过。因此,如果编码人员正在研究变更并准备检入,则他们必须进行全新构建并运行所有验收测试。如果有任何故障,请先修复,然后再进行检入。
“持续集成”只是使该步骤自动化的过程-当任何人签入代码时,单独的服务器签出代码并运行所有测试。如果有任何损坏,它会向最后一个开发人员发送垃圾邮件,直到他们修复为止。
我曾经向只有一名测试人员的团队咨询过。这个家伙整天都在手动完成测试计划。当发生变化时,无论多么微小,他都必须重新开始。我建立了一个电子表格,指示仅通过一个屏幕就有1600万条可能的路径,他们急忙为水星测试总监花了1万美元!现在,他制作了电子表格并自动执行了使用它们的测试计划,因此它们具有相当全面的回归测试,而无需不断增加QA时间要求。
一旦开始在应用程序的每个层上自动执行测试(特别是如果您首先进行测试),就会发生不寻常的事情。烦恼消失了!
因此,没有,这不是必需的。但是,如果您担心技术债务,本周末的大规模部署或担心在尝试快速更改以满足突然紧急的客户需求时是否要破坏事情,则可能需要更深入地调查测试-第一发展。
关于java - Java/J2EE标准实践和设计选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1716563/
我最近在读 CSAPP。在 10.9 节中,它说标准 I/O 不应该与 socket 一起使用,原因如下: (1) The restrictions of standard I/O Restricti
似乎是一个足够标准的问题,可以保证解决方案中的标准设计: 假设我想在文件中写入 x+2(或更少)个字符串。 x 字符串构成一个部分的内容,这两个字符串构成该部分的页眉和页脚。要注意的是,如果内容中没有
代码版本管理 在项目中,代码的版本管理非常重要。每个需求版本的代码开发在版本控制里都应该经过以下几个步骤。 在master分支中拉取该需求版本的两个分支,一个feature分支,
我有以下sql查询,我需要获取相应的hibernate条件查询 SELECT COUNT(DISTINCT employee_id) FROM erp_hr_payment WHERE payment
所以我正在编写一些代码,并且最近遇到了实现一些 mixin 的需要。我的问题是,设计混音的正确方法是什么?我将使用下面的示例代码来说明我的确切查询。 class Projectile(Movable,
我的环境变量包含如下双引号: $echo $CONNECT_SASL_JAAS_CONFIG org.apache.kafka.common.security.plain.PlainLoginModu
示例: /** * This function will determine whether or not one string starts with another string. * @pa
有没有办法在 Grails 中做一个不区分大小写的 in 子句? 我有这个: "in"("name", filters.tags) 我希望它忽略大小写。我想我可以做一个 sqlRestriction
我搜索了很长时间,以查找将哪些boost库添加到std库中,但是我只找到了一个新库的完整列表(如此处:http://open-std.org/jtc1/sc22/wg21/docs/library_t
我已经通过使用这个肮脏的黑客解决了我的问题: ' Filter managerial functions ActiveSheet.Range("$A$1:$BW$2211").Auto
因此,我很难理解我需要遵循的标准,以便我的 Java 程序能够嵌入 HTML。我是否只需将我的主类扩展到 Applet 类,或者我还需要做更多的事情吗?另外,在我见过的每个 Applet 示例中,它都
我对在 Hibernate 中使用限制有疑问。 我必须创建条件,设置一些限制,然后选择日期字段最大值的记录: Criteria query = session.createCriteria(Stora
我有标准: ICriteria criteria = Session.CreateCriteria() .SetFetchMode("Entity1", FetchMo
我很难编写条件来选择所有子集合或孙集合为空的实体。我可以将这些作为单独的条件来执行,但我无法将其组合成一个条件。 类结构: public class Component { p
@Entity class A { @ManyToMany private List list; ... } @Entity class B { ... } 我想使用条件(不是 sql 查询)从 A
我的数据库中有以下表结构: Table A: Table B: Table C: _______________
请帮助我: 我有下一张 table : 单位 ID 姓名 用户 ID 姓名 利率 单位 ID 用户 ID 我不明白如何从 SQL 创建正确的条件结构: 代码: SELECT * FROM Unit W
我正在构建一个包含项目的网站,每个项目都有一个页面,例如: website.com/book/123 website.com/film/456 website.com/game/789 每个项目都可以
我需要使用两个属性的组合来过滤结果列表。一个简单的 SQL 语句如下所示: SELECT TOP 10 * FROM Person WHERE FirstName + ' ' + LastName L
我有一个“ super 实体”SuperEntity 和三个扩展父类(super class)的实体 ChildEntity1、...、ChildEntity3。 搜索数据库中的所有实体很容易,即我们
我是一名优秀的程序员,十分优秀!