2016-11-09 3 views
0

엔터프라이즈 아키텍처가 처음이지만 이해한다면 3 단계로 구성됩니다. 나는 .NET 플랫폼에서 학교 프로젝트를 진행하고 그 구조를 가지고 :mvc 및 서비스 (.NET)를 사용하여 엔터프라이즈 아키텍처의 프로젝트 구조

  • 데이터 계층 - 내가 제공하는 몇 가지 클래스를 클래스 라이브러리 - 관계형 databas에
  • 비즈니스 계층에 매핑되는 데이터 모델과 클래스 라이브러리를 응용 프로그램의 기능
  • 프레젠테이션 계층 -이 계층에서 나는 mvc 프로젝트를 수행 할 수 있다고 생각하지만 확실하지 않습니다.

이 구조를 사용하면 웹 API 또는 WCF를 저장할 수 있습니까? 비즈니스 계층에서 올바르게 할 수 있었습니까? 아니면 서비스와 mvc를 가진 EA의 실제 단어 예제를 찾았습니까? 감사합니다

+0

최상의 샘플을 다운로드하여 배우십시오. –

+0

어디에서 다운로드 할 수 있습니까? – Aligator

+0

github, codeproject, codeplex, nuget 등. –

답변

2

당신은 실제로 4 개 개의 레이어가 있습니다

  • 프리젠 테이션을
  • 서비스 레이어
  • 도메인 계층

이 이름 지정 규칙이 약간 다를 수 있습니다 데이터 레이어하지만, 아이디어는 교장 선생님의 분리입니다. 서비스 계층이 비즈니스 로직을 수행 할 수 있지만 데이터 계층의 메소드 호출을 인식하지 못하게하는 개념.

그래서 당신은 참조 할 것 같은 :

  • 프리젠 테이션 - (참조 도메인, 데이터)
  • 도메인 레이어 - - (없음 참조)
  • 서비스 계층 (서비스, 도메인, 데이터 참조)
  • 데이터 레이어 - (참고 도메인)

그래서 프리젠 테이션 계층은 그래서 당신은 당신의 종속성을 빌드 할 때, 모두를 참조합니다 주입 컨테이너, 당신은 정확하게 참조 할 수 있습니다.

이 샘플은 project을 볼 수 있습니다. 사이에 상호 작용하는 방법 중.

발표 :

using Microsoft.AspNetCore.Mvc; 
using Service_Layer; 

namespace Address_Book.Controllers 
{ 
    [Route("api/[controller]")] 
    public class PeopleController : Controller 
    { 
     #region Dependencies: 

     private readonly IPeopleService peopleService; 

     #endregion 

     #region Constructor: 

     public PeopleController(IPeopleService peopleService) 
     { 
      this.peopleService = peopleService; 
     } 

     #endregion 

     [HttpGet] 
     public JsonResult Get() 
     { 
      var branches = peopleService.GetBranches(); 
      return Json(branches); 
     } 

     [HttpGet("{id}")] 
     public JsonResult Get(int id) 
     { 
      var people = peopleService.GetEmployees(id); 
      return Json(people); 
     } 
    } 
} 

서비스 레이어 :

using Data_Layer.Factory; 
using Domain_Layer.Entity; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.SqlClient; 

namespace Service_Layer 
{ 
    public class PeopleService : IPeopleService 
    { 
     private readonly IEmployeeFactory factory; 

     private const string getBranches = "..."; 
     private const string getPeople = "..." 
     #region Constructor: 

     public PeopleService(IEmployeeFactory factory) 
     { 
      this.factory = factory; 
     } 

     #endregion 

     public IEnumerable<BranchModel> GetBranches() 
     { 
      using (var context = factory.Create()) 
       return context.List<BranchModel>(getBranches, CommandType.Text); 
     } 

     public IEnumerable<EmployeeModel> GetEmployees(int branchId) 
     { 
      using (var context = factory.Create()) 
       return context.List<EmployeeModel>(getPeople, CommandType.Text, new SqlParameter() { ParameterName = "BranchNum", SqlDbType = SqlDbType.Int, Value = branchId }); 
     } 
    } 

    #region Declaration of Intent: 

    public interface IPeopleService 
    { 
     IEnumerable<BranchModel> GetBranches(); 

     IEnumerable<EmployeeModel> GetEmployees(int branchId); 
    } 

    #endregion 
} 

데이터 레이어 :

using Data_Layer.Repository; 
using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.SqlClient; 
using Data_Layer.Helper; 

namespace Data_Layer.Context 
{ 
    public class EmployeeContext : DbCommand, IEmployeeRepository 
    { 
     private bool disposed = false; 
     private string dbConnection; 

     #region Constructor: 

     public EmployeeContext(string dbConnection) 
     { 
      this.dbConnection = dbConnection; 
     } 

     #endregion 

     public IEnumerable<TEntity> List<TEntity>(string query, CommandType commandType, params SqlParameter[] parameters) where TEntity : class, new() 
     { 
      using (var connection = new SqlConnection(dbConnection)) 
      using (var command = new SqlCommand(query, connection)) 
      { 
       connection.Open(); 
       command.CommandType = commandType; 

       foreach (var parameter in parameters) 
        command.Parameters.Add(parameter); 

       return BuildEntity(command, new TEntity()); 
      } 
     } 

     #region Dispose: 

     public void Dispose() 
     { 
      Dispose(true); 
      GC.SuppressFinalize(true); 
     } 

     protected virtual void Dispose(bool disposing) 
     { 
      if (!disposed) 
       disposed = true; 
     } 

     ~EmployeeContext() { Dispose(false); } 

     #endregion 
    } 
} 

당신에게 w 프로젝트를 볼 필요가 없으면 데이터 레이어와 서비스 레이어가 Startup.cs 파일에 대한 확장 메서드를 만든 종속성 삽입을 통해 호출되고 있지만 이것이 상호 작용하는 방법입니다. 질문이 있으시면 언제든지 C# 채팅에 참여하겠습니다.