筆者之前的文章,通過 JavaScript 的展開操作符 ...,和 ABAP 的 BASE 關鍵字做對比,展示了這兩種編程語言,面對同樣的語言特性,采用不同風格的操作符來實現(xiàn)的例子。 從 ABAP 一個相對冷門的關鍵字 BASE 說起,聊聊 ABAP 和 JavaScript 的語言風格差異 隨著 ABAP 740 開始不斷引入的一系列新的關鍵字,大家不難體會到:隨著現(xiàn)代軟件開發(fā)技術的快速發(fā)展,ABAP 這門編程語言屆的老前輩,也在不斷借鑒其他后輩編程語言的優(yōu)點,對優(yōu)秀的編程思想進行兼收并蓄,以增強自身能力。 使用過 JavaScript/TypeScript 或者 Java 的開發(fā)人員,想必都聽說過 Fluent Interface Pattern 這個概念,本文余下部分簡稱 FIP. FIP 的主要目的是通過流暢的調用鏈,提供直觀且人性化的接口,使得代碼更加易讀和易用。FIP 在領域特定語言 (Domain Specific Language, DSL)、構建器模式 (Builder Pattern) 和配置類方法中使用尤其廣泛。 在傳統(tǒng)的面向對象編程中,方法調用可能會顯得繁瑣,尤其是當一個類包含大量的配置方法時,調用者需要多次調用 setter 方法以配置對象的多個屬性。 下面是一個 Java 的例子。
可以想象,如果用 ABAP 復刻上面的代碼,代碼行數(shù)還會膨脹數(shù)倍。 FIP 模式通過將每個方法的返回值設計為當前對象 (Java 中的 this 和 ABAP 中的 me),允許連續(xù)調用多個方法,形成一種鏈式調用的方式。 這種設計讓代碼的表達更加自然流暢。 上面的例子可以用 FIP 改寫成:
兩相比較,不難看出,F(xiàn)IP 風格的代碼,結構簡潔,語義清晰,開發(fā)者可以更直觀地理解代碼邏輯。 Java 的 Stream API 是基于 FIP 模式的經(jīng)典實現(xiàn),通過鏈式調用實現(xiàn)了對集合的操作。 下面代碼將數(shù)組中以 A 開頭的元素提取出來,并轉換成大寫。
Java Stream API 的設計體現(xiàn)了流暢接口模式的核心思想,每一步操作返回一個新的 Stream 對象,供下一步操作使用。 再比如現(xiàn)代 HTTP 客戶端庫(如 OkHttp 或 Apache HttpClient)也采用了 FIP 模式。
通過鏈式調用,開發(fā)者可以使用近乎自然語言的方式,構建復雜的 HTTP 請求。 早期的 ABAP 是一門純粹的面向過程的編程語言,所以不可能有所謂的鏈式方法調用的概念。 不過就像本文開頭提到的那樣,ABAP 也在積極吸取其他編程語言的優(yōu)秀特性并融入于自身。 看下面這個 SAP BTP ABAP 編程環(huán)境中的例子:
首先使用 xco_cp 的靜態(tài)方法 string,將一個字符串作為輸入?yún)?shù),構造一個 if_xco_string 的實例。這個實例封裝了對 ABAP 字符串類型的常用操作,比如大小寫轉換,字符串查找,拼接和拆分等等。 每個操作通過接口的一個方法實現(xiàn),這些方法返回 if_xco_string 自身,以支持鏈式調用。 上面例子的代碼,語義一目了然:首先將字符串轉換成大寫,然后尾部添加 with addition, 最后根據(jù)空格符號進行拆分。 這種基于 FIP 的字符串操作實現(xiàn)方式,讓開發(fā)者向寫法相對繁瑣的傳統(tǒng) ABAP 字符串函數(shù)說再見了。 采用 FIP 模式的 ABAP 字符串操作方式,能在極大程度精簡代碼的同時,仍然保留極高的代碼可讀性。 那么,XCO_CP 中的 XCO 和 CP 分別代表什么? SAP 幫助文檔有詳細介紹:XCO 代表 Extension Components, CP 代表 Cloud Platform. XCO 是一個庫,是一個現(xiàn)代 ABAP 通用開發(fā)庫,采用現(xiàn)代編程方式對 ABAP 平臺的通用功能進行封裝。帶有 CP 的后綴則是這個庫針對云平臺的專用版本。 https://help./docs/btp/sap-business-technology-platform/xco-library 本公眾號后續(xù)將對 XCO 庫進行更多的深入介紹。 |
|