프로젝트에서 계층화 된 아키텍처 및 EF, 저장소 및 패턴을 사용하고 싶습니다.DBContext, Repository 및 UnitOfWork는 어느 계층에 있어야합니까?
DBContext, Repository 및 UnitOfWork는 어느 계층에 있어야합니까?
DAL 또는 BLL?
프로젝트에서 계층화 된 아키텍처 및 EF, 저장소 및 패턴을 사용하고 싶습니다.DBContext, Repository 및 UnitOfWork는 어느 계층에 있어야합니까?
DBContext, Repository 및 UnitOfWork는 어느 계층에 있어야합니까?
DAL 또는 BLL?
DAL은 데이터 액세스 계층의 머리 글자 어입니다. DbContext, 리포지토리 및 작업 단위 (Unit Of Work)는 데이터 작업과 관련이 있으므로 DAL에 배치해야합니다.
"이 단어에 대한 의견이 많으므로"해야 할 사항 "은 아마도 올바른 단어가 아닙니다. 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 상점에서 시작하여 내 컨트롤러에 주입하는 것입니다. 해당 저장소가 여러 엔티티를 제공하기 시작하고 지속성 논리가 점점 더 복잡해 지자 저장소 위에 저장소가있는 저장소로 리팩토링합니다. 모든 테스트가 끝나고 원하는대로 작동하게되면 데이터베이스 또는 파일 시스템을 기반으로 해당 저장소를 구현하기 시작합니다.
또 다른 "진정한"답변과 많은 의견이있는 꽤 일반적인 질문이기 때문에 여기 내 의견입니다.
이 의견에 대한 대부분의 의견은 유효하며 다른 강점과 약점이 있으며 중요한 부분은 필요한 강점과 약점을 해결하는 방법을 파악하는 것입니다.
저장소에 DbSet<T>
개체에 대한 참조가 있어야하며 하나 이상의 저장소에서 추가, 업데이트 또는 제거한 후에 UnitOfWork
에서 SaveChanges
을 호출해야합니다. 따라서 작업 단위 구현에 DbContext
을 배치해야합니다.
대부분의 경우 나는 생각이났다. Microsoft ASP.Net에서이 사실을 공개하는 이유는 무엇입니까? –