You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: metalama-awareness-campaign/01_more_effective_way.md
+9-6Lines changed: 9 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,5 @@
1
1
---
2
-
subject: 'Discover Metalama: A New Code Generation Framework for C#'
2
+
subject: "Discover Metalama: A New Code Generation Framework for C#"
3
3
layout: instantly
4
4
---
5
5
@@ -9,7 +9,7 @@ Hi {{firstName}},
9
9
10
10
I'm **{{sendingAccountFirstName}}**, reaching out on behalf of our founder to gather feedback from experienced .NET engineers like you about [Metalama](https://metalama.net?mtm_campaign=awareness&mtm_source=instantly&mtm_kwd=email1), an open source meta-programming framework for code generation, architecture validation, and aspect-oriented programming in C#.
11
11
12
-
As someone who works with .NET, you know how repetitive patterns and boilerplate can slow down development, clutter codebases, and, hinder its maintenanbility -- although maintenance typically counts for 70% of the total cost of enterprise projects. Metalama is designed to help you eliminate that friction by letting you write special custom attributes, called **aspects**, that act as code templates. Here’s a quick look at a simple logging aspect:
12
+
As someone who works with .NET, you know how repetitive patterns and boilerplate can slow down development, clutter codebases, and hinder their maintainability -- although maintenance typically counts for 70% of the total cost of enterprise projects. Metalama is designed to help you eliminate that friction by allowing you to write special custom attributes, called **aspects**, that act as code templates. Here's a quick look at a simple logging aspect:
13
13
14
14
```csharp
15
15
usingMetalama.Framework.Aspects;
@@ -59,11 +59,11 @@ With Metalama, you can preview and debug generated code, making it easy to see e
59
59
60
60
**Why choose Metalama?**
61
61
62
-
**Reduce code and bugs by 15%.** Let the machine handle repetitive tasks so engineers can focus on meaningful work.
62
+
***Reduce code and bugs by 15%.** Let the machine handle repetitive tasks so engineers can focus on meaningful work.
63
63
64
-
**Maintain clean and readable code.** Simplify your codebase for better maintainability and collaboration.
64
+
***Maintain clean and readable code.** Simplify your codebase for better maintainability and collaboration.
65
65
66
-
**Enforce architectural consistency.** Define validation rules in C# and receive instant feedback directly in your IDE.
66
+
***Enforce architectural consistency.** Define validation rules in C# and receive instant feedback directly in your IDE.
67
67
68
68
If you have ever wished for a more effective way to handle logging, validation, or other cross-cutting concerns, Metalama is designed for you. There are [dozens of use cases](https://metalama.net/applications?mtm_campaign=awareness&mtm_source=instantly&mtm_kwd=email1) in any non-trivial application. Explore our [documentation](https://doc.metalama.net/conceptual/getting-started?mtm_campaign=awareness&mtm_source=instantly&mtm_kwd=email1) and [commented examples](https://doc.metalama.net/examples?mtm_campaign=awareness&mtm_source=instantly&mtm_kwd=email1) to learn more.
69
69
@@ -72,9 +72,12 @@ We would love to hear your thoughts, questions, or feedback. Join the conversati
72
72
Thank you for your time.
73
73
74
74
Best regards,
75
+
75
76
**{{sendingAccountFirstName}}**
77
+
76
78
Community Manager
77
79
78
80
*P.S. We will send you four more emails about Metalama and then stop. You can unsubscribe at any time.*
Copy file name to clipboardExpand all lines: metalama-awareness-campaign/03_ui.md
+4-2Lines changed: 4 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,13 +1,13 @@
1
1
---
2
-
subject: 'Building UIs with .NET Without Boilerplate'
2
+
subject: "Building UIs with .NET Without Boilerplate"
3
3
layout: instantly
4
4
---
5
5
6
6
{% raw %}
7
7
8
8
Hi {{firstName}},
9
9
10
-
This is **{{sendingAccountFirstName}}** from Metalama. In my previous emails, I showed how Metalama can help you reduce boilerplate code for DevOps concerns like logging and caching. Today, I’d like to show you how Metalama can simplify common front-end challenges: think observability (`INotifyPropertyChanged`), undo/redo, change tracking, and WPF dependency properties and commands.
10
+
This is **{{sendingAccountFirstName}}** from Metalama. In my previous emails, I showed how Metalama can help you reduce boilerplate code for DevOps concerns like logging and caching. Today, I'd like to show you how Metalama can simplify common front-end challenges: think observability (`INotifyPropertyChanged`), undo/redo, change tracking, and WPF dependency properties and commands.
11
11
12
12
## INotifyPropertyChanged
13
13
@@ -136,7 +136,9 @@ We’d love to hear your thoughts, questions, or feedback. Join the conversation
Copy file name to clipboardExpand all lines: metalama-awareness-campaign/04_patterns.md
+12-10Lines changed: 12 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,17 +1,17 @@
1
1
---
2
-
subject: 'Classic Design Patterns Without Boilerplate: Builder, Proxy, and More with Metalama'
2
+
subject: "Classic Design Patterns Without Boilerplate: Builder, Proxy, and More with Metalama"
3
3
layout: instantly
4
4
---
5
5
6
6
{% raw %}
7
7
8
8
Hi {{firstName}},
9
9
10
-
This is **{{sendingAccountFirstName}}** from Metalama, the open-source meta-programming framework for .NET. In my previous emails, I showed how Metalama can help you eliminate boilerplate in DevOps and UI scenarios. Today, I’d like to show you how Metalama can simplify classic design patterns. You’ve already seen the Memento pattern. Let’s look at a few more: Builder, Decorator, and Proxy.
10
+
This is **{{sendingAccountFirstName}}** from Metalama, the open-source meta-programming framework for .NET. In my previous emails, I showed how Metalama can help you eliminate boilerplate in DevOps and UI scenarios. Today, I'd like to show you how Metalama can simplify classic design patterns. You've already seen the Memento pattern. Let's look at a few more: Builder, Decorator, and Proxy.
11
11
12
12
## Builder Pattern
13
13
14
-
The [Builder pattern](https://metalama.net/applications/builder?mtm_campaign=awareness&mtm_source=instantly&mtm_kwd=email4) is a creational design pattern that lets you construct complex objects step by step. It’s especially useful for creating immutable objects with many optional parameters or properties. The Abstract Builder variant adds even more flexibility.
14
+
The [Builder pattern](https://metalama.net/applications/builder?mtm_campaign=awareness&mtm_source=instantly&mtm_kwd=email4) is a creational design pattern that lets you construct complex objects step by step. It's especially useful for creating immutable objects with many optional parameters or properties. The Abstract Builder variant adds even more flexibility.
15
15
16
16
The main drawback of the Builder pattern is the sheer amount of repetitive code it requires. With Metalama, you can eliminate almost all of this boilerplate.
17
17
@@ -66,7 +66,7 @@ public partial class Song
66
66
}
67
67
```
68
68
69
-
That’s a lot of code you don’t have to write or maintain!
69
+
That's a lot of code you don't have to write or maintain!
70
70
71
71
For more details, check out these resources:
72
72
@@ -77,7 +77,7 @@ For more details, check out these resources:
77
77
78
78
The [Proxy pattern](https://metalama.net/applications/proxy?mtm_campaign=awareness&mtm_source=instantly&mtm_kwd=email4) is a structural design pattern that lets you provide a substitute or placeholder for another object, typically to add new behavior. In C#, proxies are usually based on interfaces.
79
79
80
-
You can implement the proxy’s added behavior in each member, or abstract it into an _Interceptor_.
80
+
You can implement the proxy's added behavior in each member, or abstract it into an _Interceptor_.
81
81
82
82
Implementing the Proxy pattern by hand means duplicating all interface members—a lot of boilerplate. With Metalama, you can generate the entire proxy automatically. Use `ProjectFabric` as a compile-time entry point to tell Metalama what to generate or validate:
83
83
@@ -106,9 +106,9 @@ You can find the full example on [GitHub](https://github.com/metalama/Metalama.S
106
106
107
107
## Deep Cloning
108
108
109
-
Another common pattern is [deep cloning](https://doc.metalama.net/examples/clone/clone-1?mtm_campaign=awareness&mtm_source=instantly&mtm_kwd=email4). Unlike shallow cloning (which just calls `MemberwiseClone`), deep cloning requires recursively cloning child objects—a task that’s tedious and error-prone to do by hand.
109
+
Another common pattern is [deep cloning](https://doc.metalama.net/examples/clone/clone-1?mtm_campaign=awareness&mtm_source=instantly&mtm_kwd=email4). Unlike shallow cloning (which just calls `MemberwiseClone`), deep cloning requires recursively cloning child objects—a task that's tedious and error-prone to do by hand.
110
110
111
-
.NET doesn’t have a built-in concept of “child” objects, so a common solution is to mark child properties and fields with a `[Child]` attribute. Here’s how it looks:
111
+
.NET doesn't have a built-in concept of "child" objects, so a common solution is to mark child properties and fields with a `[Child]` attribute. Here's how it looks:
112
112
113
113
```csharp
114
114
[Cloneable]
@@ -150,7 +150,7 @@ See the [documentation](https://doc.metalama.net/examples/clone?mtm_campaign=awa
150
150
151
151
## Why Not Just Use Roslyn Source Generators?
152
152
153
-
You might wonder: couldn’t all this be done with plain Roslyn source generators? For simple cases, yes. But Metalama is much more powerful and easier to use.
153
+
You might wonder: couldn't all this be done with plain Roslyn source generators? For simple cases, yes. But Metalama is much more powerful and easier to use.
154
154
155
155
Metalama is a high-level framework built on top of Roslyn generators. In fact, Metalama uses Roslyn generators for its design-time experience. But with Metalama, you get:
156
156
@@ -163,7 +163,7 @@ To learn more about code generation alternatives, read [this article](https://me
163
163
164
164
## Other Patterns
165
165
166
-
We can’t cover every use case in a single email, but here are more ways Metalama can help:
166
+
We can't cover every use case in a single email, but here are more ways Metalama can help:
@@ -177,12 +177,14 @@ For even more use cases and open-source aspect implementations, visit the [Metal
177
177
178
178
Classic design patterns remain essential in modern .NET applications, but many still require a lot of boilerplate code. Metalama helps you generate this code automatically, so you can focus on what matters most: building great software.
179
179
180
-
We’d love to hear your thoughts, questions, or feedback. Join the conversation on our [GitHub discussion space](https://github.com/orgs/metalama/discussions/categories/q-a), or simply reply to this email and I’ll connect you directly with our engineering team.
180
+
We'd love to hear your thoughts, questions, or feedback. Join the conversation on our [GitHub discussion space](https://github.com/orgs/metalama/discussions/categories/q-a), or simply reply to this email and I'll connect you directly with our engineering team.
181
181
182
182
Thank you for your time.
183
183
184
184
All the best,
185
+
185
186
**{{sendingAccountFirstName}}**
187
+
186
188
Community Manager
187
189
188
190
*P.S. We will send you two one email about Metalama and then stop. You can unsubscribe at any time.*
Copy file name to clipboardExpand all lines: metalama-awareness-campaign/05_validating_architecture.md
+4-2Lines changed: 4 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,13 +1,13 @@
1
1
---
2
-
subject: 'Get your development team to adhere to architecture'
2
+
subject: "Validating Architecture With Metalama: Compile-Time Safety for Your Codebase"
3
3
layout: instantly
4
4
---
5
5
6
6
{% raw %}
7
7
8
8
Hi {{firstName}},
9
9
10
-
This is **{{sendingAccountFirstName}}** from Metalama. This is my final email in this series. In previous messages, I introduced Metalama's first pillar: code generation, using aspect-oriented programming. Today, I’m excited to introduce Metalama’s second pillar: architecture verification.
10
+
This is **{{sendingAccountFirstName}}** from Metalama. In my previous emails, I showed how Metalama can help you reduce boilerplate code for DevOps, UI, and design patterns. Today, let's talk about how Metalama can help you enforce architecture rules and naming conventions at compile time.
11
11
12
12
Unlike code generation and aspect-oriented programming, which are open source, architecture verification is a proprietary feature available with a [Metalama Professional](https://metalama.net/premium?mtm_campaign=awareness&mtm_source=instantly&mtm_kwd=email5) license.
13
13
@@ -117,7 +117,9 @@ You can learn more about architecture validation in our [online documentation](h
117
117
Thank you for following along! We hope you enjoyed this series. Remember, the vast majority of Metalama’s features (85% of the codebase) are free and open source. Follow our [Getting Started](https://doc.metalama.net/conceptual/getting-started?mtm_campaign=awareness&mtm_source=instantly&mtm_kwd=email5) guide to start your journey against boilerplate code and architecture headaches—or join the conversation on our [GitHub discussion space](https://github.com/orgs/metalama/discussions/categories/q-a). You can also reply to this email and I’ll connect you directly with our engineering team.
Copy file name to clipboardExpand all lines: metalama-email-course/010-required-contract.md
+3-1Lines changed: 3 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,9 @@
1
1
---
2
-
subject: Verifying Required Fields and Parameters With Metalama
2
+
subject: "Verifying Required Fields and Parameters With Metalama"
3
3
---
4
4
5
+
# Verifying Required Fields and Parameters With Metalama
6
+
5
7
Welcome to the Metalama e-mail course! In this first email, we will explore one of the most straightforward features of Metalama: code contracts.
6
8
7
9
Developers frequently need to verify that certain fields, properties, parameters, or return values are not null. Even though the code necessary to perform these checks is not complex, it can lead to clutter in the codebase.
0 commit comments