문제

내가 사용하도록 요청하는 단일 패턴을 구현 DAL,그러나 내가 생각하기 어려운 수영장 연결 사용,트랜잭션이다.

나는 알고 싶다는 장점과 단점을 가장 좋은 방법을 알고 있 수영장 외에 연결 될 수 있습 500 개 이상의 동시 사용자에 대해 사이트를 개발하고.

DB 서버는 Oracle10g.

DAL 사용하여 엔터프라이즈 라이브러리 3.1

도움이 되었습니까?

해결책

싱글 톤 패턴은 DAL에 적합합니다. 자체 엔터프라이즈 웹 애플리케이션 (수백 명의 사용자와 20 대 싱글 톤 클래스에서 2,000 개가 넘는 방법)에서 사용합니다. 연결 풀링은 실제로 Ado.net과 SQL Server 자체에 의해 가장 잘 처리됩니다. 여러 유형의 백엔드 서버를 원한다면 문제가되지 않습니다. 싱글 톤 패턴을 사용하더라도 실제로 데이터베이스에 직접 호출하는 세부 사항을 처리하는 중앙 집중식 데이터 액세스 클래스를 원할 것입니다 (매개 변수, 텍스트/절차 이름, 자격 증명/연결 문자열 포함).

내 상황에서 단일의 각 방법은 데이터베이스에 저장된 절차와 1 : 1에 해당합니다. 이것은 본질적으로 저장된 각 절차에 대해 C# "프론트 엔드"후크를 만듭니다. 그래서 그것들은 거의 기본 C# 코드와 유사하게 말할 수 있습니다. 그것은 DAL에 매우 간단하게 전화를합니다. 문제의 수많은 SP로 인해 여러 개의 싱글 톤이 있습니다. 각 SP에는 Development_, Financial_ 또는 Organization_ 등의 접두사가 있습니다. 그런 다음 개발, 재무 또는 조직과 같은 각각에 해당하는 싱글 톤 수업이 있습니다. 따라서 SP Organization_ViewData는 C#의 싱글 톤 클래스에서 viewData라는 메소드가됩니다.

그것은 물론 그렇게하는 한 가지 방법 일 뿐이지 만, 지난 6 년 동안 여러 개발자와 많은 양의 코드와 잘 어울리는 것을 발견했습니다. 가장 중요한 것은 일관성이 핵심이라는 것입니다. 프론트 엔드 프로그래머가 싱글 톤 브로커 중 하나의 메소드 이름을보고 있다면 데이터베이스 종료에 들어가는 위치를 정확히 알려야합니다. 이렇게하면 문제가 있거나 누군가가 코드를 검색하여 이해하려고 시도하는 경우 추적이 덜합니다.

다른 팁

연결 풀링을위한 모범 사례는 직접 구현하지 않고 대신 ado.net 프레임 워크를 처리하도록하는 것입니다.

연결 풀링 옵션을 연결 문자열 내에서 매개 변수로 설정할 수 있습니다. 그런 다음 해당 문자열로 열린 모든 연결은 프레임 워크에서 구현 및 관리되는 연결 풀에서 제공됩니다. OracleConnection을 닫거나 처분하면 기본 연결이 파괴되지 않고 대신 수영장으로 돌아갑니다.

여기에 설명되어 있습니다. http://msdn.microsoft.com/en-us/library/ms254502.aspx

일반적으로 싱글 톤 사용에 대해 : 데이터 액세스 계층을 래핑하는 데 사용했으며 항상 잘 작동했습니다.

트랜잭션은 데이터베이스 전체가 아닌 특정 연결에만 적용됩니다. 즉, 여러 스레드를 실행할 수 있으며 각 스레드는 독립 트랜잭션을 통해 데이터베이스에 읽고 쓸 수 있으며 각 스레드는 별도의 ORACLECONNECTION 인스턴스를 사용합니다.

나는 DAL에 대해 잘 모르지만 싱글 톤 패턴은 좋은 캡슐화를 유지하면서 데이터를 글로벌로 만드는 좋은 방법입니다.

를 사용하는 단일 데이터베이스에 접속하기 위해 공장에 달하는 것은 매우 일반적이다.그것은 당신을 더 쉽게 플러그인의 구현 방법에 공장을 변경하지 않고 많은 코드입니다.많은 사람들의하지 않는 것처럼 단일 패턴,하지만 난 그것에 대한 확인을 작동의 이 유형은 것입니다.

DAL의 경우 싱글 톤을 사용하는 것에 대해 약간 불안합니다. 둘 이상의 데이터베이스 백엔드를 사용하려면 어떻게해야합니까? 아마도 송장에 MSSQL을 사용하고 싶지만 인증을 위해 Active Directory를 사용하고 싶을 것입니다. 또는 포럼 게시물에 MySQL을 사용하고 싶지만 Geo-Clustering을위한 PostgreSQL (더 현실적으로). 싱글 톤 인터페이스를 사용하면 모의 데이터베이스 연결을 테스트에 전달할 수 없을 때 데이터베이스 계층 테스트가 훨씬 더 어려워 질 수 있습니다.

싱글 톤을 사용하는 경우 성능 차이가 없다고 생각합니다. 동시에 동일한 방법으로 여러 스레드가 실행될 수 있기 때문입니다. 모든 스레드에서 공유 될 내부 필드를 갖지 않으면 모든 것이 잘 작동합니다.

결국, 연결 풀을 관리하는 클래스는 스레드 안전해야하므로 성능에 영향을 줄 수있는 몇 가지 잠금 장치를 만들지 만 모두 필요합니다. (프레임 워크에서 내부적으로 만들어졌으며 어쨌든 행동을 바꿀 수 없습니다).

싱글 톤을 사용하지 않기로 결정한 경우, DAL 인스턴스가 차이가있을 수 있지만 일반적으로 그렇지 않습니다.

참고 : 연결 풀에 대해 이야기하면, 당신이 돌봐야 할 유일한 중요한 것은 "늦게 열린 초기"패턴을 따르는 것입니다. 즉, 연결을 가능한 한 많이 열어 놓고 필요한 모든 작업을 마친 후 최대한 빨리 닫습니다.

이 마법 규칙을 사용하여 모든 시스템을 구축 한 후 연결 문자열 매개 변수를 사용하여 일부 풀 옵션 (초기 크기, 최대 크기, ...)을 변경할 수 있습니다.

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