2011-12-15 3 views
0

저는 구조화 된 C# .NET의 데스크탑 프로젝트를 가지고 있습니다 : GUI, 비즈니스 및 데이터 액세스 레이어. 각 비즈니스 계층 클래스는 데이터베이스의 엔터티를 나타냅니다. linq을 사용하여 데이터베이스에 액세스합니다. 그러나 오늘날 프로젝트가 구현되는 방식은 원자 적으로 많은 작업을 수행 할 수 없으므로 비즈니스 계층에서이 작업을 수행해야합니다.비즈니스 계층에서 "unitOfWork"를 갖는 최상의 프로젝트 패턴

일부 디자인 패턴을 검색하여 동일한 컨텍스트의 데이터 레이어에서 모든 작업을 수행하고 모든 변경 사항을 제출 한 후에 unitOfWork를 찾았습니다. 이것은 작업을 원자 적으로 만들기 위해 작동합니다. 하지만 문제는 이전에 유효성을 검사해야 할 작업이 있다는 것입니다. 즉, 데이터 레이어에서 메서드를 호출하는 대신 비즈니스 메서드에서 이전에 유효성을 검사 할 메서드를 호출해야합니다. 비즈니스 레이어에서의이 호출은 또 다른 unitOfWork를 생성하고 결과적으로 내가하려고하는 더 큰 작업의 원 자성을 깨는 다른 컨텍스트를 만듭니다.

질문 : 동일한 linq 컨텍스트의 비즈니스 계층에서 하나 이상의 비즈니스 계층 메서드를 호출하는 것이 가장 좋은 프로젝트 패턴은 무엇입니까? 가 될 것이다 일을

답변

1

한 가지 방법 :

  • 귀하의 비즈니스 계층의 위에 서비스 레이어를 만듭니다.
  • 이 서비스 계층은 실제 WCF 서비스 일 수도 있고 일반 C# 클래스 일 수도있는 두 가지 서비스로 구성됩니다. 하나는 읽기 용이고 다른 하나는 쓰기 용입니다.
  • 읽기 서비스는 트랜잭션이 아니며 쿼리를 수행하는 메소드 (예 : 데이터 읽기) 만 포함합니다.
  • 쓰기 서비스는 트랜잭션입니다. 모든 메소드는 트랜잭션 컨텍스트를 작성하거나 작업 단위 패턴을 따르십시오.
  • 쓰기 서비스는 비즈니스 계층에서 C/U/D 작업을 실행하기 전에 유효성 검사를 위해 읽기 서비스에 액세스합니다.
+0

좋아요. 이 프로젝트 패턴에는 이름이 있습니까? 이것에 대해 더 자세히 검색하고 싶습니다. 감사! – joaocarlospf

+0

CQRS : Command/Query Responsibility Segregation을 기반으로합니다. –

관련 문제