编码提示

尽可能使用标语或HTL

在JSP中包含scriptlet使得调试代码中的问题变得困难。 此外,在JSP中加入scriptlet很难将业务逻辑与视图层分离,这违反了单责任原则和MVC设计模式。

写入可读代码

代码只写一次,但读多次。 我们会花一些时间在前面清理我们编写的代码,这样我们和其他开发者需要稍后阅读它时,就会付出回报。

选择意图——显示名称

理想情况下,其他程序员不必打开一个模块来了解其功能。 同样,他们应该能够在不阅读方法的情况下判断方法的用途。 我们订阅这些想法越好,阅读代码就越容易,编写和更改代码的速度就越快。

在AEM代码库中,使用以下约定:

  • 接口的单个实现名为<Interface>Impl,即ReaderImpl
  • 接口的多个实现命名为<Variant><Interface>,即JcrReaderFileSystemReader
  • 抽象基类名为Abstract<Interface>Abstract<Variant><Interface>
  • 包名为com.adobe.product.module。 每个Maven藏物或OSGi捆绑包必须有其自己的包。
  • Java实现位于其API下的实施包中。

请注意,这些约定不一定需要应用于客户实施,但必须定义和遵守约定,以使代码保持可维护性。

理想情况下,名字应该能揭示出自己的意图。 当名称不应该清晰时,常用的代码测试是存在说明变量或方法用途的注释:

不清晰

清除

int d;//已用时间(天)

int elapsedTimeInDays;

//get tagged images
公共列表getItems(){}

公共列表getTaggedImages(){}

不要重复自己的

DRY声明,不应复制同一组代码。 这也适用于字符串文字等内容。 代码复制为任何需要改变的事物打开了缺陷之门,需要找出并消除缺陷。

避免裸CSS规则

CSS规则应该特定于应用程序上下文中的目标元素。 例如,应用于​.content .center​的CSS规则将过于宽泛,可能最终影响整个系统的大量内容,要求其他人将来覆盖此样式。 .myapp- centertexttw将是更具体的规则,因为它将在应用程 ** 序上下文中指定居中文本。

消除已弃用API的使用

当API被弃用时,总是最好找到建议的新方法,而不是依赖已弃用的API。 这将确保将来更顺利地升级。

写入可本地化的代码

创作者未提供的任何字符串都应打包在通过JSP/Java中的​I18n.get()​和JavaScript中的​CQ.I18n.get()​调用AEM的i18n词典中。 如果找不到任何实现,此实现将返回传递给它的字符串,因此这优惠了在主语言中实现这些功能后实现本地化的灵活性。

安全的转义资源路径

虽然JCR中的路径不应包含空格,但它们的存在不应导致代码中断。 Jackrabbit提供具有​escape()​和​escapePath()​方法的文本实用程序类。 对于JSP,Granite UI显示​granite:encodeURIPath()EL​函数。

使用XSS API和/或HTL防止跨站点脚本攻击

AEM提供了一个XSS API,可轻松清理参数并确保避免跨站点脚本攻击的安全性。 此外,HTL还直接将这些保护内置到模板语言中。 可从开发——准则和最佳实践下载API备忘单。

实施适当的日志记录

对于Java代码,AEM支持slf4j作为记录消息的标准API,并应与通过OSGi控制台提供的配置结合使用,以便在管理中保持一致。 Slf4j显示五个不同的日志记录级别。 我们建议在选择在哪个级别登录消息时使用以下准则:

  • 错误:当代码中的某些内容已损坏,且处理无法继续。 这通常是意外异常的结果。 在这些情况下包含堆栈跟踪通常很有帮助。
  • 警告:当某些内容无法正常工作,但处理可以继续。 这通常是我们预期的异常的结果,如​PathNotFoundException
  • 信息:在监视系统时有用的信息。 请记住,这是默认设置,大多数客户都会将其保留在环境上。 因此,不要过度使用它。
  • 调试:有关处理的较低级别信息。 在调试支持问题时很有用。
  • TRACE:最低级别信息,如输入/退出方法。 这通常只供开发人员使用。

对于JavaScript,console.log​只应在开发过程中使用,并且在发布之前应删除所有日志语句。

避免货物崇拜编程

避免在不了解代码功能的情况下复制代码。 如果存疑,最好向对模块或API有更多经验、但您不清楚的人询问。

On this page

Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now