건축 디자인 : 데이터 액세스 계층 개요

다음 간단한의 설명 앞 서비스 계층 , SOA 서비스 지향 아키텍처 , 비즈니스 로직 계층 - 아키텍처 설계 ,뿐만 아니라 일부로서 디자인 원리 이해소프트웨어 아키텍처 디자인의 모토 . 데이터 액세스 레이어 : 이것은 우리가 우리의 다음 단계로 계속 블로그. 당신은 무엇 개발 모델이나 비즈니스 모델을 사용하든, 결국 대부분 메커니즘 지속성이 지속 미디어 지속하고, 읽기 및 쓰기 데이터 CRUD 할 수 있어야합니다. 이것은 데이터 액세스 계층이다. 당신은 아마 같은 디스크 스토리지, 일반적으로 사용되는 관계형 데이터베이스에 저장, 또는 NoSQL에 (뿐만 아니라 SQL) 메모리 저장 또는 문서 저장 등의 저장 매체로 XML 파일 형식을 사용합니다. 그리고 여기에만 관계형 데이터베이스 스토리지에 관심.

책임 레이어 데이터가 제공되는 위치 :

1 : CRUD 서비스를 제공합니다. 로드 비즈니스 오브젝트를 담당하는 유일한 증가와 같은 저장 매체의 중간층과 상호 작용, 수정, 삭제 나타날 수 있습니다.

2 : 쿼리 서비스를 제공합니다. 이것은 R &에서 CRUD (읽기) LT 다르고, I는 단일 개체 튜플을 판독하는 경향이있다. 그리고 여기 사천의 명령에 국내 전력 고객과 같은 복잡한 쿼리에 대한 쿼리입니다. 여기에 기록 층을 포함한다. 비즈니스 오브젝트가 쿼리 클래스를 제공하는 데에 소위 창고 모드는 그는 데이터 쿼리 분석 단계, 패키지 SQL 구문 분석 로직을 숨 깁니다, 의미한다.

3 : 트랜잭션 관리. 응용 프로그램 시스템의 비즈니스 트랜잭션에 대한 여기 이야기, 각각의 요청은, 삭제 작업을, 새로운 멀티 여러 데이터 객체를 수정합니다. 경우 우리는 열려있는 데이터베이스 연결, 준비 패킷, 운영 데이터베이스 대신 켤 때마다이 데이터 연결이 닫힙니다. 이들은 우리에게 불필요한 성능 오버 헤드를 많이 줄 것이다. 데이터베이스 관리자는 종종 "가능한 한 작은 데이터베이스와 상호 작용하는대로,"이것은 우리의 개발 원칙해야합니다 필요합니다. 더 나은 운영 및 우리는 비즈니스 트랜잭션을 제공, 메모리에 데이터웨어 하우스를 구축 데이터 저장 매체에 한 번 제출에 완벽한 비즈니스 운영을 유지하기 위해 제목을 변경합니다. 좋은을 가지고 비즈니스 트랜잭션 작업 단위 (UOW)의 이름을 들어, 데이터 집합에 있어야 다시 비즈니스 트랜잭션에 있으며, ORM 프레임 워크는 마이크로 소프트가 우리에게 제공했다.

4 : 동시 처리. UOW는하지만, 데이터 일관성 문제가 발생할 수 있습니다 오프라인 메모리 작업에서 여러 제출 개방형 비즈니스 데이터 연결의 출현을 피해야한다. 다중 사용자 환경에서 데이터의 동시 처리 전략을 개발해야한다. 일반적으로, 우리는 낙관적 동시성을 사용합니다 : 사용자는 오프라인을 수정할 수 있습니다 그것이 실패하는이 업데이트에 의해 수정되는 경우, 그들은 업데이트 객체를 수정하면 수정 여부를 확인할 수 있습니다. 간단하게 말해서, 그것은 변화의 손실을 방지하는 것입니다. 수정의 손실, 플러스 우리는 원래의 값을 사용할 수있는 범위, 플러스 또는 수정 타임 스탬프 또는 버전 번호 표시를 방지합니다. 동시에이 다른 많은 동시 해결 모드 있지만, 낙관적 동시성 잠금 장치는 더 일반적으로 사용된다.

5 : 데이터 컨텍스트 : 전체 모든 의무. 데이터 액세스 계층 기능의 개념의 일반적인 외부 인터페이스에 노출된다. 우리는 데이터 저장 매체에 동일한 작업에 대한 액세스를 제공, 높은 수준의 구성 요소가 필요합니다. 데이터 콘텍스트 (상황) 데이터베이스라고 CRUD 트랜잭션 동시성 높은 서비스 레벨 액세스 동종. EF의 ObjectContext를, NHibernate에 세션, 이상 SQL의 DataContext에 LINQ.

일부 개념 데이터 액세스 레이어 (여기이 모든, 그냥 개인적인 느낌 중요한 개념이다) :

1 : 데이터 맵퍼는 : 오브젝트 기억 매체를 수정하는 메모리 제출이 맵핑 논리를 수행 할 필요가 얻어진다 매퍼 데이터 객체 지속성 서비스 클래스 (데이터 모드 매퍼의 특정 타입이 정의 된 "EAA의 P").

2 기록 층 (리포지토리) : 위에서 언급 : 소위 저장 모드 클래스 오브젝트 조회 서비스를 제공하는 의미 그 숨겨진 데이터 쿼리 분석 단계와, 상기 패키지 SQL 해상도 로직. 우리는 객체 지향 세계에서 쿼리 개체를 사용, 그것은 개체의 결과 집합을 반환합니다. 여기에 귀하의 데이터베이스에서, 또는 당신의 전략에 따라, 캐시에 올 수 있습니다, 당신은 저장 층을 실현.

3 : 작업 단위 (UOW) : 마틴 파울러 "EAA의 P"가 정의됩니다 : 작업 단위가 데이터베이스에 영향을 미치는 사업 거래의 과정에있는 모든 변화를 기록합니다. 수술 후, 그 결과, 작업이 필요 단위는 데이터베이스에 대한 모든 변경 사항을 이해합니다. 이야기 비즈니스 트랜잭션 위의 포인트 3은 약이 피곤하지 않습니다.

4 : 표시된지도 (신원지도)의 역할이다가 : 발신자에 의해 사용되는 비즈니스 오브젝트를 추적을 용이하게하는 새로운 객체가 수행 생성되는 대신 각 시간보다, 동일한 인스턴스에서 비즈니스 트랜잭션입니다. 도시하는 해시 테이블에 저장된 맵 (해시 빠른 위치 O (1)). 캐시 구현과 유사하게 보장하기 위해 그 비즈니스 트랜잭션 컨텍스트 참조 수정와 비즈니스 오브젝트에서 동일한 데이터. 그러나 캐시에서 전혀 다른. 지속 시간, 비즈니스 트랜잭션 내에서 표시지도 라이프 사이클. 데이터 컨텍스트 동등한 기간 구현. 그러나 기간 동안 캐시에 비해 성능이 많이 개선이없는, 너무 짧습니다. 더 중요한 것은, 캐시 적중률 및 수정 참조에게 동일한 비즈니스 오브젝트를 사용하여 동일한 데이터 컨텍스트가지도를 표시하는지 확인하십시오.

5 : 낙관적 동시성 잠금 : 또한 위에서 언급, 확인 데이터 일관성 솔루션에 대한 오프라인 데이터의 충돌없이. 오프라인 작업, 분쟁의 허용 오차, 데이터 수정의 손실을 방지 할 수있는 첫 번째 낙관적, 데이터는 조건이나 타임 스탬프, 버전 번호를 해결하기 위해 원래의 가치를 사용하여 읽을 수 있습니다.

6 : 지연로드 : 개체가 한 번 로딩하지 완료,하지만 수요 부하 데이터를 여러 번에 따라,로드 할 때 사용. 너무 많은 비즈니스 관련 개체는 훨씬 더 거대한 데이터 량, 모든 시간보다 우리는 것이다 부분적으로 만 비즈니스 트랜잭션 객체를 조작 할 필요가 많은 데이터 오브젝트를 필요로하지 않습니다. 동료 비즈니스 오브젝트는 여전히 원형 참조하여,이 일회용로드의 전체 목적에 적합하지 않다 존재한다. 지연로드 이벤트 "로드 가능한 작은 수요와 부하, 부하에게 유일한 데이터 부분의 요구로."의도 최적화

7 : 영구 투명체 (PI 또는 POCO가)에 특히 의존 데이터 접근 층없이 외부 물체 모델이 종속있을 때,이 모델은, 투명 POCO 지속성이다. POCO 객체가 특정 클래스를 상속 특정 인터페이스를 달성하기 위해, 또는 특수 생성자를 제공 할 필요가 없습니다. 투명 비 영구 객체는 사람이 외부 종속성이 존재하지만, 우리는 목표 영역 C # 클래스, 지속 층의 단순한 크기 때문에 독립적으로 스위칭 될 수있다에 선호한다. 우리가 자신의 재능 측면 지향 프로그래밍 (AOP) 또는 프록시 모드를 보여주는 것입니다 직접 비즈니스 객체를 추적 할 수없는 경우에 리드 실현. 불행하게도, .NET에서 AOP 때문에, 동적 추적을 달성 IL의 주사와 같은 프록시 모드 방출 자 NHibernate의 사용으로, ORM 프레임 워크를 많이 직접 새로운 동작을 추가하지 않습니다. 따라서, 속성 필드 자 NHibernate에 필요한 모든 필드는 가상 메서드는 재기록해야 객체. :

8 : CQRS (명령 쿼리 책임 독방, 별도의 쿼리 명령 의무) : CQRS는 아키텍처 패턴이 명령의 등장에 연습 DDD에 CQS 이론을 소개하고 질의가 분리된다.

추천

출처www.cnblogs.com/it-hao/p/11908601.html