나는 Niggddinner 및 ContactManager와 같은 더 간단한 응용 프로그램뿐만 아니라 Kigg와 같은 더 복잡한 응용 프로그램을 살펴 보았습니다. 나는 더 간단한 것들을 이해하고 더 복잡한 것들을 이해하고 싶습니다.다음 레벨로 MVC 가져 오기 : DI 및 작업 단위
일반적으로 간단한 응용 프로그램에는 LINQtoSQL 또는 Entity Framework의 맨 위에 저장소 클래스와 인터페이스가 있습니다 (느슨하게 결합되어있는 것처럼). 리포지토리는 컨트롤러에서 호출되어 필요한 데이터 작업을 수행합니다.
내가 Kigg 또는 Oxite 같은 더 복잡한 응용 프로그램을 검사 할 때 내가 볼 하나 개의 일반적인 패턴의 도입이다 (나는 단지 여기에 표면을 긁는하고 있지만 어딘가에 시작해야): Kigg의에서 (
- IOC DI를 일 의 경우 유니티)
- 웹 요청 평생 관리자
- 단위 여기
내 질문은 :
정말 느슨하게 결합 된 응용 프로그램을 사용하려면 Unity와 같은 것을 사용해야한다는 것을 알고 있습니다. 하지만 Unity에게 Web Request Lifetime Manager를 소개해야하는 순간도 있습니다. 왜 그런가요? Nerddinner와 같은 샘플 응용 프로그램에 Web Request Lifetime Manager가없는 이유는 무엇입니까? 그것은 정확히 무엇을합니까? 그것은 단결 특정한 것이냐?
두 번째 패턴은 작업 단위 (Unit of Work)의 소개입니다. 다시 한 번, 같은 질문 : Nerddinner 또는 ContactManager가 Unit of Work를 사용하지 않는 이유는 무엇입니까? 대신 이러한 응용 프로그램은 데이터 조작을 수행하기 위해 Linq2Sql 또는 Entity Framework 위에 저장소 클래스를 사용합니다. 작업 단위 (UOW)에 대한 표시가 없습니다. 정확히 무엇이며 사용해야하는 이유는 무엇입니까?
감사
다음는 DinnersController 수준에서 Nerddiner에서 DI의 예입니다
public DinnersController()
: this(new DinnerRepository()) {
}
public DinnersController(IDinnerRepository repository) {
dinnerRepository = repository;
}
그래서 내가 바로 때문에 첫 번째 생성자의 컨트롤러가 "소유"는 DinnerRepository하고 있다고 가정하는 생각이 따라서 거기에 선언 된 이후 컨트롤러의 수명에 의존 할 것인가?
감사합니다! 도움이되었습니다. 내 질문을 편집했습니다. 컨트롤러가 저장소/데이터 컨텍스트에 대한 참조를 소유하고 있다고 말할 때 이것이 무슨 뜻입니까? – Thomas
정확하지 않습니다. NerdDinner에서는 단위 테스트를보다 쉽게하기 위해 IDinnerRepository를 수락하는 추가 생성자를 사용합니다. 하지만 네, 여전히 컨트롤러 (매개 변수없는 생성자)이거나 저장소 개체를 만들고 소유하는 테스트입니다. 둘 다 죽고 다른 저장소 사용자는 없습니다. 그래서 일생은 간단합니다. 그런데 그런 기술은 나쁘다. 당신은 그것에 관하여 더 많은 것을 여기에서 읽을 수있다 : http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/07/03/how-not-to-do-dependency-injection-in-nerddinner.aspx (또한 "가난한 사람의 IoC"에 대한 Google). – queen3
지미 보거 드 (Jimmy Bogard)가 "가난한 사람의 IoC"라는 뻔뻔스러운 사례에 대한 논쟁은 여기에서 매우 좋습니다. 의견도 좋습니다. 확실히 읽을만한 가치가 있습니다. –