Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

XS✔ ◾ Add Bicep User-defined Data Type Rule #8189

Merged
merged 9 commits into from Mar 28, 2024
3 changes: 2 additions & 1 deletion categories/software-engineering/rules-to-better-azure.md
Expand Up @@ -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
Expand All @@ -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
Expand Down
59 changes: 59 additions & 0 deletions 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.

<!--endintro-->

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
:::

ricksu978 marked this conversation as resolved.
Show resolved Hide resolved
``` 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
:::