ASP.NET 5 / ASP.NET Core 1에서 우려 사항과 n- 계층 아키텍처 분리

asp.net asp.net-core asp.net-core-mvc dependency-injection entity-framework-core

문제

나는 DAL 레이어를 ASP.NET MVC / UI 레이어와 별도로 유지하는 데 유익한 방법을 찾기 위해 고심하고 있습니다. 사용하려는 Dependency Injection에 새로 추가 된 덕분입니다.

예를 들어 엔티티 및 컨텍스트와 같은 다양한 Entity Framework 코드가있는 ASP.NET 5 프로젝트, 비즈니스 계층 프로젝트 및 데이터 액세스 프로젝트가 있습니다. ASP.NET 5에서 컨텍스트를 설정하고 데이터베이스를 목표로 삼으려면 기본 설명서에서 StartUp.cs 클래스에서 이와 같은 작업을 수행 할 것을 제안합니다.

services.AddEntityFramework()
    .AddSqlServer()
    .AddDbContext<BookContext>(options =>
    {
        options.UseSqlServer(Configuration.Get("Data:ConnectionString"));
    });

이것은 이제 기본적으로 내 UI 레이어 인 DAL을 참조해야한다는 것을 의미합니다. 여러 해 동안 항상 여러 전문가와 블로그 게시물에 따라 나쁜 습관을 가지고 있었던 것입니다.

나는이 문제를 해결 일한 한 가지 방법은 두 개의 새로운 프로젝트를 만드는 것입니다, 하나는 다음 가지고있는 구성 클래스와도 DAL 및 유틸리티 프로젝트에 액세스 내 비즈니스 클래스를 생성하는 팩토리 클래스를 포함하는 CompositeRoot의 프로젝트 ConnectionString 속성을하는 I 내 컨텍스트로 전달할 수, 나는 DI에 내장 된 모든 것을 연결하고 내 UI 레이어에서 내 DAL을 참조하지 않도록합니다. 하지만 컨텍스트의 생성자 또는 재정의 가능한 OnConfiguration 메서드에서 연결 문자열을 지정할 수없는 것처럼 보이기 때문에 최신 버전의 Entity Framework (베타 7)에 대한 문제를 발견했습니다. 게다가, 지금까지의 모든 문서는 이러한 우려의 혼합에 전혀 신경 쓰지 않는 것처럼 보입니다. 이게 지금 우리가하는 방식일까요? 개발자가 UI에서 참조 DAL 클래스와 같은 '나쁜'일을 직접하지 않을 것이라고 믿으시겠습니까? 아니면 사람들이이 새로운 DI / ASP.NET 5 구성에 내장 된 일들을 유지하기 위해 고용하고있는 패턴이 있습니까?

인기 답변

10 명의 시민 건축가에게 다리를 쌓도록 요청하면 10 개의 다른 아키텍처로 끝납니다. 하나도 같지 않고 다른 하나보다 낫지 않을 것입니다.

그들이 얼마나 많은 모범 사례와 디자인 패턴을 적용하는지에 관계없이, 각 건축가는 그들의 생각을 정당화 할 것입니다. 어떤 사람들은 지나치게 열중하고 다른 사람들은 그것을 간결하게 유지하고 일을 끝내게됩니다. 예산, 납기 및 장인 정신은 다른 유형의 건축물 유형에 직접적인 영향을 미칩니다.

동일한 규칙이 소프트웨어 설계자에게 적용됩니다.

UI 레이어에 DAL에 대한 의존성이 있다는 것을 깨닫기 위해서 세계에서 가장 좋은 의도를 가진 건축가에 대한 나의 공평한 분배를 보았습니다. 아마도 이것에 대한 추론은 다음과 같습니다.

  • 그들은 그것을 생각하지 않았다.
  • 그들은 그것에 대해별로 신경 쓰지 않는다.
  • 인터페이스를 구현에 쉽게 매핑 할 수있는 모든 레이어를 볼 수 있기 때문에 DI를 용이하게합니다.

위로 MVC 5, 나는 다음과 같은 레이어했다 :

-Contoso.Core (Class Library)
-Contoso.Data (Class Library)
-Contoso.Service (Class Library)
-Contoso.Web (asp.net MVC 5)
-Contoso.Web.Configuration (Class Library)

Web.Configuration 계층은 Core , DataService 에 대한 종속성이 있습니다. 이 레이어는 DI 항목을 구성하는 곳입니다.

Web 레이어는 Data 레이어에 의존하지 않았으며 물건을 시작하기 위해 Bootstrapper Nuget Package를 사용했습니다.

아마도 당신은 ASP.NET 5와 비슷한 것을 얻을 수 있습니다.

Microsoft (또는 누구든지)는 Decoupled 방식을 사용하거나 Onion Architecture 샘플과 같은 것을 사용하여 엔터프라이즈 레벨 샘플에 맞게 조정 된 작업 프로젝트 템플릿을 만드는 것을 좋아합니다.

결국 합리적인 분리 아키텍처와 같은 것으로 생각하는 것이 무엇이든간에 다른 사람들에게는 충분하지 않을 수도 있지만 일부에게는 너무 많은 것일 수 있습니다.

그 결과를 어떻게 관리했는지 알기 원하면 발견 한 내용을 자유롭게 공유하십시오.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.