제가 구축하게 될 소프트웨어에는 서로 다른 상태간에 "응용 프로그램"전환이 필요합니다. 특정 작업은 응용 프로그램의 상태에 따라 수행 할 수 있습니다. 나는 상태로열거 형 vs 조회 테이블 vs 열거 형 반사 vs 상태 패턴
public class Application
{
public int Id {get;set;}
public Status {get;set;}
}
public enum Status
{
[Description("New")]New = 1, [Description("Closed")]Closed = 2
}
을 열거 사용에 대한 생각하지만 나는 어쩌면 상태/업데이트 재 주문 자주에서
table status (id int pk, desc string, sort_order int)
table application (id int pk, status_id int fk)
을 얻을 않는 한 데이터베이스에서 조회 테이블을 사용하는 것이 좋은 생각 내 경우처럼 할 일이 필요합니다.
if (application.Status == Status.New)
{ //do something }
else if (application.Status == Status.Closed)
{ //do other things }
위와 같은 경우가 enum과 더 쉽다고 생각합니다. 그러나 상태 정렬 순서 또는 설명을 업데이트 할 때 매우 어려울 것입니다.
조회 테이블의 값을 기반으로 동적으로 열거 형을 생성하려면 리플렉션을 사용해야합니까? 아니면 상태 패턴을 사용해야합니까? enum relfection에서 볼 수있는 문제는 성능에 미치는 영향입니다. 그리고 상태 패턴은 많은 중복 코드를 생성 할 수 있습니다.
당신은 어떻게 생각하십니까? 미리 감사드립니다!
캐스트로 응용 프로그램 상태를 저장하거나 열거 또는 조회 테이블을 필요로하는 내가 우아한 솔루션이 표시되지 않는
비트 만약 내가 3 답변에서 언급 한대로 다른 문장없이? – Jeff
문제를 이해하는 데 어려움이 있습니다. Status 객체에는 필요한 경우 하드 배선 된 캐스트를 포함하여 원하는 모든 코드가 포함될 수 있습니다. Application 개체는 동일하게 유지 될 수 있습니다. 내부 상태와 다른 호출을 디스패치합니다. –
내 문제는 어떻게 당신의 예제에서 정확한 상태에있는 객체에 데이터 테이블을 다시 캐스팅 할 때 다른 문장이 쓰여지는 것을 피하는 것입니다. else statment없이 StatusZero 또는 StatusOne에 어떻게 데이터 행을 다시 캐스팅합니까? – Jeff