2009-03-05 4 views
3

SQL Data Services flexible entity model을 구현하는 "최상의"방법을 생각해 내려고합니다. 각 클래스는 실체로, 심지어 클래스가없는 클래스로도 저장 될 수 있습니다.* 서로 다른 * 필드의 각 하위 클래스에서 구현해야하는 속성을 적용하는 가장 좋은 방법은 무엇입니까?

예 : 모든 서브 클래스는 내가 수집의 어떤 종류 등이있다 (위)와 엔티티 클래스와 기본 클래스를 모두 갖는 방향으로 향하고, 지금까지

string Id 
string Kind 
Dictionary<string, object> Properties 

다른 있다

Dictionary<string, Entity> data 

그리고 각각의 서브 클래스가

data["EntityKind"].Properties["PropertyName"] 
같은 일련의 속성을 그 사전에 추가하고 단지/얻을 수 있습니다

그러나 각 클래스에는 하나의 엔티티 만 있기 때문에 계층 구조의 각 수준이 정확히 어디에 있는지 정확히 알고있는 일종의 스택 (사전 형 식)을 사용해야하는 것처럼 보입니다. 그런 다음 클래스 상속이 스택이라는 사실이 나에게 발생했기 때문에 모든 것을 단순화하는 몇 가지 방대한 OO 개념이 누락되었다고 생각했습니다. 뭔가 같은 것

abstract eachsubclassmusthaveitsown Entity entity 

답변

3

각 클래스는 엔티티이며 일부 엔티티 메타 데이터와 연결하려고합니까?

Attributes 같은 소리가 가장 좋습니다.

엔티티를 설명하는 데 필요한 메타 데이터를 저장할 멤버가있는 EntityAttribute 클래스를 정의 할 수 있습니다. 그러면 엔티티 클래스에 [Entity]로 태그를 지정할 수 있습니다. 모든 필드가 필수이면 속성 클래스에 전달할 값이 필요한 단일 생성자를 지정하십시오.

그런 다음 리플렉션을 사용하여 엔티티 클래스를 찾습니다. 해당 검색 프로세스를 한 번 수행 한 다음 캐시해야하므로 리플렉션의 성능이 문제가되지 않아야합니다.

+0

흥미 롭습니다. 더 많이 확장 할 수 있습니까? 엔티티와의 유일한 연관성은 속성을 통한 것인가, 그렇지 않습니까? 단점은 리플렉션을 사용하여 엔티티로 변환해야한다는 것입니다. 많은 사람들이 서버 측 앱에서 사용하기에는 너무 느리다는 말입니까? –

+0

처음 문장에 물음표가 나타났습니다. 그렇습니다. 각 클래스는 엔티티로 저장할 수 있습니다. –

+1

리플렉션이 "느립니다"라는 제안에주의하십시오. 메소드 호출보다 10 배 또는 100 배 느릴 수 있지만 메소드 호출은 매우 빠릅니다. –