그리고 두 번째 및 세 번째 질문에; 이 생성자 및 거래의 디스 포저를 사용
using(var transaction = new Transaction())
{
// ..
// ..
}
: 내가 첫 번째는, 예를 들어 특정 컨텍스트에서 코드를 실행할 수있는 using 문 (C# 2.0)를 사용
나타났습니다
세를 유창하게 구사 패턴 트랜잭션을 설정 한 다음이 컨텍스트에서 코드를 실행합니다.
둘째는 거의 동일하지만 람다를 사용하면 Rhino Mocks에서 많이 사용됩니다.
(new Transaction()).Run(() => mycode(););
가장 유창한 인터페이스는 리턴 유형을 사용하여 메소드 호출을 체인화하는 것입니다. 대부분의 메소드는 이것을 돌려 주므로, 같은 오브젝트로 호출을 연결할 수 있습니다. 그러나 호출 된 메서드에 따라 다른 개체를 반환하여 컨텍스트를 변경할 수도 있습니다.트랜잭션에서만 실행할 수있는 객체가있는 경우 (미안하지만 다른 예제는 생각할 수 없음), 호출 실행 및 stoptransaction을 실행할 수있는 초기화 된 트랜잭션을 의사 코드로 반환하는 StartTransaction 메소드를 제공 할 수 있습니다 (
). 당신은 오류 처리의 모든 종류를 추가 할 필요가 물론
var runner = new Runner();
runner
.StartTransaction()
.Run()
.StopTransaction();
처럼 호출이 보이는
class Runner
{
Transaction StartTransaction()
{
return new Transaction(this);
}
}
class Transaction
{
Transaction Run()
Transaction StopTransaction()
}
등
여기 팁이다 : 검색 기능과 단순함이 훨씬 더 중요 유창하게 API는 대부분의 경우에서주는 약간의 추가 가독성보다. LinQ (synatax 메서드) 방식에 능통합니다. C#으로 유창한 DSL을 작성하면 이해하기 어려운 API가 생성됩니다. –