$mermaidjs
Clean Architecture Demo
Loading...
Searching...
No Matches
Email.cs
Go to the documentation of this file.
1// TaskManagement.Domain/ValueObjects/Email.cs
2using System.Text.RegularExpressions;
4
6
37
38public sealed class Email : ValueObject
39{
40 public string Value {
41 get;
42 }
43 private Email(string value) => Value = value;
44 public static Result<Email> Create(string email)
45 {
46 if (string.IsNullOrWhiteSpace(email))
47 return Result.Failure<Email>("Email is required.");
48 // RFC 5322 compliant validation
49 var pattern = @"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$";
50
51 if (!Regex.IsMatch(email, pattern))
52 return Result.Failure<Email>("Invalid email format.");
53 return Result.Success(new Email(email.ToUpperInvariant()));
54 }
55 protected override IEnumerable<object> GetEqualityComponents()
56 {
57 yield return Value;
58 }
59 public override string ToString() => Value;
60}
Result es un tipo de unión discriminada que implementa el patrón Result para manejo de errores.
Definition Result.cs:71
static Result Failure(string error)
Email es un objeto de valor del dominio que encapsula la lógica y validación de direcciones de correo...
Definition Email.cs:39
static Result< Email > Create(string email)
Definition Email.cs:44
override IEnumerable< object > GetEqualityComponents()
Definition Email.cs:55