什么是 SAP Spartacus UI 的 code deprecation
對(duì)于復(fù)雜且快速發(fā)展的庫(kù),在改進(jìn)現(xiàn)有功能的同時(shí)保持向后兼容性可能具有挑戰(zhàn)性。 代碼棄用允許您正確標(biāo)記過(guò)時(shí)的代碼,并通過(guò)警告用戶,幫助他們過(guò)渡到更好的替代方案。
要將函數(shù)、類、方法或?qū)傩詷?biāo)記為已棄用,請(qǐng)使用 @deprecated 標(biāo)記。 下面是一個(gè)例子:
/** * @deprecated since 1.0.2 * Use better alternative instead */根據(jù)實(shí)際的棄用政策,此類代碼將成為下一個(gè)主要版本之一中刪除的候選代碼。
Marking Deprecated Logic
通常,為了適應(yīng)向后兼容性,一些間接相關(guān)的代碼需要包含額外的邏輯,當(dāng)相關(guān)的棄用功能被刪除時(shí),這些邏輯應(yīng)該被刪除。 當(dāng)不清楚應(yīng)該刪除哪些附加邏輯時(shí),確保刪除過(guò)時(shí)代碼的最佳方法是用正確的 TODO 注釋標(biāo)記它,最好鏈接到帶有附加詳細(xì)信息的 GitHub 問(wèn)題。 應(yīng)正確標(biāo)記這些票證(例如,具有 deprecated-1.x 的標(biāo)簽),以便將來(lái)更容易將其作為刪除的候選對(duì)象引用。
以下是 TODO 注釋的示例:
// TODO(issue:3313) Deprecated since 1.1.1Feature Flags
每個(gè)新的次要版本都會(huì)發(fā)布新功能。 有時(shí),新功能被添加到客戶已經(jīng)可以使用的現(xiàn)有組件中,這使得這些更改成為破壞性更改,因?yàn)樘砑拥?DOM 或因?yàn)椴煌男袨椤?為了避免破壞客戶的代碼,并在不需要過(guò)于頻繁地發(fā)布新的主要版本的情況下靈活地改進(jìn)現(xiàn)有組件的功能,Spartacus 使用了功能標(biāo)志。
功能標(biāo)志允許我們執(zhí)行以下操作:
- 根據(jù)功能級(jí)別區(qū)分功能,對(duì)應(yīng)小版本號(hào)
- 基于顯式特征標(biāo)志區(qū)分特征
注意:顯式功能標(biāo)志可以鏈接到功能級(jí)別,這意味著默認(rèn)情況下為該特定級(jí)別啟用它們。
Deciding If You Need a Feature Flag
如果不需要,最好避免創(chuàng)建新的功能標(biāo)志。這有助于保持我們的配置干凈并使最終的維護(hù)更容易。
以下指南可以幫助您決定應(yīng)該使用哪個(gè)功能標(biāo)志(如果有):
(1) 如果可能,盡量避免使用功能標(biāo)志。
相反,將您的功能實(shí)現(xiàn)為一個(gè)單獨(dú)的模塊,可以由客戶選擇導(dǎo)入。
(2) 如果您的功能已經(jīng)有單獨(dú)的配置,請(qǐng)確定以下哪個(gè)更方便:
a. 在模塊配置中創(chuàng)建一個(gè)新選項(xiàng)(對(duì)于一般功能,使它們可切換具有實(shí)際價(jià)值)。
b. 使用功能標(biāo)志(特別是當(dāng)標(biāo)志的唯一原因是向后兼容時(shí))。
如果可能,盡量避免創(chuàng)建明確的功能標(biāo)志。相反,嘗試啟用特定功能級(jí)別的功能,例如次要版本。
如果要?jiǎng)?chuàng)建顯式功能標(biāo)志,請(qǐng)確保這樣做的原因是合理的(例如,該功能非常重要,可以顯式禁用或啟用)。
Detecting the Feature Level
如果您的服務(wù)或組件已經(jīng)注入了全局配置,您可以使用一個(gè)簡(jiǎn)單的實(shí)用程序函數(shù)來(lái)檢查功能級(jí)別,如以下示例所示:
if (isFeatureLevel(this.config, '1.1')) {// code that is meant to be executed for feature level 1.1 and above }如果您的組件或服務(wù)無(wú)權(quán)訪問(wèn)全局配置,您可以注入 FeatureConfigService 并使用它,如下例所示:
constructor(// ...protected featureConfig: FeatureConfigService) {}// set a feature flag based on the feature levelreadonly isSomeNewFeatureEnabled = this.featureConfig.isLevel('1.1');如果要在模板中有條件地顯示組件,可以使用 cxFeatureLevel 指令,如下例所示:
<newComponent *cxFeatureLevel="'1.1'"></newComponent>您可以在沒(méi)有額外配置的情況下引入顯式標(biāo)志,但建議您將它們包含在店面配置的類型定義中,以將它們公開(kāi)給客戶。 為此,請(qǐng)將您的標(biāo)志作為布爾類型的新屬性添加到 feature-toggles.ts 文件中的 FeatureToggles 接口。 下面是一個(gè)例子:
export interface FeatureToggles {features?: {// .../*** Sample feature description*/consignmentTracking: boolean;}; }通過(guò)這種方式,您還可以在標(biāo)志中添加描述,如果需要,甚至可以添加棄用注釋。
Linking the Feature Flag to the Feature Level
通過(guò)將您的功能標(biāo)志鏈接到功能級(jí)別,默認(rèn)情況下將為該功能級(jí)別和所有更高級(jí)別啟用您的標(biāo)志。 為此,請(qǐng)將功能標(biāo)志的默認(rèn)值作為表示功能級(jí)別的字符串提供。 您可以將此配置添加到您的模塊配置中,如以下示例所示:
ConfigModule.withConfig({// ...features: {consignmentTracking: '1.1',}, })在此示例中,如果功能級(jí)別設(shè)置為至少“1.1”,則默認(rèn)情況下啟用寄售跟蹤功能。
Disabling a Feature for a Specific Feature Level
您可以通過(guò)包含感嘆號(hào)來(lái)禁用特定功能級(jí)別的功能! 在版本號(hào)之前。 下面是一個(gè)例子:
<newComponent *cxFeatureLevel="'!1.1'"></newComponent>總結(jié)
以上是生活随笔為你收集整理的什么是 SAP Spartacus UI 的 code deprecation的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 明日之后树屋位置
- 下一篇: 什么是 SAP Spartacus UI