.NET Core 分层
实际案例一:

json扩展组件(可并入公共组件文件夹)
对外接口层:采用webapi模式、autofac、autoMap

公共组件层:

日志组件(可并入公共组件文件夹):log4Net
模型层:DTO模型和实体模型

报表组件(可并入对外接口层):采用mvc模式

仓储层: 上下文模型、仓储类、仓储接口、工作单元模式

当前仅继承了Microsoft.EntityFrameworkCore 通用增删改查方法,对小项目来说有些过度设计。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using wms.Model.Entities;
namespace wms.Repository
{
public class CompanyRepository : RepositoryBase<TCompany>, ICompanyRepository
{
public CompanyRepository(WmsDataContext context)
: base(context)
{
}
}
}
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace wms.Repository
{
public class RepositoryBase<TEntity> : IRepositoryBase<TEntity> where TEntity : class
{
public RepositoryBase(WmsDataContext dbContext)
{
DbContext = dbContext;
DbSet = DbContext.Set<TEntity>();
}
protected DbContext DbContext { get; }
protected DbSet<TEntity> DbSet { get; }
/// <summary>
/// 添加记录
/// </summary>
/// <param name="entity"></param>
public void Insert(TEntity entity)
{
DbSet.Add(entity);
}
/// <summary>
/// 添加记录(批量)
/// </summary>
/// <param name="entity"></param>
public void Insert(IEnumerable<TEntity> entity)
{
DbSet.AddRange(entity);
}
/// <summary>
/// 更新记录
/// </summary>
/// <param name="entity"></param>
public void Update(TEntity entity)
{
DbSet.Update(entity);
}
/// <summary>
/// 更新记录(批量)
/// </summary>
/// <param name="entity"></param>
public void Update(IEnumerable<TEntity> entity)
{
DbSet.UpdateRange(entity);
}
/// <summary>
/// 删除记录
/// </summary>
/// <param name="entity"></param>
public void Delete(TEntity entity)
{
DbSet.Remove(entity);
}
/// <summary>
/// 得到实体查询对象
/// </summary>
/// <returns></returns>
public IQueryable<TEntity> Query()
{
return DbSet;
}
public void Delete(IEnumerable<TEntity> entities)
{
DbSet.RemoveRange(entities);
}
}
}

服务层:接口类、服务类(数据组装),是对数据库某个或几个表操作的封装。

再复杂点,则需要在细分出:
1领域层:对服务层的封装,可以理解为业务逻辑层,按不同业务拆分出不同部分。
2缓存层:
3仓储层: 数据实体化用不同ORM框架或不同数据库时起作用,使兼容各种ORM框架(EF、ADO、Hibernate(Nhibernate),iBatis,mybatis,EclipseLink,JFinal)和数据库,避免影响其它层。
案例二:https://blog.csdn.net/patriot_28/article/details/108756720
Entity
Entity(实体)包中的类和数据库中的表时一一对应关系,包括字段名称、数据类型。
Model
一般地,Model(模型)存的是实体(Entity)类的模型。为了给前端提供实际使用的数据,一般在Model会对某些字段等进行处理,如表里存的性别字段,gender,保存的是f/m,但是提供给前端的时候需要把f/m替换成女/男。还可以添加新的字段,如把省province、市city、区district、地址address合并成新的字段detailed_address:省+市+区+地址。
Domain
Domain(领域)一般是多个Model的组合,如查看一个订单详情,除了订单编码、商品名称等订单相关的信息,可能还需要把用户信息、发货地址、支付信息等展示出来,这时就可以按Domain返回数据。
Repository
Repository(仓库)主要是针对数据进行操作,包括对不同类型数据库(如mysqsl、redis、mongodb等)中的数据进行整合。业务层应该直接和Repository打交道。
DAO
DAO(DataAccessObject) 数据访问层,直接操作数据库表,进行增删改查等操作。
Data
Data(数据层),用于缓存数据写入和读取、配置参数数据的读取等。
Logic
Logic(逻辑层)主要负责数据校验、业务流程处理等。
Service
Service层主要负责业务模块的逻辑应用设计。作用如下:
封装通用的业务逻辑,操作。如一些数据的检验,可以通用处理。
与数据层的交互。
其他请求:如远程服务获取数据,如第三方api等。
Controller
Controller(控制器)层主要处理外部请求,一般在此层调用Serice层的接口来控制业务流程,根据业务情况返回相关数据。
View
View(视图层)与控制层结合比较紧密,一般地,View主要负责展示应用的前端页面。
Action
同Controller,Java中使用。
POJO
同Entity,Java中使用。

浙公网安备 33010602011771号