.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中使用。

posted @ 2022-07-05 16:38  hao_1234_1234  阅读(401)  评论(0编辑  收藏  举报