1

내 Django 응용 프로그램에서 "type"이라는 필드가있는 모델 (Foo라고 부름)이 있습니다. Foo의 특정 인스턴스가 어떤 유형인지 나타내는 Foo.type을 사용하고 싶습니다 ("숫자", "날짜", "텍스트의 단일 행", "여러 줄의 텍스트"및 기타) .웹 MVC 프레임 워크에서 전략 패턴을 올바르게 구현하는 방법은 무엇입니까?

"유형"필드가 영향을 미치기를 바라는 두 가지가 있습니다. 값이 일반 유형에서 텍스트로 변환되는 방식 (예 : "Date"에서는 str(the_date.isoformat()) 일 수 있음) 및 텍스트에서 지정된 유형 ("Date"의 경우, 값이 datetime.date.fromtimestamp(the_text) 일 수 있음)으로 변환되는 방식).

나에게 이것이 전략 패턴처럼 보입니다. (나는 완전히 틀릴 수도 있고, 저라면 제게 고쳐 주셔도됩니다.) 내 질문은, 웹 MVC 프레임 워크에서 이것을 코딩하는 적절한 방법은 무엇입니까?

클라이언트 측 응용 프로그램에서는 "serialize()"및 "unserialize()"추상 메서드가있는 Type 클래스를 만들고 Type의 하위 클래스 (NumberType 및 DateType 등)의 메서드를 재정의하고 동적으로 새로 인스턴스화 된 Foo의 "type"필드를 런타임에 적절한 Type 서브 클래스로 설정하십시오.

웹 프레임 워크에서 나에게 그리 쉽지 않습니다. 가장 현명한 방법은 Foo.type을 Small Integer 필드로 정의하고 한정된 선택 세트를 정의하는 것입니다 (0 = "Number", 1 = "Date", 2 = "Single Line of Text" 등). 그런 다음 Foo 객체가 인스턴스화되면 Factory 메소드를 사용하여 인스턴스의 "type"필드 값을보고 올바른 Type 하위 클래스 (위 단락에서 설명한대로)를 연결합니다. Foo는 serialize() 및 unserialize() 메소드도 가질 수 있습니다.이 메소드는 플러그인 유형 하위 클래스에 직접 위임합니다.

이 디자인의 사운드는 어떻습니까? 나는 이전에이 문제를 겪어 보지 못했습니다. 그래서 다른 사람들이 가지고 있는지, 어떻게 해결했는지 알고 싶습니다.

답변

0

장고 ORM이 제공하는 상속 내용을 살펴볼 수 있습니다. 모델 등을 판별 기, 다른 테이블/w

Foo # base 
DateFoo(Foo) 
OtherFoo(Foo) 

등 무엇이든 이것은 내가이 솔루션에 대한 100 % 아니지만, 내가주의입니다 ... 당신에게

+0

을 실제로 서브 클래 싱 할 수있는 방법을 제공합니다 내가 원하는 각각의 새로운 유형에 대해 Foo를 서브 클래 싱한다. 나는 강한 이유가 없기 때문에,이 상황에서 제대로 느끼지 못합니다. 나는 그것을 염두에 두겠다. 답장을 보내 주셔서 감사합니다. – jakeboxer

관련 문제