개발 환경은 SQL Server 2008 데이터베이스 및 Entity Framework가있는 C# 3.5입니다.확장 성이 뛰어난 프로젝트의 설계 질문 - 모범 사례를 염두에두고
소프트웨어에서 제어해야하는 제 3자가 작성한 실제 전자 기호를 나타내는 Sign이라는 클래스와 테이블이 있다고 가정 해보십시오. 또한 SignDriver라는 클래스가 실제로 징후와 통신하는 것을 담당합니다. Sign의 속성/열은 신호와 올바르게 대화하기 위해 Sign Driver가 필요로하는 구성 가능한 정보를 나타냅니다.
모든 것이 훌륭하며 뒷면에서 자신을 아주 철저하게 가볍게 두드렸다. 그렇다면 다른 표식과 대화하는 것이 필요합니다. 그러나이 기호는 이전 기호와 다르게 작동하며 Sign 클래스와 테이블에 추가 정보를 저장해야합니다. 5 가지 새로운 항목 (열/속성)을 저장해야한다고 가정 해 보겠습니다. 그러나 불행히도 첫 번째 유형의 기호는이 5 가지를 필요로하지 않습니다. 그런 다음 각 유형의 부호 10 개를 제어하려고 할 때 테이블에 많은 NULL 값이 있음을 알게됩니다.
귀하의 도메인 모델은 귀하가 문제가되는 도메인의 다른 부분을 대표하고 데이터베이스의 해당 테이블이있는 Sign과 같은 클래스가 생길 때까지 커집니다. 각 학급은 유형의 공통 정보를 수집하는 것과 동일한 문제를 겪지 만 각 유형의 전문 분야는 전혀 수용하지 않습니다.
문제의 본질은 더 많은 유형의 제어 할 수있는 표지뿐만 아니라 더 많은 유형의 다른 엔티티를 수용한다는 것을 의미합니다. 좀 더 확장 가능한 모델이 필요합니다.
이와 같은 시스템에서 앞으로 나아갈 수있는 최선의 방법은 무엇입니까 ??
필자는 동료들과 마침내 이것을 논의했으며, 이와 같은 문제에 접근하는 가장 좋은 방법이 무엇인지 알고 싶습니다. 특히 그것은 많은 사람들이 과거에 직면했을 것 같은 문제처럼 보입니다.
아래는 각각에 대해 우리가 왔어요 옵션과 몇 가지 포인트입니다
- 만들기 N와 1-1 관계를 공유하는 각 개체에 대한 '유형'클래스와 테이블의 번호입니다.
- Very inheritance-y.
- 연장 할 때 대부분의 시간이 소요됩니다.
- 많은 테이블.
- 키 - 값 쌍을 보유 할 각 엔터티에 대해 하나의 '확장 속성'테이블을 만듭니다.
- 참조 무결성.
- 확장 가능.
- 하나의 글로벌 '확장 속성'테이블을 만들어 ANY 엔티티의 속성을 저장하십시오. (스키마 : entityType, entityId, key, value, dataType)
- 슈퍼 확장 가능.
- 기존 테이블과 참조 무결성을 가질 수 없습니다.
- Entity Framework에서 잘 처리 할 수없는 것처럼 보입니다.
당신은 어떻게 할 건데 왜?
도움을 주시면 감사하겠습니다. 건배.
와우 ... 헤드 퍼스트 디자인 패턴의 '오리'예제처럼 들립니다. 위키에는 확장 성 패턴에 대한 정보가 있습니다. http://en.wikipedia.org/wiki/Extensibility_pattern – IAbstract
hehe 나는 단지 그것을 읽고 그것들은 비슷합니다, 참고를위한 감사합니다 – andrej351