2017-01-06 1 views
2

계층화 된 아키텍처를 올바르게 작성하는 방법을 배우고 싶습니다. 그것을 위해서는 조언이 필요합니다. 계층 구조. 올바르게 처리하십시오.

은 예제 프로젝트를 위해 나는 뉴스 웹 사이트를 쓰기 시작했다. 그것은 그렇게하는 것이 가장

enter image description here

가 : 내 프로젝트를 계층화? 저는 그 각도를 할 것입니다 (웹 프로젝트에서).

그리고 하나 더. Dependency injection을 위해 하나 이상의 레이어를 추가해야합니까?

+0

좋은 방법입니다. "최고의"주관적입니다. 그런 식으로 시도해보고 어떤 문제가 발생했는지 확인하십시오. –

+0

@DStanley의 조언에 대한 감사합니다. –

+0

모든 레이어에서 단위 테스트를 받아야합니다. NewsWebsite.BLL.Tests, NewsWebsite.Data.Tests, ... 그리고 전체 시스템을 시험하는 별도의 통합 테스트 프로젝트. – Fran

답변

3

나는 NewsWebSite.BLL를 호출하지 않을 것입니다.

나는이 같은 것이다. 회사 이름이 Contoso 인 경우 :

// This is where you can put all your common code. 
// I do not mean cross cutting concern here. By common I mean if you have 
// some contstants or enums that are shared by all Dlls 
Contoso 

Contoso.Business 
Contoso.Api 
Contoso.WebApp 
Contoso.Data 

// The name of test projects are exactly the same as the name of the 
// assembly but has the word "Tests" at the end 
Contoso.Business.Tests 
Contoso.Api.Tests 

자세한 내용은 사용중인 Pascal Casing 명명 규칙을 참조하십시오. 이렇게하면 Contoso와 거래 할 필요가 없습니다 .BLL.SomeClass.

또한, 내 Contoso.Business.TestsContoso.Buiness 네임 스페이스와 일치하는 네임 스페이스에 상주합니다. 여기 Contoso.Business의 클래스입니다 : 그 클래스에 대한

public namespace Contoso.Business 
{ 
    public class Foo 
    { 

    } 
} 

시험은, 나는 (내가 DLL에 대해 이야기하고 있지 않다) Contoso.Business.Tests 네임 스페이스에 넣어하지 않을 것입니다. 그들은 같은 공간을 공유

// See the namespace here, I am not using Contoso.Business.Tests 
public namespace Contoso.Business 
{ 
    // The name of the class is identical to the name of the class being tested but the word "Tests" appended 
    public class FooTests 
    { 

    } 
} 

그런 식으로 나는 쉽게 관련 될 수있다 :이 같은 Foo을 시험하고 내 테스트 클래스를 만들 것입니다.

+0

좋은 조언. 덕분에 –

+0

걱정 마. 이 질문에 대한 답변을 원하시면 [this] (http://stackoverflow.com/help/someone-answers)를 읽어보십시오. – CodingYoshi

1

자주 아키텍처 구조를 사용합니다. 동일한 상황에서 webAPI와 각도를 의미합니다.

그러나 당신이 차원의를 포함하여 프로젝트의 모든 필요를 배려하는 것이 중요합니다. 예 : 비즈니스 로직을 관리 할 필요가 없다면 BLL을 사용하는 것이 적절하지 않을 수 있습니다. 그것은 단지 웹 애플리케이션에 사용할 수있는 BLL 같은 소리 때문에