당신의지도 원리는 스스로 반복하지 말아야합니다 :
소프트웨어 엔지니어링에서 DRY (Do n't Repeat Yourself)는 모든 종류의 정보 반복을 줄이고 특히 다중 계층 아키텍처에 유용한 소프트웨어 개발 원칙입니다. DRY 원칙은 "모든 지식은 시스템 내에서 하나의 명백하고 권위있는 표현을 가져야한다"고 명시되어 있습니다.
ORM은 본질적으로 응용 프로그램과 데이터 저장소 사이에 편안하게 앉아있는 추가 계층 (또는 원하는 경우 계층)입니다. 제약 조건은 ORM 또는 데이터 저장소 와 같은 한 곳에 있어야하며 , 그렇지 않으면 머지 않아 다른 버전을 유지 관리하게됩니다. 당신은 정말로 그렇게하고 싶지 않습니다.
그러나 실제로 대부분의 절반 정도의 ORM은 자동으로 데이터 스키마에서 많은 모델을 생성합니다. 여전히 중복이 있지만 중복 된 ORM 코드가 매번 동일한 패턴에 따라 생성되므로 유지 보수의 가능성이 최소화됩니다. 중복 코드가없는 것이 이상적이지만 자동으로 생성 된 제약 조건이 차선책입니다.
또한 한 곳에서 제약 조건 이 있다고해서 반드시 모든 제약 조건이 같은 장소에 있어야한다는 의미 는 아닙니다 . 참조 무결성 제한 조건과 같은 일부는 데이터 스토리지에 더 적합 할 수 있지만 (다른 데이터 스토리지로 이동하면 손실 될 수 있음) 일부는 대부분 복잡한 비즈니스 로직에 관한 것이 ORM에 더 적합합니다. 모든 사과를 같은 바구니에 두는 것이 바람직하지만…
실패
당신은 ORM 실패를 언급합니다. 그것은 귀하의 질문과 전혀 관련이 없으며, 응용 프로그램은 ORM과 데이터 저장소를 단일 엔티티로 생각해야합니다. 실패하면 실패하고 ORM을 우회하여 데이터 스토리지와 직접 대화하는 것은 좋지 않습니다 .
다른 것을 위해 ORM을 우회
또한 좋은 생각이 아닙니다. 그러나 여러 가지 이유로 발생할 수 있습니다.
ORM이 도입되기 전에 작성된 응용 프로그램의 레거시 부분.
그것은 힘든 일이며, 지금 당장 다루고있는 상황 이므로,“지속적인 지옥”에 대한 끊임없는 반복입니다. 비 ORM 부품을 계속 유지하거나 ORM을 사용하도록 다시 작성하십시오. 두 번째 옵션 은 처음에는 더 의미가 있지만, 애플리케이션의 해당 부분에서 정확히 수행하는 작업과 장기적으로 전체 재 작성의 가치에 따라 결정됩니다.
잘못 설계된 2 * 10 ^ 8 행 MySQL 테이블에서 키를 변경해보십시오 (다운 타임 없음). 내가 어디에서 왔는지 이해할 수 있습니다.
데이터 스토리지와 직접 통신해야하는 비 레거시 애플리케이션 부분 :
더 까다 롭습니다. ORM은 멋진 도구이며 거의 모든 것을 처리하지만 때로는 방해가되거나 전혀 쓸모가 없습니다. Buzzword (실제로 Buzzphrase)는 객체 관계형 임피던스 불일치 입니다. ORM이 관계형 데이터베이스가 수행하는 모든 작업을 기술적으로 불가능하게 만드는 것은 불가능합니다 .
코멘트
데이터 무결성의 관점에서 제약 조건은 반드시 데이터베이스에 있어야하고 애플리케이션에 있어야합니다. 웹 및 데스크톱 응용 프로그램, 모바일 응용 프로그램 또는 웹 서비스에서 응용 프로그램에 액세스하면 어떻게됩니까? – 루이즈 담
여기에 여분의 레이어를 추가하는 것이 매우 도움이되는 곳이며, 웹 애플리케이션에 대해 이야기하는 경우 REST API를 사용합니다. 지나치게 단순한 디자인 이에 대한은 다음과 같습니다
ORM은 API와 데이터 스토리지 사이에 있으며 API 뒤의 모든 것 (이를 포함하여)은 다양한 애플리케이션에서 단일 엔티티로 간주됩니다.