2016-11-28 19 views

답변

0

귀하의 DAL (데이터 액세스 계층)에 DbContext 구현을 넣을 수 있습니다. 아마도 이것에 대해 다른 견해를 갖겠지 만 저장소 나 작업 단위 패턴을 구현하지는 않을 것입니다. 기술적으로 DBContext는 작업 단위이며 IDbSet은 저장소입니다. 자신 만의 구현을 통해 추상화 위에 추상화를 추가 할 수 있습니다.

기타 정보 herehere.

+0

대부분의 경우 나는 생각이났다. Microsoft ASP.Net에서이 사실을 공개하는 이유는 무엇입니까? –

0

DAL은 데이터 액세스 계층의 머리 글자 어입니다. DbContext, 리포지토리 및 작업 단위 (Unit Of Work)는 데이터 작업과 관련이 있으므로 DAL에 배치해야합니다.

0

"이 단어에 대한 의견이 많으므로"해야 할 사항 "은 아마도 올바른 단어가 아닙니다. https://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

을하지만 실제로 이런 식으로 레이어하기 시작했다 : 당신이 책에서 이러한 패턴을 구현하려면 , 나는 ASP.NET들에서이 링크를 체크 아웃 할

컨트롤러/로직 < - 비즈니스 로직 및 경계 객체가 생성되고 변환되는 곳.

저장소 < - 저장기구의 실제 구현 상주 - 지속성 및 바뀌는 엔티티와 검색어와 관련된 로직

스토어 < 개체. 이것은 인터페이스 뒤에 추상화되어 있습니다.

이 방법은 비즈니스 논리 및 저장소 논리 모두 테스트 가능하고 분리되어 있으며 지속성에 대한 어떤 메커니즘을 사용하거나 자유롭게 사용할 수 있다는 사실을 이용합니다. 나머지 응용 프로그램을 사용하지 않고서는 아무 것도 알지 못합니다.

이것은 다른 패턴들과 마찬가지로 진실입니다. 이것은 이것에 관한 것입니다.

DbContext는 DAL 경계를 벗어나서는 안됩니다. 저장소 나 작업 단위를 넣으려면 자유로이 사용할 수 있습니다. 세부 정보 나 종속성을 위쪽으로 누설하지 않도록 할 수 있습니다. DbContext는 제 생각에 가능한 한 좁은 범위로 범위를 지정해야합니다. 가능한 한 깨끗하게 유지해야합니다. 컨텍스트가 어디에 있는지 알지 못합니다. 보호를 착용하십시오! 하지만 비웃음, 비동기, 다중 스레드, 다중 노드, 큰 응용 프로그램이있는 경우 이러한 DbContexts를 사방에 전달하면 일반적인 동시성 및 데이터 경합 문제가 발생합니다.

내가 좋아하는 것은 InMemory 상점에서 시작하여 내 컨트롤러에 주입하는 것입니다. 해당 저장소가 여러 엔티티를 제공하기 시작하고 지속성 논리가 점점 더 복잡해 지자 저장소 위에 저장소가있는 저장소로 리팩토링합니다. 모든 테스트가 끝나고 원하는대로 작동하게되면 데이터베이스 또는 파일 시스템을 기반으로 해당 저장소를 구현하기 시작합니다.

또 다른 "진정한"답변과 많은 의견이있는 꽤 일반적인 질문이기 때문에 여기 내 의견입니다.

이 의견에 대한 대부분의 의견은 유효하며 다른 강점과 약점이 있으며 중요한 부분은 필요한 강점과 약점을 해결하는 방법을 파악하는 것입니다.

0

저장소에 DbSet<T> 개체에 대한 참조가 있어야하며 하나 이상의 저장소에서 추가, 업데이트 또는 제거한 후에 UnitOfWork에서 SaveChanges을 호출해야합니다. 따라서 작업 단위 구현에 DbContext을 배치해야합니다.