는
이 새로운 최소한의 런타임 AOP 프레임 워크 (있는 내가 적극적 일) 도메인 어셈블리를 결합하지 않고 당신이 AOP에 의해 검증을 관리하는 데 도움이 될 수 있습니다 NConcern AOP Framework을보십시오.
유효성 검사 어셈블리에 고유 한 유효성 검사 특성을 정의하고 유효성 검사를 수행하는 방법을 정의하십시오.
정의하는 사용자 정의 속성/(검증 사이의 링크를 이메일
[AttributeUsage(AttributeTargets.Property)]
public class Email : Attribute
{
//validation method to use for email checking
static public void Validate(string value)
{
//if value is not a valid email, throw an exception!
}
}
검증 측면 다른 어셈블리에 코드 계약
//Validation aspect handle all my validation custom attribute (here only email)
public class EmailValidation : IAspect
{
public IEnumerable<IAdvice> Advise(MethodInfo method)
{
yield return Advice.Before((instance, arguments) =>
{
foreach (var argument in arguments)
{
if (argument == null) { continue; }
Email.Validate(argument.ToString());
}
});
}
}
도메인 어셈블리
public class Customer
{
[Email]
public string Login { get; set; }
}
을 확인하는 식별 및 도메인
//attach validation to Customer class.
foreach (var property in typeof(Customer).GetProperties())
{
if (property.IsDefined(typeof(Email), true))
{
Aspect.Weave<Validation>(property.GetSetMethod(true));
}
}
유효성 확인은 언제 수행해야합니까? @ setter를 사용하면 AOP를 사용해야합니다. 무료 인 Fody (https://github.com/Fody/Fody)를 살펴볼 수 있습니다. 인프라 구성 요소와의 연결에 대한 우려가 줄어들 수도 있습니다. 어쨌든 나는 물어야한다 : 당신은 더 많은 코드를 가지고 그것을 지불하고 계속해서 유지 관리 하겠는가 아니면 인프라 구성 요소에 의존하여 개발 속도를 높이고 버그 가능성을 줄이겠는가? 인프라 구성 요소는 무엇이며 그렇지 않은 구성 요소는 무엇입니까? 당신은 VS에 의지합니까 아니면 커플 링이 당신을 너무 괴롭히기 때문에 (모든) 텍스트 편집기를 사용합니까? ;-) – BatteryBackupUnit