우리는 여러 모듈을 가진 대기업 응용 프로그램의 디자인 초기 단계에 있습니다. 요구 사항 중 하나는 응용 프로그램이 데이터베이스 독립적이어야하며 SQL Server, Oracle, MySQL 및 DB2를 지원해야한다는 것입니다.데이터베이스 독립성
필자가 웹에서 읽었던 데이터베이스 독립성은 매우 나쁜 생각입니다. 유지 관리하기 어려운 코드, 지원되는 모든 DBMS에서 가장 일반적인 기능을 갖춘 데이터베이스 디자인, 나쁜 성능 및 나쁜 확장 성. 내 개인적인 직감은 다른 기능보다이 기능의 복잡성이 기하 급수적으로 개발 비용과 시간을 증가시킬 수 있다는 것입니다. 코드가 무서울 것입니다.
하지만 아무도이 기능을 무시하도록 설득 할 수 없습니다. 문제는이 문제에 대한 대부분의 데이터가 경험적 데이터이며 사례를 뒷받침하는 숫자가 부족하다는 것입니다. 누구든지 문제에 대한 숫자 지원 데이터를 공유 할 수 있다면 고맙겠습니다.
가능한 디자인 옵션 중 하나는 각 DBMS에 대한 공급자가있는 데이터베이스 계층에 Entity 프레임 워크를 사용하는 것입니다. 내 개인적인 느낌은 엔티티 프레임 워크에서 생성 된 SQL에 대한 제어권이 없으므로 ORM을 사용하지 않고 수동으로 SQL 문을 작성하는 것이고 데이터베이스 독립 시나리오는 DBMS를 기반으로하는 일부 SQL 조정이 필요하다는 것입니다. 타사 엔티티 프레임 워크 공급자는 응용 프로그램에 포함될 복잡한 시나리오에만 나타나는 상당한 양의 버그가있을 것이라고 생각합니다. 이전에 데이터베이스 독립적 인 시나리오를 위해 엔티티 프레임 워크를 사용 해본 경험이있는 사람이라면 누구든 환영합니다.
또한 팀에서 논의한 가능성 중 하나는 첫 번째 반복에서 하나의 DBMS (예 : SQL Server)를 지원 한 다음 연속 반복에서 다른 DBMS에 대한 지원을 추가하는 것입니다. 첫 번째 DBMS 코드를 작성하기 전에 모든 데이터베이스의 모든 기능을 알아야하기 때문에 최소한의 공통 기능을 갖춘 데이터베이스 설계가 필요하기 때문에이 개발 전략은 나쁘다고 생각합니다. 나는이 가능성에 대해서도 당신으로부터 듣고 싶습니다.
"어떤 ORM하지 않고 수동으로 SQL 문을 작성하는 것이 다릅니다 것을 캡슐화 : 요약
는 데이터베이스에 독립적 애플리케이션을 설계하는 것은 단순한 교훈의 확장 데이터베이스 독립 시나리오는 약간의 SQL 조정이 필요합니다. " Au contraire, ORM이 당신을 위해 무엇을 할 것인가에 대한 질문입니다. 좋은 ORM은 대상이되는 데이터베이스에 대해 적절한 SQL을 생성 할 것이므로 조정할 필요가 없습니다. 복잡한 질의가있는 경우 필요한 EF 공급자를 사용하여 몇 가지를 테스트하지 않는 것이 어떻습니까? 그들에게 "그냥 잘가는 것보다 시험해보세요. 버그가 생길 것입니다. 오, 그렇습니다. 수공예품의 SQL로 돌아 가세요!" – itowlson