

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 最佳實務
<a name="best-practices"></a>

**L1 建構**
+ 您不一定會直接避免使用 L1 建構，但您應該盡可能避免。如果特定 L2 建構不支援您的邊緣案例，您可以探索這兩個選項，而不是直接使用 L1 建構：
  + **存取 **`defaultChild`：** **如果 L2 建構模組中無法使用您需要的 CloudFormation 屬性，您可以使用 存取基礎 L1 建構模組`L2Construct.node.defaultChild`。您可以透過此屬性存取 L1 建構體的任何公有屬性，而不是自行建立 L1 建構體的麻煩。
  + **使用屬性覆寫**：如果您要更新的屬性不是公開的？ 允許 AWS CDK 執行 CloudFormation 範本可執行的任何操作的最終逃生艙是使用每個 L1 建構中可用的方法：[addPropertyOverride](https://docs.aws.amazon.com/cdk/v2/guide/cfn_layer.html)。您可以在 CloudFormation 範本層級操作堆疊，方法是直接將 CloudFormation 屬性名稱和值傳遞至此方法。

**L2 建構**
+ 請記得利用 L2 建構常提供的協助程式方法。透過第 2 層，您不需要在執行個體化時傳遞每個屬性。L2 協助程式方法可以讓資源佈建更方便，特別是需要條件式邏輯時。最方便的協助程式方法之一衍生自[授予](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_iam.Grant.html)類別。此類別不會直接使用，但許多 L2 建構會使用它來提供協助程式方法，讓許可更容易實作。例如，如果您想要授予 L2 Lambda 函數存取 L2 S3 儲存貯體的許可，您可以呼叫 ，`s3Bucket.grantReadWrite(lambdaFunction)`而不是建立新的角色和政策。

**L3 建構**
+ 雖然當您想要讓堆疊更可重複使用且可自訂時，L3 建構非常方便，但建議您謹慎使用。考慮您需要哪種類型的 L3 建構，或是否需要 L3 建構：
  + 如果您不直接與 AWS 資源互動，通常更適合建立協助程式類別，而不是擴展`Construct`類別。這是因為 `Construct`類別預設會執行許多動作，只有在您直接與 AWS 資源互動時才需要這些動作。因此，如果您不需要執行這些動作，避免這些動作會更有效率。
  + 如果您判斷建立新的 L3 建構是適當的，在大多數情況下，您會想要直接擴展 `Construct`類別。只有當您想要更新建構的預設屬性時，才擴展其他 L2 建構。如果涉及其他 L2 建構模組或自訂邏輯，請`Construct`直接擴展並執行個體化建構模組中的所有資源。