나는 클래스가 있습니다.객체/클래스 디자인 질문
위의 내용이 맞습니까? 아니면 다른 속성이 필요하기 때문에 이름 필터와 성 필터를 구분해야합니까? Coz 제 생각에는이 클래스에 데이터를 입력 할 때 일부 비즈니스 규칙을 적용해야합니다.
하십시오 조언, 감사
나는 클래스가 있습니다.객체/클래스 디자인 질문
위의 내용이 맞습니까? 아니면 다른 속성이 필요하기 때문에 이름 필터와 성 필터를 구분해야합니까? Coz 제 생각에는이 클래스에 데이터를 입력 할 때 일부 비즈니스 규칙을 적용해야합니다.
하십시오 조언, 감사
열거은 종종 당신의 디자인은 꽤 괜찮없는 코드 냄새입니다. 이 경우 제외 목록 기능을 기본 클래스로 리팩터링 한 다음 성과 이름 필터에 별도의 파생 클래스를 추가하여 더 효과적으로 수행 할 수 있습니다. 성 필터는 제네릭 필터와 다른 것은 수행하지 않지만 이름 필터는 시작 문자를 검사합니다. FirstNameFilter
, LastNameFilter
, PhoneNumberFilter
등 - 당신이 거기에있어이 각각 완전히 ApplyFilter()
의 자신의 버전을 구현하는 것이 정의 IFilterCondition에서 상속 여러 클래스를 가질 수있는 가장 나을 것 같다 무엇을 찾고
interface IFilterCondition
{
List<Name> ApplyFilter(List<Name> namesToFilter);
}
abstract class FilterName : IFilterCondition
{
public List<Name> ExcludeList { get; set; }
public virtual List<Name> ApplyFilter(List<Name> namesToFilter)
{
// Check Exclude List
return namesToFilter;
}
}
class FilterFirstName : FilterName
{
public char StartCharacter{ get; set; }
public override List<Name> ApplyFilter(List<Name> namesToFilter)
{
namesToFilter = base.ApplyFilter(namesToFilter);
// Check Start Character
return namesToFilter;
}
}
class FilterLastName : FilterName
{
}
코드를 저장하려면 유사한 논리를 다시 정의하여 필터를 정의해야하는 경우 작성한 구체적인 구현에서 간단히 파생시킬 수 있습니다. 예를 들어, 해당 문자를 정의한 StartCharacterFilter
을 가지고 있고 ApplyFilter()
메서드에서 목록을 자르면 은 ApplyFilter()
을 단순히 재정의하고 기본 구현을 호출하고 결과를 자체 논리로 전달합니다.
이것은 부적절한 인수 분해처럼 보입니다. 필터는 분명히 enum 값과 강하게 결합되어 있으며 유형에 따라 필요한 특정 기준이 결정되고 해당 데이터 값이 단일 클래스로 뒤죽박죽으로 전달됩니다.
각각 내에 포함 된 관련 데이터 만 사용하여 별도의 필터 클래스를 갖는 것이 "순수"합니다. 변경 사항을 적용하면 열거 형을 제거 할 수 있습니다.
그래서 데이터베이스 디자인 측면에서 각 개체를 개별 테이블로 저장해야합니까? firstnamefilter 테이블 및 lastnamefilter 테이블과 마찬가지로? – Joshscorp
아니요, 저는 데이터베이스에 enum 유형 접근 방식을 사용합니다. 그 맥락에서 괜찮을 것입니다. –