在JSP中包含脚本,使得调试代码中的问题变得困难。 另外,在JSP中加入脚本,很难将业务逻辑与视图层分离,这违反了单责原则和MVC设计模式。
代码只写一次,但会读多次。 我们需要提前一段时间清理我们所写的代码,这样我们和其他开发者以后需要阅读时,就会在路上派发股息。
理想情况下,另一个程序员应该不必打开一个模块来了解它的功能。 同样,他们应该能够在不阅读方法的情况下判断方法的用途。 我们越能订阅这些想法,就越容易阅读代码,我们编写和更改代码的速度就越快。
在AEM代码库中,使用以下约定:
<Interface>Impl
,即 ReaderImpl
.<Variant><Interface>
,即 JcrReader
和 FileSystemReader
.Abstract<Interface>
或 Abstract<Variant><Interface>
.com.adobe.product.module
. 每个Maven藏物或OSGi包必须有其自己的包。请注意,这些约定不一定需要应用于客户实施,但务必要定义并遵守约定,以便代码能够保持可维护。
理想情况下,名字应该显示其意图。 名称不应清晰时的常见代码测试是,存在一些说明变量或方法用途的注释:
不明 |
清除 |
int d;//已用时间(以天为单位) |
int elapsedTimeInDays; |
//获取标记图像 |
public List getTaggedImages(){} |
DRY声明,同一组代码绝不应重复。 这也适用于字符串文本之类的内容。 每当有需要改变的事情时,代码重复就会为缺陷打开大门,需要寻找和消除。
CSS规则应该特定于应用程序上下文中的目标元素。 例如,应用于 .content .center 会过于广泛,并且最终可能会影响整个系统中的许多内容,要求其他人在将来覆盖此样式。 .myapp-centertext 将是更具体的规则,因为它指定的是“居中” 文本 的子代码。
当API被弃用时,最好找到新的推荐方法,而不是依赖已弃用的API。 这将确保未来更顺利的升级。
作者未提供的任何字符串都应包含在对AEM i18n词典的调用中,该词典通过 I18n.get() 和 CQ.I18n.get() 中。 此实施将返回在未找到实施时传递给它的字符串,因此在以主语言实施功能后,这样就可以灵活地实施本地化。
虽然JCR中的路径不应包含空格,但是它们的存在不应导致代码中断。 Jackrabbit提供了一个Text实用程序类,该类 escape() 和 escapePath() 方法。 对于JSP,Granite UI会公开 granite:encodeURIPath()EL 函数。
AEM提供了XSS API,可轻松清理参数并确保免受跨站点脚本攻击的安全。 此外,HTL还直接在模板语言中内置了这些保护。 API备忘单可在以下位置下载: 开发 — 准则和最佳实践.
对于Java代码,AEM支持将slf4j作为记录消息的标准API,并且应与通过OSGi控制台提供的配置结合使用,以保持管理的一致性。 Slf4j会公开五个不同的日志记录级别。 在选择要在中记录消息的级别时,我们建议遵循以下准则:
对于JavaScript, console.log 只应在开发期间使用,所有log语句都应在发布之前删除。
在不了解代码功能的情况下,避免复制代码。 如有疑问,您始终最好询问对模块或API具有更多经验且您不清楚的人员。