관리 / 클라이언트에게 ORM을 사용하는 이유에 대한 "프로"에게 동기를 부여하려면 그 이유는 무엇입니까?
가장 좋은 이유가 무엇인지 확인할 수 있도록 답변 당 하나의 이유를 유지하십시오.
관리 / 클라이언트에게 ORM을 사용하는 이유에 대한 "프로"에게 동기를 부여하려면 그 이유는 무엇입니까?
가장 좋은 이유가 무엇인지 확인할 수 있도록 답변 당 하나의 이유를 유지하십시오.
답변:
데이터 액세스를보다 추상적이고 이식 가능하게 만듭니다. ORM 구현 클래스는 공급 업체별 SQL을 작성하는 방법을 알고 있으므로 그럴 필요가 없습니다.
ORM을 사용하는 가장 중요한 이유는 풍부한 객체 지향 비즈니스 모델을 보유하면서도이를 저장하고 관계형 데이터베이스에 대해 효과적인 쿼리를 빠르게 작성할 수 있기 때문입니다. 제 관점에서는 작성할 수있는 고급 유형의 쿼리 외에 다른 생성 된 DAL과 비교할 때 좋은 ORM이 제공하는 실제 이점이 없습니다.
제가 생각하는 쿼리 유형 중 하나는 다형성 쿼리입니다. 간단한 ORM 쿼리는 데이터베이스의 모든 셰이프를 선택할 수 있습니다. 모양 모음을 다시 얻습니다. 그러나 각 인스턴스는 판별 자에 따라 정사각형, 원형 또는 직사각형입니다.
또 다른 유형의 쿼리는 단일 데이터베이스 호출에서 개체와 하나 이상의 관련 개체 또는 컬렉션을 열심히 가져 오는 쿼리입니다. 예를 들어 각 모양 객체는 해당 정점 및 측면 컬렉션이 채워진 상태로 반환됩니다.
다른 많은 사람들과 의견이 일치하지 않아서 미안하지만 코드 생성만으로는 ORM을 사용할 충분한 이유가 아니라고 생각합니다. ORM이 수행하는 개념적 또는 성능 오버 헤드가없는 코드 생성기를위한 좋은 DAL 템플릿을 많이 작성하거나 찾을 수 있습니다.
또는 ORM을 사용하기 위해 좋은 SQL을 작성하는 방법을 알 필요가 없다고 생각하는 경우 다시 동의하지 않습니다. 단일 쿼리를 작성하는 관점에서 ORM에 의존하는 것이 더 쉽다는 것은 사실 일 수 있습니다. 그러나 ORM을 사용하면 개발자가 쿼리가 ORM과 변환되는 SQL과 함께 작동하는 방식을 이해하지 못할 때 성능이 떨어지는 루틴을 만드는 것이 너무 쉽습니다.
여러 데이터베이스에 대해 작동하는 데이터 계층이 있으면 이점이 될 수 있습니다. 그래도 자주 의존해야하는 것은 아닙니다.
결국, 내 경험상 ORM의 고급 쿼리 기능을 사용하지 않는 경우 학습을 줄이고 CPU주기를 줄여 나머지 문제를 해결하는 다른 옵션이 있다는 것을 반복해야합니다.
오 예, 일부 개발자는 ORM으로 작업하는 것이 재미 있다고 생각하므로 ORM은 개발자를 행복하게 유지하는 관점에서도 좋습니다. =)
빠른 개발. 예를 들어 쿼리 결과 필드를 개체 멤버에 매핑하거나 그 반대로 매핑하는 것과 같은 반복적 인 코드를 제거합니다.
데이터 액세스 계층에서 비즈니스 규칙의 OO 캡슐화를 지원합니다. 어설픈 트리거 및 저장 프로 시저 언어 대신 선호하는 애플리케이션 언어로 비즈니스 규칙을 작성 (및 디버그) 할 수 있습니다.
기본 CRUD 작업을위한 상용구 코드 생성. 일부 ORM 프레임 워크는 데이터베이스 메타 데이터를 직접 검사하거나 메타 데이터 매핑 파일을 읽거나 선언적 클래스 속성을 사용할 수 있습니다.
추상화로 개발 중이므로 다른 데이터베이스 소프트웨어로 쉽게 이동할 수 있습니다.
내가 조사하는 이유는 VS2005의 DAL 도구 (스키마 매핑, TableAdapters)에서 생성 된 코드를 피하는 것입니다.
내가 1 년 이상 전에 만든 DAL / BLL은 다른 사람이 생성 된 함수 중 일부를 활용하기 위해 사용하기 시작할 때까지 (내가 만든 것에 대해) 잘 작동했습니다.
http://wwww.asp.net 의 DAL / BLL 솔루션보다 훨씬 더 직관적이고 깨끗한 솔루션을 제공 할 것 같습니다 .
나만의 SQL Command C # DAL 코드 생성기를 만들려고 생각했지만 ORM은 더 우아한 솔루션처럼 보입니다.
쿼리 컴파일 및 테스트.
ORM의 도구가 향상됨에 따라 컴파일 시간 오류 및 테스트를 통해 쿼리의 정확성을 더 빨리 결정하는 것이 더 쉽습니다.
쿼리를 컴파일하면 개발자가 오류를 더 빨리 찾는 데 도움이됩니다. 권리? 권리. 이 컴파일은 개발자가 SQL 또는 SQL과 유사한 명령문의 문자열 대신 비즈니스 객체 또는 모델을 사용하여 코드에서 쿼리를 작성하기 때문에 가능합니다.
.NET에서 올바른 데이터 액세스 패턴을 사용하는 경우 메모리 컬렉션에서 쿼리 논리를 단위 테스트하기가 쉽습니다. 이렇게하면 데이터베이스에 액세스하거나 데이터베이스에 데이터를 설정하거나 완전한 데이터 컨텍스트를 스핀 업할 필요가 없기 때문에 테스트 실행 속도가 빨라집니다. [편집] 이것은 내가 생각했던 단위만큼 사실이 아닙니다. 메모리 테스트는 극복하기 어려운 과제 를 제시 할 수 있습니다 . 그러나 이러한 통합 테스트는 이전보다 작성하기가 더 쉽습니다. [/ EDIT]
이것은 몇 년 전 질문을 받았을 때보 다 오늘날 확실히 더 관련성이 있지만 내 경험이있는 Visual Studio 및 Entity Framework의 경우에만 해당 될 수 있습니다. 가능하면 자신의 환경을 플러그인하십시오.
여기에는 좋은 점 (이동성, 개발 / 유지 보수 용이성, OO 비즈니스 모델링에 집중 등)이 많이 있다고 생각하지만 고객이나 경영진을 설득하려고 할 때 모두 사용하여 얼마나 많은 돈을 절약 할 수 있는지로 귀결됩니다. ORM .
일반적인 작업 (또는 다가올 더 큰 프로젝트)에 대해 몇 가지 추정을 수행하면 무시하기 어려운 전환에 대한 몇 가지 인수를 얻게됩니다.
코드 스미스 템플릿을 사용하는 .net 계층
http://nettiers.com/default.aspx?AspxAutoDetectCookieSupport=1
생성 될 수있는 무언가를 코딩하는 이유.
한 가지 단점은 ORM이 POJO에서 업데이트가 필요하다는 것입니다. 주로 스키마, 관계 및 쿼리와 관련이 있습니다. 따라서 모델 객체를 변경하지 않는 시나리오는 프로젝트 또는 b / w 클라이언트 및 서버에서 공유되기 때문일 수 있습니다. 따라서 이러한 경우에는 추가 노력이 필요한 두 수준으로 분할해야합니다.
저는 안드로이드 개발자이며 모바일 앱은 일반적으로 크기가 크지 않으므로 순수 모델과 orm 영향을받는 모델을 분리하려는이 추가 노력은 충분히 가치가 없어 보입니다.
나는 질문이 일반적인 질문이라는 것을 이해합니다. 하지만 모바일 앱도 일반 우산 안에 들어 있습니다.