在JSP中加入scriptlet,讓程式碼中的問題難以除錯。 此外,在JSP中加入scriptlet,將商業邏輯與檢視層分離很困難,這違反了「單一責任原則」和MVC設計模式。
程式碼只寫一次,但會讀多次。 花點時間清理我們編寫的程式碼,將可派上用場,因為我們和其他開發人員日後需要閱讀它。
理想情況下,另一個程式設計師不必開啟一個模組來瞭解它的功能。 同樣,他們應該能夠在不閱讀的情況下分辨方法的作用。 我們訂閱這些概念越好,閱讀程式碼就越容易,撰寫和變更程式碼的速度就越快。
在AEM程式碼庫中,會使用下列慣例:
<Interface>Impl
,即:ReaderImpl
。<Variant><Interface>
,即:JcrReader
和FileSystemReader
。Abstract<Interface>
或Abstract<Variant><Interface>
。com.adobe.product.module
。 每個Maven藏物或OSGi包裹都必須有其專屬的套件。請注意,這些慣例不一定需要套用至客戶實作,但必須定義並遵循這些慣例,如此才能維持程式碼的可維護性。
理想情況下,名字應該能夠顯示其意圖。 當名稱不如應該清楚時,常見的程式碼測試是有注釋,說明變數或方法的用途:
不清楚 |
清除 |
int d;//已用時間(天數) |
int elapsedTimeInDays; |
//get tagged images |
public List getTaggedImages(){} |
DRY指出,不應複製相同的程式碼集。 這也適用於字串文字之類的項目。 當有需要改變、需要尋找和消除的情況時,程式碼複製會為缺陷開啟大門。
CSS規則應該是應用程式內容中特定的目標元素。 例如,套用至.content .center的CSS規則會過於廣泛,而且可能會影響您系統內的許多內容,因此其他人必須在未來覆寫此樣式。 .myapp- centertextwt將是更特定的規則,因為它會在應用程 ** 式的上下文中指定置中文字。
當API已停用時,最好尋找新的建議方法,而不是依賴已停用的API。 這可確保未來升級更順暢。
任何非由作者提供的字串,都應透過JSP/Java中的I18n.get()和JavaScript中的CQ.I18n.get(),以呼叫AEM的i18n字典。 如果找不到實作,此實作會傳回傳遞給它的字串,因此,在以主要語言實作功能後,這可提供實作本地化的彈性。
雖然JCR中的路徑不應包含空格,但路徑的存在不應造成程式碼中斷。 Jackrabbit提供具有escape()和escapePath()方法的Text實用程式類。 對於JSP,Granite UI會公開granite:encodeURIPath()EL函式。
AEM提供XSS API,可輕鬆清除參數,並確保避免跨網站指令碼攻擊。 此外,HTL也直接在範本語言中內建這些保護。 API快速參考表可從開發——准則與最佳實務下載。
對於Java程式碼,AEM支援slf4j做為記錄訊息的標準API,而且應與透過OSGi主控台提供的組態搭配使用,以利於管理的一致性。 Slf4j暴露了5種不同的記錄級別。 建議您在選擇要在哪個級別上記錄消息時使用以下准則:
在JavaScript中,console.log僅應在開發期間使用,而所有記錄陳述式應在發行前移除。
毋需復製程式碼,而不需瞭解其功能。 在有疑問時,最好詢問您對模組或API有較多經驗且不清楚的人。