회사를 추적하는 시스템을 구축 중입니다. 해당 회사에는 연락처가 있습니다. 이러한 담당자는 종종 청구 / 지불, 판매, 주문 및 고객 지원과 같은 특정 유형의 질문에만 답변하는 전문가입니다.
도메인 기반 디자인과 양파 아키텍처를 사용하여 다음 유형으로 모델링했습니다.
- 회사
- 연락처가 있습니다
- 접촉
- 접촉 유형이 있습니다
- ContactType (열)
- 회사 저장소 (인터페이스)
- EFCompanyRepository (외부 어셈블리에 정의되어 있으며 EntityFramework를 사용하며 CompanyRepository를 구현 함)
우리 팀은이 응용 프로그램의 데이터베이스를 모델링하는 방법에 대한 의견을 나누었습니다.
A면 : 린 DDDers :
- 연락처에 유효한 ContactType을 정의하는 것은 도메인의 역할입니다. 알 수없는 ContactType이 저장되지 않았 음을 검증하기 위해 데이터베이스에 테이블을 추가하는 것은 도메인 누출의 징후입니다. 논리가 너무 멀리 퍼져 있습니다.
- 데이터베이스와 해당 코드에 정적 테이블을 추가하는 것은 낭비입니다. 이 응용 프로그램에서 데이터베이스는 한 가지 문제를 해결합니다. 일을 유지하고 나에게 돌려줍니다. 여분의 테이블과 해당 CRUD 코드를 작성하는 것은 낭비입니다.
- 지속성 전략을 변경하는 것은 가능한 한 쉬워야합니다. 해당 비즈니스 규칙을 변경할 가능성이 높습니다. SQL Server 비용이 너무 많이 든다고 판단하면 스키마에 넣은 모든 유효성 검사를 다시 작성하지 않아도됩니다.
B면 : 전통 주의자 [아마도 공정한 이름은 아닐 것입니다. DBCentrists?] :
- 코드를 읽지 않고는 이해할 수없는 데이터를 데이터베이스에 저장하는 것은 좋지 않습니다. 보고서 및 기타 소비자는 값 목록 자체를 반복해야합니다.
- 필요에 따라 DB 유형 사전을로드하는 코드는별로 없습니다. 걱정하지 마십시오.
- 이 소스가 데이터가 아닌 코드 인 경우 변경 될 때 간단한 SQL 스크립트 대신 비트를 배포해야합니다.
어느 쪽도 옳고 그른 것은 아니지만, 초기 개발, 버그 등의 개발 시간을 세어 장기적으로는 더 효율적일 수 있습니다. 어느 쪽이 좋습니까? 이 스타일의 코드를 작성하는 다른 팀은 무엇을합니까?