开源博客项目Blog .NET Core源码学习(12:App.Application项目结构分析)

  开源博客项目Blog的App.Application项目主要定义网站页面使用的数据类,同时定义各类数据的增删改查操作接口和实现类。App.Application项目未安装Nuget包,主要引用App.Core项目的类型。
  App.Application项目的顶层文件夹如下图所示,下面逐一概述其大致用途。

在这里插入图片描述
  Base文件夹。主要包含基础接口及实现类定义,其下级文件如下图所示,其中:
  IAppService泛型接口定义数据对象的增删改查等通用异步及同步操作接口,AppService泛型类则基于App.Core项目的IAppRepository接口实现IAppService接口函数。App.Application项目的很多数据类操作服务都继承自AppService泛型类;
  EntityDto泛型类仅包含Id属性,App.Application项目的很多数据类都继承自该类;
  IMapperTag接口继承自Mapster.IRegister接口,App.Application项目中共定义了两个Mapper类继承自IMapperTag接口,以设置不同类型之间的属性映射关系。博客项目启动时会调用App.Framwork项目的ServiceCollectionExtension类的函数扫描并注册当前解决方案的四个项目中所有继承自IRegister接口的非抽象类;
  PageInputDto、PageOutputDto和QueryInputDto定义了博客页面中分页查询相关的类定义。

在这里插入图片描述

  Blog文件夹。包含博客网站前台页面和后台管理页面中主要数据对象的类型定义、数据操作接口及服务定义、数据验证定义,其下级结构如下图所示,其中:
  Dtos文件夹包含文章、栏目、评论、标签、时间线等网页所需数据类定义;
  Validators文件夹包含对文章、留言、通知、回复、标签等页面输入对象的数据校验类;
  Blog文件夹下包含10对接口及接口实现服务(服务同时集成AppService泛型类),对网站页面中的主要数据对象提供增删改查操作,同时在dto对象类定义和数据库表对象类定义间切换。

在这里插入图片描述
  SysManager文件夹。包含博客网站中角色、菜单、按钮及权限的类定义及操作服务。其下级结构如下图所示,其中:
  Dtos文件夹包含菜单、按钮、权限、角色等数据类定义;
  Validators文件夹包含对权限设置的数据校验类;
  SysManager文件夹下包含4对接口及接口实现服务(服务同时集成AppService泛型类),对网站页面中的角色、菜单、按钮及权限等数据提供增删改查操作,同时在dto对象类定义和数据库表对象类定义间切换。

在这里插入图片描述

  User文件夹。包含博客网站中与用户登录相关的数据类及操作服务定义。其下级结构如下图所示,其中:
  Dtos文件夹包含用户、账号等数据类定义,同时包含修改/重置密码、用户登录、QQ账号登录等页面操作所需的数据类定义;
  User文件夹下包含4对接口及接口实现服务(除QQAuthorize类之外的服务同时集成AppService泛型类),对网站页面中的用户、账号、QQ用户等数据提供增删改查操作,同时在dto对象类定义和数据库表对象类定义间切换。

在这里插入图片描述
参考文献:
[1]https://gitee.com/miss_you/Blog
[2]https://www.donet5.com/Home/Doc
[3]https://github.com/MapsterMapper/Mapster
[4]https://github.com/rivenfx/Mapster-docs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/573403.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯刷题-分巧克力

分巧克力 二分: N, K map(int, input().split()) w, h [], [] for i in range(N):cur_w, cur_h map(int, input().split())w.append(cur_w)h.append(cur_h)# 判断是否能分成K个及以上的巧克力 def check(a) -> bool: num 0for i in range(N):num (w[i] // …

3月份的倒数第二个周末有感

坐在图书馆的那一刻,忽然感觉时间的节奏开始放缓。今天周末因为我们两都有任务需要完成,所以就选了嘉定图书馆,不得不说嘉定新城远香湖附近的图书馆真的很有感觉。然我不经意回想起学校的时光,那是多么美好且短暂的时光。凝视着窗…

MySQL---事务

目录 一、事务简介 二、事务操作 1.未控制事务 2.事务控制一 3.控制事务二 三、事务的四大特性 四、并发事务问题 五、事务隔离级别 一、事务简介 事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或…

Android-Handler详解_使用篇

本文我将从Handler是什么、有什么、怎们用、啥原理,四个方面去分析。才疏学浅,如有错误,欢迎指正,多谢。 1.是什么 因为Android系统不允许在子线程访问UI组件,否则就会抛出异常。所以咱们平实用的最多的可能是在子线…

Leetcode239_滑动窗口最大值

1.leetcode原题链接:. - 力扣(LeetCode) 2.题目描述 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口…

python实战之宝塔部署flask项目

一. 项目 这个demo只是提供了简单的几个api接口, 并没有前端页面 # -*- coding: utf-8 -*- import flask as fk from flask import jsonify, requestapp fk.Flask(__name__)app.route(/api/hello, methods[GET]) def get_data():return hello world# 假设我们要提供一个获取用…

Vue3气泡卡片(Popover)

效果如下图:在线预览 APIs 参数说明类型默认值必传title卡片标题string | slot‘’falsecontent卡片内容string | slot‘’falsemaxWidth卡片内容最大宽度string | number‘auto’falsetrigger卡片触发方式‘hover’ | ‘click’‘hover’falseoverlayStyle卡片样式…

CSS(六)

一、精灵图 1.1 为什么需要精灵图 一个网页中往往会应用很多小的背景图像作为修饰,当网页中的图像过多时,服务器就会频繁地接收和发送请求图片,造成服务器请求压力过大,这将大大降低页面的加载速度。 因此,为了有效…

解决VMWare Esxi 6.5.0 导出虚拟机时发生网络错误

解决办法:使用vmware ovftool工具导出。 1 先安装该工具到windows下面,有32位的和64位的 2 用管理员进入命令方式: 进入:c:\windows 进入工具命令当前文件夹(具体看用户的安装路径): cd \p…

vue3全局控制Element plus所有组件的文字大小

项目框架vue-右上角有控制全文的文字大小 实现&#xff1a; 只能控制element组件的文字及输入框等大小变化&#xff0c;如果是自行添加div,text, span之类的控制不了。 配置流程 APP.vue 使用element的provide&#xff0c;包含app <el-config-provider :locale"loca…

C++零基础入门学习视频课程

教程介绍 本专题主要讲解C基础入门学习&#xff0c;所以不会涉及很深入的语法和机制。但会让你整体多面的了解和学习C的核心内容&#xff0c;快速学习使用C&#xff0c;我们的目标是先宏观整体把握&#xff0c;在深入各个击破&#xff01; 学习地址 链接&#xff1a;https:/…

ThreadPool-线程池使用及原理

1. 线程池使用方式 示例代码&#xff1a; // 一池N线程 Executors.newFixedThreadPool(int) // 一个任务一个任务执行&#xff0c;一池一线程 Executors.newSingleThreadExecutorO // 线程池根据需求创建线程&#xff0c;可扩容&#xff0c;遇强则强 Executors.newCachedThre…