본문으로 건너뛰기

API 레퍼런스

이 부록은 Functorium ArchitectureRules의 전체 API를 한눈에 참조할 수 있도록 정리한 레퍼런스입니다. 튜토리얼 학습 중 특정 메서드의 사용법이나 파라미터를 빠르게 확인할 때 활용하세요.

TypeValidator<Class, ClassValidator>를 상속하며, 클래스 수준의 아키텍처 규칙을 검증합니다.

메서드설명
RequirePublic()public 클래스여야 함
RequireInternal()internal 클래스여야 함
메서드설명
RequireSealed()sealed 클래스여야 함
RequireNotSealed()sealed가 아니어야 함
RequireStatic()static 클래스여야 함
RequireNotStatic()static이 아니어야 함
RequireAbstract()abstract 클래스여야 함
RequireNotAbstract()abstract가 아니어야 함
메서드설명
RequireRecord()record 타입이어야 함
RequireNotRecord()record가 아니어야 함
메서드설명
RequireAttribute(string attributeName)지정된 어트리뷰트가 있어야 함
메서드설명
RequireInherits(Type baseType)특정 기반 클래스를 상속해야 함
RequireImplements(Type interfaceType)특정 인터페이스를 구현해야 함
RequireImplementsGenericInterface(string name)제네릭 인터페이스를 구현해야 함
메서드설명
RequirePrivateAnyParameterlessConstructor()private 무매개변수 생성자가 있어야 함
RequireAllPrivateConstructors()모든 생성자가 private이어야 함
메서드설명
RequireProperty(string propertyName)특정 속성이 존재해야 함
RequireNoPublicSetters()public setter가 없어야 함
RequireNoInstanceFields()인스턴스 필드가 없어야 함
RequireOnlyPrimitiveProperties(params string[])원시 타입 속성만 허용
메서드설명
RequireNestedClass(string name, Action<ClassValidator>?)중첩 클래스가 있어야 함 (선택적 검증)
RequireNestedClassIfExists(string name, Action<ClassValidator>?)존재할 경우만 검증
메서드설명
RequireImmutable()ImmutabilityRule 적용 (6차원 불변성 검증)

TypeValidator<Interface, InterfaceValidator>를 상속하며, 인터페이스 수준의 규칙을 검증합니다.

TypeValidator에서 상속받은 메서드를 사용합니다 (네이밍, 메서드 검증, 의존성 등).

메서드 수준의 시그니처 검증을 수행합니다.

메서드설명
RequireVisibility(Visibility)특정 가시성이어야 함
RequireStatic()static 메서드여야 함
RequireNotStatic()static이 아니어야 함
RequireVirtual()virtual 메서드여야 함
RequireNotVirtual()virtual이 아니어야 함
RequireExtensionMethod()확장 메서드여야 함
메서드설명
RequireReturnType(Type)특정 반환 타입이어야 함 (open generic 지원)
RequireReturnTypeOfDeclaringClass()선언 클래스 타입을 반환해야 함
RequireReturnTypeOfDeclaringTopLevelClass()최상위 클래스 타입을 반환해야 함
RequireReturnTypeContaining(string)반환 타입 이름에 문자열이 포함되어야 함
메서드설명
RequireParameterCount(int)정확한 파라미터 수
RequireParameterCountAtLeast(int)최소 파라미터 수
RequireFirstParameterTypeContaining(string)첫 번째 파라미터 타입에 문자열 포함
RequireAnyParameterTypeContaining(string)임의의 파라미터 타입에 문자열 포함

ClassValidator와 InterfaceValidator가 상속하는 공통 기반 클래스입니다.

메서드설명
RequireNameStartsWith(string prefix)이름이 접두사로 시작해야 함
RequireNameEndsWith(string suffix)이름이 접미사로 끝나야 함
RequireNameMatching(string regex)이름이 정규식과 일치해야 함
메서드설명
RequireNoDependencyOn(string typeNameContains)특정 타입에 의존하지 않아야 함
메서드설명
RequireMethod(string name, Action<MethodValidator>)특정 메서드를 검증
RequireMethodIfExists(string name, Action<MethodValidator>)존재할 경우만 검증
RequireAllMethods(Action<MethodValidator>)모든 메서드를 검증
RequireAllMethods(Func<MethodMember, bool>, Action<MethodValidator>)필터된 메서드를 검증
메서드설명
Apply(IArchRule<TType> rule)커스텀 규칙 적용

진입점 (ArchitectureValidationEntryPoint)

섹션 제목: “진입점 (ArchitectureValidationEntryPoint)”
확장 메서드설명
ValidateAllClasses(Architecture, Action<ClassValidator>, bool verbose)IObjectProvider<Class> 확장
ValidateAllInterfaces(Architecture, Action<InterfaceValidator>, bool verbose)IObjectProvider<Interface> 확장

반환 타입: ValidationResultSummary

메서드설명
ThrowIfAnyFailures(string ruleName)위반 시 ArchitectureViolationException 발생
public interface IArchRule<in TType> where TType : IType
{
string Description { get; }
IReadOnlyList<RuleViolation> Validate(TType target, Architecture architecture);
}
// 람다 기반 커스텀 규칙
var rule = new DelegateArchRule<Class>(
"Rule description",
(target, architecture) => {
// 검증 로직
return violations; // IReadOnlyList<RuleViolation>
});
// 여러 규칙을 AND로 합성
var composite = new CompositeArchRule<Class>(rule1, rule2, rule3);
// Description: "rule1 AND rule2 AND rule3"
public sealed record RuleViolation(
string TargetName, // 위반 대상 타입의 전체 이름
string RuleName, // 규칙 이름
string Description); // 위반 설명
차원검증 내용
쓰기 가능성비정적 멤버가 불변이어야 함
생성자public 생성자가 없어야 함
속성public setter가 없어야 함
필드public 비정적 필드가 없어야 함
컬렉션가변 컬렉션 타입 금지 (List, Dictionary 등)
메서드public 비정적 메서드는 허용 목록만 가능

허용되는 메서드: Equals, GetHashCode, ToString, Create, Validate, 연산자, Getter 메서드

사전 구축된 테스트 스위트로, 상속만으로 검증된 아키텍처 규칙을 즉시 적용합니다.

도메인 레이어의 DDD 전술 패턴을 검증하는 21개 테스트를 제공합니다.

추상 프로퍼티 (필수 오버라이드)

섹션 제목: “추상 프로퍼티 (필수 오버라이드)”
프로퍼티타입설명
ArchitectureArchitectureArchLoader로 로딩한 어셈블리 아키텍처
DomainNamespacestring도메인 타입이 위치하는 루트 네임스페이스

가상 프로퍼티 (선택적 오버라이드)

섹션 제목: “가상 프로퍼티 (선택적 오버라이드)”
프로퍼티기본값설명
ValueObjectExcludeFromFactoryMethods[]Create/Validate 팩토리 메서드 검증에서 제외할 ValueObject 타입
DomainServiceAllowedFieldTypes[]DomainService의 RequireNoInstanceFields에서 허용할 필드 타입
카테고리테스트검증 내용
EntityAggregateRoot_ShouldBe_PublicSealedClasspublic sealed, not static
EntityAggregateRoot_ShouldHave_CreateAndCreateFromValidatedCreate/CreateFromValidated 정적 팩토리 메서드
EntityAggregateRoot_ShouldHave_GenerateEntityIdAttribute[GenerateEntityId] 어트리뷰트
EntityAggregateRoot_ShouldHave_AllPrivateConstructors모든 생성자 private
EntityEntity_ShouldBe_PublicSealedClasspublic sealed, not static (AggregateRoot 제외)
EntityEntity_ShouldHave_CreateAndCreateFromValidatedCreate/CreateFromValidated 정적 팩토리 메서드
EntityEntity_ShouldHave_AllPrivateConstructors모든 생성자 private
ValueObjectValueObject_ShouldBe_PublicSealedWithPrivateConstructorspublic sealed + private 생성자
ValueObjectValueObject_ShouldBe_ImmutableImmutabilityRule 6차원 불변성
ValueObjectValueObject_ShouldHave_CreateFactoryMethodCreate → Fin<T> 반환
ValueObjectValueObject_ShouldHave_ValidateMethodValidate → Validation<Error, T> 반환
DomainEventDomainEvent_ShouldBe_SealedRecordsealed record
DomainEventDomainEvent_ShouldHave_EventSuffix”Event” 접미사
SpecificationSpecification_ShouldBe_PublicSealedpublic sealed
SpecificationSpecification_ShouldInherit_SpecificationBaseSpecification<T> 상속
SpecificationSpecification_ShouldResideIn_DomainLayer도메인 네임스페이스 내 위치
DomainServiceDomainService_ShouldBe_PublicSealedpublic sealed
DomainServiceDomainService_ShouldBe_Stateless인스턴스 필드 없음 (허용 타입 제외)
DomainServiceDomainService_ShouldNotDependOn_IObservablePortIObservablePort 의존 금지
DomainServiceDomainService_PublicMethods_ShouldReturn_Finpublic 인스턴스 메서드 Fin<T> 반환
DomainServiceDomainService_ShouldNotBe_Recordrecord 타입 아님

애플리케이션 레이어의 Command/Query 구조를 검증하는 4개 테스트를 제공합니다.

추상 프로퍼티 (필수 오버라이드)

섹션 제목: “추상 프로퍼티 (필수 오버라이드)”
프로퍼티타입설명
ArchitectureArchitectureArchLoader로 로딩한 어셈블리 아키텍처
ApplicationNamespacestring애플리케이션 타입이 위치하는 루트 네임스페이스
테스트검증 내용
Command_ShouldHave_ValidatorNestedClassCommand에 Validator가 있으면 sealed + AbstractValidator 구현
Command_ShouldHave_UsecaseNestedClassCommand에 Usecase 필수, sealed + ICommandUsecase 구현
Query_ShouldHave_ValidatorNestedClassQuery에 Validator가 있으면 sealed + AbstractValidator 구현
Query_ShouldHave_UsecaseNestedClassQuery에 Usecase 필수, sealed + IQueryUsecase 구현

다음 부록에서는 ArchUnitNET의 핵심 API를 빠르게 참조할 수 있는 치트시트를 제공합니다.

부록 B: ArchUnitNET 치트시트