당신은 실제로 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# 채팅에 참여하겠습니다.
최상의 샘플을 다운로드하여 배우십시오. –
어디에서 다운로드 할 수 있습니까? – Aligator
github, codeproject, codeplex, nuget 등. –