2009-12-03 4 views
3
  • 소비자 코드에서? (컨트롤러처럼)
  • 리포지토리에 있습니까?
  • 서비스가 필요하십니까?

답변

3

처음에는 꽤 논란의 여지가 많으므로 여러 가지 답변을 얻을 수밖에 없습니다.

내 생각에 ACID 트랜잭션은 특정 저장소 메커니즘 (특히 관계형 데이터베이스)의 기능이므로 기술 관련 개념을 고려해야합니다.

  • 많은 대규모 기업 (예 : 예를 들어, 아마존 등)를 사용하지 않는 : 사람이 단지 이론적 인 인수가 데이터 저장소 (저장소)가 트랜잭션되지 않을 것 몇 가지 생각할 경우가 있다는 생각이 있음을 시위하기 전에 성능상의 이유로 트랜잭션. 대신, 그들은 도메인 모델은 특정 구현에서 분리해야하기 때문에
  • 테스트 복식

을 장애 처리

  • REST 기반 데이터 서비스를 가능하게하는 구조를 가지고, 나는 그들이 아무것도 몰라 그것이 논리적 것을 발견 거래에 대해. 그러나 이는 리포지토리가 올바른 세분화 된 작업을 노출하여 트랜잭션을 관리 할 수 ​​있고 원할 경우 작업이 성공 또는 실패로 보장되어야 함을 의미합니다.

    즉, 리포지토리는 트랜잭션 (해당하는 경우)을 관리해야합니다.


    있다, 그러나 이것은 저장소를 필요로하는 상황이 너무 많은 도메인 지식을 가지고있다, 그래서 Unit of Work 디자인 패턴은 당신이 진정으로 여러 걸쳐 A (전위) 트랜잭션을 필요로하는 경우에 좋은 추상화를 제공한다 몇 가지 다른 저장소에 대한 작업.

  • +3

    +1 저장소입니다. 거래가 기술에 특화되어 있다는 점에 동의하고 싶습니다. 그러나 작업 단위는 응용 프로그램마다 다르므로 작업 단위에서 기술을 분리하는 방법에 대해 궁금합니다. 저장소가 실제로 비즈니스 도메인에 대한 지식을 가지고 있어야합니까? –

    +1

    @ 로버트 하비 : 고마워요. 작업 단위 (Unit of Work)는 매우 관련성이 높은 패턴이며, 필자는 내 대답을 쓰는 동안 잠시 잊어 버릴 수있는 방법을 모르겠다 ... 모든 입력과 출력을 분해하지 않고 저장소가 도메인 모델에 대한 지식을 가질 필요가있다. 원시 유형 (IMO는 좋지 않음)이지만 지식이 비즈니스 로직으로 확장되어서는 안된다는 데 동의합니다. 내 대답을 업데이트 할게. –

    +0

    대부분의 경우 트랜잭션 논리가 리포지토리에 있어야합니다. 그러나 작업 단위를 사용하면 IMO가 책임감을 한 단계 높일 수 있습니다. 응용 프로그램 수준 또는 서비스가 더 잘 맞는 것을 어디에서 확인할 수 있습니까? 나는 특정 컨텍스트없이 하나 또는 다른 것을 보증하는 좋은 이유를 생각할 수 없다 ...? – julien

    관련 문제