팁 (조언)
이 콘텐츠는 .NET Docs 또는 오프라인으로 읽을 수 있는 다운로드 가능한 무료 PDF로 제공되는 컨테이너화된 .NET 애플리케이션용 .NET 마이크로 서비스 아키텍처인 eBook에서 발췌한 내용입니다.
열거형(또는 열거형 타입)은 정수형을 둘러싼 얇은 언어 래퍼입니다. 닫힌 값 집합에서 하나의 값을 저장하는 경우 사용을 제한할 수 있습니다. 크기(소형, 중형, 대형)를 기준으로 분류하는 것이 좋은 예입니다. 제어 흐름 또는 보다 강력한 추상화에 열거형을 사용하는 것은 코드 냄새일 수 있습니다. 이러한 유형의 사용은 열거형의 값을 확인하는 많은 제어 흐름 문이 있는 취약한 코드로 이어집니다.
대신 개체 지향 언어의 모든 풍부한 기능을 사용하도록 설정하는 열거형 클래스를 만들 수 있습니다.
그러나 이 항목은 중요한 항목이 아니며 대부분의 경우 단순성을 위해 기본 설정인 경우 일반 열거형 형식 을 계속 사용할 수 있습니다. 열거형 클래스의 사용은 비즈니스 관련 개념과 더 관련이 있습니다.
열거형 기본 클래스 구현
eShopOnContainers의 정렬 마이크로 서비스는 다음 예제와 같이 샘플 열거형 기본 클래스 구현을 제공합니다.
public abstract class Enumeration : IComparable
{
public string Name { get; private set; }
public int Id { get; private set; }
protected Enumeration(int id, string name) => (Id, Name) = (id, name);
public override string ToString() => Name;
public static IEnumerable<T> GetAll<T>() where T : Enumeration =>
typeof(T).GetFields(BindingFlags.Public |
BindingFlags.Static |
BindingFlags.DeclaredOnly)
.Select(f => f.GetValue(null))
.Cast<T>();
public override bool Equals(object obj)
{
if (obj is not Enumeration otherValue)
{
return false;
}
var typeMatches = GetType().Equals(obj.GetType());
var valueMatches = Id.Equals(otherValue.Id);
return typeMatches && valueMatches;
}
public int CompareTo(object other) => Id.CompareTo(((Enumeration)other).Id);
// Other utility methods ...
}
이 클래스는 다음과 같이 엔터티 또는 값 개체의 형식으로 사용할 수 있습니다 CardTypeEnumeration .
public class CardType
: Enumeration
{
public static CardType Amex = new(1, nameof(Amex));
public static CardType Visa = new(2, nameof(Visa));
public static CardType MasterCard = new(3, nameof(MasterCard));
public CardType(int id, string name)
: base(id, name)
{
}
}
추가 리소스
지미 보가드. 열거형 클래스
https://lostechies.com/jimmybogard/2008/08/12/enumeration-classes/스티브 스미스. C#의 열거형 대체 옵션
https://ardalis.com/enum-alternatives-in-cEnumeration.cs. eShopOnContainers의 기본 열거형 클래스
https://github.com/dotnet-architecture/eShopOnContainers/blob/dev/src/Services/Ordering/Ordering.Domain/SeedWork/Enumeration.csCardType.cs. eShopOnContainers의 샘플 열거형 클래스입니다.
https://github.com/dotnet-architecture/eShopOnContainers/blob/dev/src/Services/Ordering/Ordering.Domain/AggregatesModel/BuyerAggregate/CardType.csSmartEnum. Ardalis - .NET에서 강력한 형식의 스마트 열거형을 생성하는 데 도움이 되는 클래스입니다.
https://www.nuget.org/packages/Ardalis.SmartEnum/
.NET