2013-06-24 5 views
0

나는 모두 BaseEntity에서 상속받는 5 가지 클래스가 있습니다. 이 5 개의 클래스 중 하나에 필요한 정보와 다른 식별자를 저장하는 새로운 모델 클래스를 만들고 싶습니다.유형에 따라 객체 반환

데이터베이스에서이 새 모델의 데이터를 검색 할 때 데이터베이스에서 참조 할 수있는 항목을 나타내는 정수와 함께 클래스 유형의 문자열을 얻습니다.

예를 들어 Id = 2를 검색하면 Type = "BaseBall"입니다. 즉, BaseBallService를 사용하여 Id == 2 인 항목을 가져올 필요가 있음을 의미합니다. Id = 2, Type = "BasketBall"일 경우 BasketBallService를 사용합니다.

현재 생각할 수있는 유일한 해결책은 '유형'문자열을 평가하는 if 문을 여러 개 가지는 것입니다. 유형이 유효한 유형 (BaseBall, FootBall, BasketBall 등)과 일치하는지 여부에 따라 해당 오브젝트가 리턴됩니다.

모델 정의에서 5 가지 유형을 모두 정의 할 필요없이이 작업을 쉽게 식별 할 수있는 방법이 있습니까?

이 문제를 명확하게 파악했으면 좋겠습니다. 추가 정보가 필요한지 알려주십시오. 아직 어떤 코드도 작성하지 않았습니다. 나는 단지 문제를 분석하고 해결책을 제시하려고하고있다.

+1

제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –

+2

뭔가 잘못 설계된 것 같습니다. 왜이 "유형"정보가 필요합니까? 데이터베이스에서 무언가를 얻으면 무엇을 얻고 싶고 어떤 유형인지 알고 있어야합니다. –

+0

@WojciechKulik, 형식 및 ID를 포함하는 테이블은 참조 테이블입니다. 목표는 기존 유형 중 하나 (BasketBall, BaseBall 등)로 인해 생성되는 새로운 양식을 만드는 것입니다. 이 형식은이 유형 중 하나에서 발생할 수 있으므로 어떤 형식인지 알아야합니다. – Alex

답변

1

프로젝트 또는 솔루션 수준에서 유형을 저장하기 위해 전역 열거 형을 추가하기 만하면됩니다. 그렇게하면 나중에 기존 코드를 분리하지 않고 추가 할 수 있습니다. 그러나 이렇게하면 형식이 잘 유지되어 최종 사용자 또는 응용 프로그램에서 나열된 형식을 요구할 수 있습니다. 나는 이것을 보여주기 위해 간단한 콘솔 앱을 만들었다. 열거 형을 일반 클래스가 아닌 모든 클래스에 적용 할 수 있습니다. 또한 반환 목록을 좁혀서 내 목록을 쉽게 가져올 수있는 방법을 보여주는 반환 방법을 구현합니다.

public enum types 
    { 
     Type1, 
     Type2, 
     Type3 
    } 

    public class GenericListing 
    { 
     public string Description { get; set; } 
     public types Type { get; set; } 
    } 

    class Program 
    { 
     public static List<GenericListing> GetTypeListing(List<GenericListing> aListings, types aTypes) 
     { 
      return aListings.Where(x => x.Type == aTypes).ToList(); 
     } 

     static void Main(string[] args) 
     { 
      var stuff = new List<GenericListing> 
       { 
        new GenericListing {Description = "I am number 1", Type = types.Type1}, 
        new GenericListing {Description = "I am number 2", Type = types.Type2}, 
        new GenericListing {Description = "I am number 3", Type = types.Type3}, 
        new GenericListing {Description = "I am number 1 again", Type = types.Type1}, 
       }; 


      string s = ""; 

      GetTypeListing(stuff, types.Type1) // Get a specific type but require a well typed input. 
       .ForEach(n => s += n.Description + "\tType: " + n.Type + Environment.NewLine); 

      Console.WriteLine(s); 

      Console.ReadLine(); 
     } 
    } 
1

예를 들어 사전을 사용해 볼 수 있습니다.

Dictionary<String, BaseEntry> types = new Dictionary<String, BaseEntry>() { 
    {"BaseBall", new BaseBallService()}, 
    {"BasketBall", new BasketBallService()}, 
    ... 
    } 

    ... 
    var value = types["BaseBall"].GetId(2); 
관련 문제