对于简单且疾速倒退的库,在改良现有性能的同时放弃向后兼容性可能具备挑战性。代码弃用容许您正确标记过期的代码,并通过正告用户,帮忙他们过渡到更好的代替计划。
要将函数、类、办法或属性标记为已弃用,请应用 @deprecated 标记。上面是一个例子:
/**
* @deprecated since 1.0.2
* Use better alternative instead
*/
依据理论的弃用政策,此类代码将成为下一个次要版本之一中删除的候选代码。
Marking Deprecated Logic
通常,为了适应向后兼容性,一些间接相干的代码须要蕴含额定的逻辑,当相干的弃用性能被删除时,这些逻辑应该被删除。当不分明应该删除哪些附加逻辑时,确保删除过期代码的最佳办法是用正确的 TODO 正文标记它,最好链接到带有附加详细信息的 GitHub 问题。应正确标记这些票证(例如,具备 deprecated-1.x 的标签),以便未来更容易将其作为删除的候选对象援用。
以下是 TODO 正文的示例:
// TODO(issue:3313) Deprecated since 1.1.1
Feature Flags
每个新的主要版本都会公布新性能。有时,新性能被增加到客户曾经能够应用的现有组件中,这使得这些更改成为破坏性更改,因为增加到 DOM 或因为不同的行为。为了防止毁坏客户的代码,并在不须要过于频繁地公布新的次要版本的状况下灵便地改良现有组件的性能,Spartacus 应用了性能标记。
性能标记容许咱们执行以下操作:
- 依据性能级别辨别性能,对应小版本号
- 基于显式特色标记辨别特色
留神:显式性能标记能够链接到性能级别,这意味着默认状况下为该特定级别启用它们。
Deciding If You Need a Feature Flag
如果不须要,最好防止创立新的性能标记。这有助于放弃咱们的配置洁净并使最终的保护更容易。
以下指南能够帮忙您决定应该应用哪个性能标记(如果有):
(1) 如果可能,尽量避免应用性能标记。
相同,将您的性能实现为一个独自的模块,能够由客户抉择导入。
(2) 如果您的性能曾经有独自的配置,请确定以下哪个更不便:
a. 在模块配置中创立一个新选项(对于个别性能,使它们可切换具备理论价值)。
b. 应用性能标记(特地是当标记的惟一起因是向后兼容时)。
如果可能,尽量避免创立明确的性能标记。相同,尝试启用特定性能级别的性能,例如主要版本。
如果要创立显式性能标记,请确保这样做的起因是正当的(例如,该性能十分重要,能够显式禁用或启用)。
Detecting the Feature Level
如果您的服务或组件曾经注入了全局配置,您能够应用一个简略的实用程序函数来查看性能级别,如以下示例所示:
if (isFeatureLevel(this.config, '1.1')) {// code that is meant to be executed for feature level 1.1 and above}
如果您的组件或服务无权拜访全局配置,您能够注入 FeatureConfigService 并应用它,如下例所示:
constructor(
// ...
protected featureConfig: FeatureConfigService
) {}
// set a feature flag based on the feature level
readonly isSomeNewFeatureEnabled = this.featureConfig.isLevel('1.1');
如果要在模板中有条件地显示组件,能够应用 cxFeatureLevel 指令,如下例所示:
<newComponent *cxFeatureLevel="'1.1'"></newComponent>
您能够在没有额定配置的状况下引入显式标记,但建议您将它们蕴含在店面配置的类型定义中,以将它们公开给客户。为此,请将您的标记作为布尔类型的新属性增加到 feature-toggles.ts 文件中的 FeatureToggles 接口。上面是一个例子:
export interface FeatureToggles {
features?: {
// ...
/**
* Sample feature description
*/
consignmentTracking: boolean;
};
}
通过这种形式,您还能够在标记中增加形容,如果须要,甚至能够增加弃用正文。
Linking the Feature Flag to the Feature Level
通过将您的性能标记链接到性能级别,默认状况下将为该性能级别和所有更高级别启用您的标记。为此,请将性能标记的默认值作为示意性能级别的字符串提供。您能够将此配置增加到您的模块配置中,如以下示例所示:
ConfigModule.withConfig({
// ...
features: {consignmentTracking: '1.1',},
})
在此示例中,如果性能级别设置为至多“1.1”,则默认状况下启用寄售跟踪性能。
Disabling a Feature for a Specific Feature Level
您能够通过蕴含感叹号来禁用特定性能级别的性能!在版本号之前。上面是一个例子:
<newComponent *cxFeatureLevel="'!1.1'"></newComponent>