문제

내가 언급 제목,나는 당신이 무엇(으로 경험이 풍부한 개발자)의 사용에 대해 생각하는 것 DAO 패턴,특히 내에 웹 응용 프로그램입니다.어떤 장점을 찾을 수 있고 어떤 결과 그것의 사용은 당신이 싫어?

도움이 되었습니까?

해결책

문제 DAOs 는 내는 그들은 일반적으로 처리한 전체 개체의 모든 시간입니다.이 완전히 불필요한 오버헤드를 존재하지 않는 간단한 쿼리를 처리합니다.는 경우,예를 들어,드롭다운 만들 수 있의 데이터베이스에 참조 데이터 DAO 사용자 수 있습니다 간단히 말한다:"나의 컬렉션을 개체에 대한 이 표는 방법은 무엇입니까?에 의해 주문 z".그런 다음,해당 데이터에 사용되는 드롭다운,그러나 일반적으로만한 키/값을 조합을 무시하고 모두에서 다른 물체(만든 데이터,사용자가 마지막 업데이트되었는지 여부,그것은 활성화 등)를 검색되었고 매핑됩니다.는 경우에도 이 마사지 일어나 근처 DAO 전화 및 객체 저장되지 않으로 그들을 검색(일반적으로 않는 경우 불행하게도,체가 종종에 싸서 c:forEach(JSP)과 반복을 통해 생산하는 드롭 다운),그것은 여전히 만드는 불필요한 데이터베이스 및 네트워크,오버헤드를 언급하지 않 증가 임시 메모리에서 개최 이러한 객체입니다.

지금 이지 않는 말을하는 것 DAO 할 수 없을 검색 할 수 있도록 설계되었는지도 참조 데이터의-그것은 확실히 수 있습니다.그러나 일반적으로 사용되는가에 대한 전체 개체 매핑하지 않은,무엇이 필요합니다.그것은 강도 때 저장하지만,약점,IMO 데이터를 검색할 때-확실히,당신은 그것의 모든지만 종종 필요하지 않습의 모든이며,그것을 그냥 폐기물 메모리,대역폭 및 시간입니다.

다른 팁

참고 : 다른 단점을 찾을 수 있지만 여기 내 경험의 빠른 목록이 있습니다.

장점 :

  • 개체를 검색하기위한 일반적인 호출.
  • 일반 생성/읽기/업데이트/삭제 유량 세트가 있으면 다른 DAO에 대해 일반 레이아웃을 반복 할 수 있습니다.
  • 또한 코드의 지속성 특정 부분이 어디로 갈 수 있는지 통합합니다. 코드의 다른 구성 요소와 비즈니스 로직을 분리합니다.

단점 :

  • 지금까지 가장 유연한 것은 아닙니다.
  • 어린이 물체를 게으른로드하려면 DAO를 다른 층과 섞거나 게으른 물체를 검색하려고 할 때 예방 조치를 취해야합니다.
  • Daos를 필기하면 코드가 지루하고 반복적이 될 수 있습니다.

을 사용하는의 이득 DAO 디자인 패턴

DAO 또는 데이터 액세스 개체 디자인 패턴의 좋은 예를 들어 추상화 캡슐화에 객체 지향적 원칙이 있습니다.그것을 분리한 지속성 논리는 별도의 레이어 데이터에 액세스 층 수 있는 응용 프로그램을 안전하게 반응을 변경에서 지속성 메커니즘이 있습니다.예를 들어,이동 경우에서 파일-기반으로 고집하는 메커니즘을 데이터베이스의 변경 될 것입 제한된 데이터에 액세스층과에 영향을 미치지 않는 서비스 계층이나 도메인 개체입니다.데이터 액세스 개체 또는 DAO 패턴은 꽤 많은 표준에 Java 응용 프로그램은 그것이 핵심 Java 웹 응용 프로그램 또는 엔터프라이즈니다.다음은 몇의 더 많은 혜택을 사용하여 DAO 패턴 Java 응용 프로그램:

enter image description here

  1. DAO 디자인 패턴을 또한 커플링 낮은 다른 부분 사이의 응용 프로그램입니다.를 사용하여 DAO 디자인 패턴을 보기 레이어가 완전히 독립적 DAO 레이어 및 전용 서비스층이 있는 종속에서 그것은 또한 추상화하여 사용 DAO 인터페이스입니다.

  2. DAO 디자인 패턴을 할 수 있습 JUnit 테스트를 빠르게 실행하라 그것을 만들 수 있는 모의와 연결하지 마십시오 데이터베이스로 실행하는 테스트입니다.그것은 향상시험하기 때문에 그것의 쉬운 테스트를 작성하는 모 개체보다는,통합 테스트와 데이터베이스입니다.의 경우에는 어떤 문제가 실행하는 동안,단위 테스트,인 코드고지 않는 데이터베이스입니다.또한 방패와 함께 데이터베이스에 연결하고 환경 문제입니다.

  3. 이후 DAO 패턴에 따라 인터페이스,또한 촉진 객체 지향적 디자인은 원칙적으로"프로그래밍 인터페이스에 대한 보다 구현"는 결과를 유연하고 품질의 코드입니다.

DAO 패턴의 힘은 실제 저장 시스템의 멋진 추상화 층을 만들 수 있다는 것입니다. 그들은 지속성 계층에 대한보다 객체 지향적 인보기와 도메인과 실제로 데이터 액세스 (직선 JDBC, Persistence Frameworks, ORM 또는 JPA)를 수행하는 코드 간의 깨끗한 분리를 제공합니다.

내가 약점을 인용해야한다면, 나는 그것이 또 다른 계층이라고 말할 것입니다 ... 그러나 나는 이것이 당신의 코드를 기본 지속성 API에 묶지 않는 가격이라고 생각합니다.

우리는 구현에 DAO 패턴을 도입하는 데 실질적인 이점을 보았습니다. 이는 주로 데이터베이스 인터페이스와 구현 간의 명확한 분리 때문입니다. 우리는 다음과 같은 이점을 관찰했습니다.

  • 실제 데이터베이스 액세스 구현에 대한 추상화는 데이터 액세스 전략을 사용자 비즈니스 로직과 분리합니다. 이를 통해 초기 프로젝트 단계에 대한 단기 (Spring JDBC Template) 구현 전략을 선택하여 나중에 Ibatis 또는 최대 절전 모드로 이동하는 옵션을 선택할 수있었습니다. (우리는 현재 우리가 할 수있는 위치에 있지 않습니다.)
  • 분리는 전체 데이터 액세스 구현을 단위 테스트에서 조롱 할 수 있다는 점에서 상당한 테스트 가능성 이점을 도입합니다. (이것은 아마도 가장 큰 이점 일 것입니다)
  • 이것을 Spring과 결합하면 우리가 선택한 시스템에 DB 구현을 주입 할 수 있습니다 (DAO 패턴보다 DI에 대해 더 많이 말할 수 있음).

우리가 직면 한 한 가지 문제는 우리의 디자인의 명확성이 부족하기 때문일 수 있습니다. 아키텍처의 후속 추상화 계층 사이의 전송 객체로 데이터베이스에서 게시 된 데이터 값을 재사용하는 "경사"입니다. 약간의 통증 후 우리의 해결책은 층당 값 객체를 갖는 것이 었습니다 (즉, 후속 아키텍처 레이어에서 데이터베이스 값 객체를 재사용하지 않음).

찬성

  • DB 테이블의 단일 점 - 객체 속성 매핑
  • 다른 스토리지 유형에 대한 DAO 구현 가능성
  • Dao의 모든 인터페이스 패턴을 개발하십시오
  • DAO의 결과에 대한 다소 표준 주니트 테스트 클래스 개발 더 나은 테스트 범위에서 개발
  • 세부 사항에 대한 완전한 제어
  • 지나치게 일반적인 솔루션으로 인해 성능 손실이 없습니다

범죄자

  • 최신 프레임 워크를 사용하는 것보다 "섹시"
  • 개발자는 자신의 바퀴를 발명하지 않습니다 (Pro :-)).

대부분의 개발 패턴과 마찬가지로 DAO를 사용하는 데 익숙해지는 데 시간이 걸립니다. 경험을 통해보다 강력한 코드와 개발자의 이점이 발생합니다. 그 마지막 요점은 저에게 가장 큰 장점입니다.

지속성 프레임 워크를 사용하는 상황에 따라 경고는 자신의 DAO를 코딩하는 좋은 대안 일 수 있습니다.

어떤 대안을 고려하고 있습니까?

프리젠 테이션 계층 이외의 어딘가에 지속성에 대한 책임을 부여하는 것은 일반적으로 책임과 재사용의 명확성에 대한 주장에서 단지 좋을 것입니다. 본능적으로 프레젠테이션, 서비스, 지속성의 세 가지 레이어 접근 방식을 찾습니다. 그렇게 오랫동안 이런 식으로 해왔으므로 고통을 겪지 않아 고통을 겪는 증거를 고수 할 수 없습니다. 나에게 지속 메커니즘을 이해하는 단일 층을 갖는 것은 테스트를 단순화하고 유지 보수를 용이하게하며 우려를 잘 분리해야한다는 것이 "명백한"것 같습니다.

따라서 지속성 계층을 수행하는 방법에 대한 의문을 남깁니다. 내 기본 가정은 JPA (또는 유사한 프레임 워크)를 사용하는 것입니다. 나는 이것을 DAO의 정교한 예로 본다.

그래서 나는 DAO의 두 가지 비용을 본다. 먼저 프로그램 구조, 디자인에 투자해야합니다. 사소한 경우에 이것은 과잉처럼 느껴질 수 있습니다. 둘째, DAO를 구현하는 프레임 워크를 사용하는 경우 학습 곡선이 있습니다. JDBC 코드를 직접 작성하는 것과 비교할 때 이것은 또 다른 투자입니다.

프로 : 추상 분리.
CON : 보일러 플레이트 코드 (코드 생성기/템플릿 및 ORM에 대한 신에게 감사합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top