123456789101112131415161718192021222324252627282930313233343536373839404142 |
- // Learn more: https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/microservice-ddd-cqrs-patterns/implement-value-objects
- namespace AipGateway.API.Domain.Common.Extensions
- {
- public abstract class ValueObject
- {
- protected static bool EqualOperator(ValueObject left, ValueObject right)
- {
- if (left is null ^ right is null)
- {
- return false;
- }
- return left?.Equals(right!) != false;
- }
- protected static bool NotEqualOperator(ValueObject left, ValueObject right)
- {
- return !EqualOperator(left, right);
- }
- protected abstract IEnumerable<object> GetEqualityComponents();
- public override bool Equals(object? obj)
- {
- if (obj == null || obj.GetType() != GetType())
- {
- return false;
- }
- var other = (ValueObject)obj;
- return GetEqualityComponents().SequenceEqual(other.GetEqualityComponents());
- }
- public override int GetHashCode()
- {
- return GetEqualityComponents()
- .Select(x => x != null ? x.GetHashCode() : 0)
- .Aggregate((x, y) => x ^ y);
- }
- }
- }
|