From f89af887b617b211feb879ffd7888bd74582be03 Mon Sep 17 00:00:00 2001 From: "Rick Su [SSW]" Date: Thu, 28 Mar 2024 11:39:40 +1100 Subject: [PATCH] =?UTF-8?q?XS=E2=9C=94=20=E2=97=BE=20Add=20Bicep=20User-de?= =?UTF-8?q?fined=20Data=20Type=20Rule=20(#8189)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add Bicep User-defined Data Type Rule * Auto-fix Markdown files * Fix headings according to markdown suggestions * improved punctuations * Update rules/bicep-do-you-use-user-defined-data-types/rule.md Co-authored-by: Matt Wicks [SSW] * Auto-fix Markdown files * Add more bad example * change wording * Removed IaC category, moved new rule under Azure --------- Co-authored-by: github-actions[bot] Co-authored-by: Tiago Araújo [SSW] Co-authored-by: Matt Wicks [SSW] --- .../rules-to-better-azure.md | 3 +- .../rule.md | 59 +++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 rules/bicep-do-you-use-user-defined-data-types/rule.md diff --git a/categories/software-engineering/rules-to-better-azure.md b/categories/software-engineering/rules-to-better-azure.md index 7b9689a8eee..b7d82188353 100644 --- a/categories/software-engineering/rules-to-better-azure.md +++ b/categories/software-engineering/rules-to-better-azure.md @@ -6,7 +6,7 @@ uri: rules-to-better-azure index: - choose-azure-services - learn-azure -- azure-certifications-and-associated-exams +- azure-certifications-and-associated-exams - the-9-important-parts-of-azure - cloud-architect - azure-architecture-center @@ -15,6 +15,7 @@ index: - do-you-always-rename-staging-url-on-azure - do-you-consider-azuresearch-for-your-website - azure-resources-creating +- bicep-user-defined-data-types - azure-naming-resources - azure-naming-resource-groups - apply-tags-to-your-azure-resource-groups diff --git a/rules/bicep-do-you-use-user-defined-data-types/rule.md b/rules/bicep-do-you-use-user-defined-data-types/rule.md new file mode 100644 index 00000000000..c11e9d31abf --- /dev/null +++ b/rules/bicep-do-you-use-user-defined-data-types/rule.md @@ -0,0 +1,59 @@ +--- +type: rule +archivedreason: +title: Bicep - Do you use User-defined Data Types? +guid: 2a3ba816-ba40-4cfe-8193-7e151e038ac5 +uri: bicep-user-defined-data-types +created: 2024-03-19T19:19:19.1919191Z +authors: +- title: Rick Su + url: https://ssw.com.au/people/rick-su +related: [] +redirects: [] + +--- + +[User-defined data types in Bicep](https://learn.microsoft.com/en-us/azure/azure-resource-manager/bicep/user-defined-data-types) allow you to create custom data structures for better code organization and type safety. They enhance reusability, abstraction, and maintainability within projects. + + + +When creating a cloud resource, numerous parameters are typically required for configuration and customization. Organizing and naming these parameters effectively is increasingly important. + +``` bicep +@allowed(['Basic', 'Standard']) +param skuName string = 'Basic' +@allowed([5, 10, 20, 50, 100]) +param skuCapacity int = 5 +param skuSizeInGB int = 2 +``` + +:::bad +Bad example - Relying on parameter prefixes and order leads to unclear code, high complexity, and increased maintenance effort +::: + +``` bicep +param sku object +``` + +:::bad +Bad example - When declaring a parameter as an untyped object, bicep cannot validate the object's properties and values at compile time, risking runtime errors. +::: + +``` bicep +// User-defined data type +type skuConfig = { + name: 'Basic' | 'Standard' + capacity: 5 | 10 | 20 | 50 | 100 + sizeInGB: int +} + +param sku skuConfig = { + name: 'Basic' + capacity: 5 + sizeInGB: 2 +} +``` + +:::good +Good example - User-defined data type provides type safety, enhanced readability and making maintenance easier +:::