ABP-Book Store Application中文讲解 - 前期准备 - Part 3:Acme.BookStore项目模块详解之二

 1. 汇总

ABP-Book Store Application中文讲解-汇总-CSDN博客

2. 前一章 

ABP-Book Store Application中文讲解 - 前期准备 - Part 3:Acme.BookStore项目模块详解

项目之间的引用关系。

目录

1. .Domain.Shared

 2. .Domain

3. .Application.Contracts

4. .Application

5. .EntityFrameworkCore

6. .DbMigrator--有自己的appsettings.json

7. .HttpApi

8. .HttpApi.Client

9. .HttpApi.Host--有自己的appsettings.json

10. .AuthServer--有自己的appsettings.json

11. Test Projects


1. .Domain.Shared

该项目包含常量、枚举和其他对象,这些对象实际上是域层的一部分,但需要在解决方案中的所有层/项目中使用。

BookType enum和BookConsts类(其中可能有一些Book实体的常量字段,如MaxNameLength)是本项目的理想选择。

此项目不依赖于解决方案中的其他项目, 所有其他项目都直接或间接地依赖于它。

 2. .Domain

这是解决方案的领域层。它主要包含实体(entities)、聚合根(aggregate roots)、领域服务(domain service)、值对象( value objects)、存储库接口(repository interfaces)和其他领域对象。

Book实体、BookManager域服务和IBookRepository接口都是这个项目的理想选择。

取决于.Domain.Shared是因为它使用项目中定义的常量、枚举和其他对象。

3. .Application.Contracts

本项目主要包括应用层的应用服务接口和DTO (Data Transfer Objects)。它的存在是为了分离应用层的接口和实现。通过这种方式,接口项目可以作为合同包共享给客户端。

IBookAppService接口和BookCreationDto类是这个项目很好的候选对象。

取决于Domain.Shared因为它可能在应用程序服务接口和DTOs中使用常量、枚举和这个项目的其他共享对象。

4. .Application

该项目是对定义在.Application.Contracts中接口的实现。

BookAppService 类

依赖于 .Application.Contracts ,实现.Application.Contracts定义的接口并医用DTOs.
依赖于.Domain ,可以使用domain objects (entities, repository interfaces... etc.) 去实现应用逻辑。

    5. .EntityFrameworkCore

    使用EF Core,定义DbContext,实现.Domain项目中定义的IRepository。

    如果使用mongodb,此项目不可用。

    6. .DbMigrator--有自己的appsettings.json

    执行DB的创建、DB的Update和初始化。有自己的配置文件。

    依赖项目为.EntityFrameworkCore和.Application.Contracts。

    1. 创建数据库

    2. 更新数据库表结构, DB migrations

    3. 初始化数据。 Seeds initial data

    7. .HttpApi

    此项目用于定义自己的API Controller,它依赖于.Application.Contracts。

    大多数情况我们不需要自定义Controller,因为ABP的API Controllers 会自动帮我们生成对应的APIs。除非你需要定义自己的APIs

    8. .HttpApi.Client

    这是一个定义c#客户端代理以使用解决方案的HTTP api的项目。您可以将此库共享给第三方客户端,这样他们就可以在其Dotnet应用程序中轻松地使用您的HTTP api(对于其他类型的应用程序,他们仍然可以使用您的api,无论是手动还是使用自己平台中的工具)。

    多数情况下我们不需要手动更改次项目,因为ABP的Dynamic C# API Clients 帮我们处理了此任务。

    可以删除此项目如果你不用定义客户端代理。

    9. .HttpApi.Host--有自己的appsettings.json

    项目API的主启动页面,引用了.Application, .EntityFrameworkCore,.HttpApi。有自己的配置文件。

    里面定义了数据库连接池,跨域设置,Redis, OpenIdDict Connection设置等。

    10. .AuthServer--有自己的appsettings.json

    OpenidDict connection,用于授权和鉴权的验证,缓存数据库是Redis。有自己的配置文件。

    11. Test Projects

    单元测试和集成测试项目,里面集成了一下项目的测试:

    • .Domain.Tests 测试.Domain.
    • .Application.Tests is 测试.Application.
    • .EntityFrameworkCore.Tests 测试EF Core configuration 和自定义的Repositories.
    • .TestBase is a base (shared) project for all tests.

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

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

    相关文章

    【Leetcode刷题随笔】349. 两个数组的交集

    1. 题目描述 给定两个数组nums1和nums2&#xff0c;返回它们的交集。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。 示例1: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[2] 题目条件&#xff1a; 1 < nums1.length, nums2.length < 10…

    Unity打包安卓失败 Build failure 解决方法

    【Unity】打包安卓失败 Build failure 的解决方法_com.android.build.gradle.internal.res.linkapplicat-CSDN博客 unity在打包时设置手机屏幕横屏竖屏的方法_unity打包默认横屏-CSDN博客

    Window、CentOs、Ubuntu 安装 docker

    Window 版本 网址&#xff1a;https://www.docker.com/ 下载 下载完成后&#xff0c;双击安装就可以了 Centos 版本 卸载 Docker &#xff08;可选&#xff09; yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-log…

    Matlab自学笔记五十四:符号数学工具箱和符号运算、符号求解、绘图

    1.什么是符号数学工具箱&#xff1f; 符号数学工具箱是Matlab针对符号对象的运算功能&#xff0c;它引入了一种特殊的数据类型 - 符号对象&#xff1b; 该数据类型包括符号数字&#xff0c;符号变量&#xff0c;符号表达式和符号函数&#xff0c;还包含符号矩阵&#xff0c;以…

    OpenCV进阶操作:图像的透视变换

    文章目录 前言一、什么是透视变换&#xff1f;二、透视变换的过程三、OpenCV透视变换核心函数四、文档扫描校正&#xff08;代码&#xff09;1、预处理2、定义轮廓点的排序函数3、定义透视变换函数4、读取原图并缩放5、轮廓检测6、绘制最大轮廓7、对最大轮廓进行透视变换8、旋转…

    【python】基础知识点100问

    以下是Python基础语法知识的30条要点整理,涵盖数据类型、函数、控制结构等核心内容,结合最新资料归纳总结: 基础30问 一、函数特性 函数多返回值 支持用逗号分隔返回多个值,自动打包为元组,接收时可解包到多个变量 def func(): return 1, "a" x, y = func()匿…

    采用AI神经网络降噪算法的通信语音降噪(ENC)模组性能测试和应用

    采用AI降噪的语言通话环境抑制模组性能效果测试 随着AI时代来临.通话设备的环境噪音抑制也进入AI降噪算法时代. AI神经网络降噪技术是一款革命性的语音处理技术&#xff0c;他突破了传统单麦克风和双麦克风降噪的局限性,利用采集的各种日常环境中的噪音样本进行训练学习.让降噪…

    openwrt目录结构(部分)

    1&#xff0c;openwrt 原始目录需要注意的目录 tools: 该目录下存放着一些&#xff0c;编译工程的自动化工具包和一些在编译过程用到的命令包&#xff0c; 查看目录下的Makefile&#xff0c;知道其会在编译过程中将依赖包下载 例如&#xff1a; autoconf / lzma / mkimage/ …

    RDB和AOF的区别

    Redis提供两种主要的持久化机制&#xff1a;RDB&#xff08;Redis Database&#xff09;和AOF&#xff08;Append Only File&#xff09;&#xff0c;它们在数据持久化方式、性能影响及恢复策略上各有特点。以下是两者的对比分析及使用建议&#xff1a; RDB&#xff08;快照持久…

    基于大模型的甲状腺结节诊疗全流程预测与方案研究报告

    目录 一、引言 1.1 研究背景与目的 1.2 研究意义 1.3 国内外研究现状 二、大模型预测原理与方法 2.1 相关大模型概述 2.2 数据收集与预处理 2.3 模型训练与验证 三、术前预测与评估 3.1 结节性质预测 3.1.1 良恶性判断 3.1.2 与传统诊断方法对比 3.2 手术风险预测…

    逆向破解:x64dbg

    文章目录 一、CPU窗口1、反汇编窗口2、寄存器窗口3、栈地址窗口4、十六进制数据窗口5、堆栈参数解析窗口 二、常用快捷键三、字符串检索功能四、调试功能1、上一步 一、CPU窗口 1、反汇编窗口 2、寄存器窗口 寄存器窗口用于显示和解释当前线程环境下CPU寄存器的各种状态值和内…

    免布线视频桩如何重塑停车管理模式

    传统停车管理常因布线复杂、维护成本高而难以推广&#xff0c;而“免布线视频桩”通过无线设计、低功耗与高精度检测&#xff0c;为城市停车提供高效解决方案。作为智慧城市建设的创新工具&#xff0c;免布线视频桩以即装即用、长效续航等特性&#xff0c;正在重塑停车管理模式…

    【CTFer成长之路】举足轻重的信息搜集

    举足轻重的信息搜集 信息搜集 常见的搜集 题目描述: 一共3部分flag docker-compose.yml version: 3.2services:web:image: registry.cn-hangzhou.aliyuncs.com/n1book/web-information-backk:latestports:- 80:80启动方式 docker-compose up -d 题目Flag n1book{info_…

    springboot3+vue3融合项目实战-大事件文章管理系统-更新用户密码

    大致分为这三步 首先在usercontroller中增加updatePwd方法 PatchMapping ("/updatePwd")public Result updatePwd(RequestBody Map<String,String> params){//1.校验参数String oldPwd params.get("old_pwd");String newPwd params.get("n…

    OpenCV进阶操作:指纹验证、识别

    文章目录 前言一、指纹验证1、什么是指纹验证2、流程步骤 二、使用步骤&#xff08;案例&#xff09;三、指纹识别&#xff08;案例&#xff09;1、这是我们要识别的指纹库2、这是待识别的指纹图3、代码4、结果 总结 前言 指纹识别作为生物识别领域的核心技术之一&#xff0c;…

    ECLIC中断流程及实际应用 —— RISC-V中断机制(二)

    在长期的嵌入式开发实践中&#xff0c;对中断机制的理解始终停留在表面层次&#xff0c;特别当开发者长期局限于纯软件抽象层面时&#xff0c;对中断机制的理解极易陷入"知其然而不知其所以然"的困境&#xff0c;这种认知的局限更为明显&#xff1b;随着工作需要不断…

    计算机网络-LDP标签发布与管理

    前面学习了LDP建立邻居&#xff0c;建立会话&#xff0c;今天来学习在MPLS中的标签发布与管理。 在MPLS网络中&#xff0c;下游LSR决定标签和FEC的绑定关系&#xff0c;并将这种绑定关系发布给上游LSR。LDP通过发送标签请求和标签映射消息&#xff0c;在LDP对等体之间通告FEC和…

    Go语言运算符详解

    文章目录 1. 算术运算符2. 关系运算符3. 逻辑运算符4. 位运算符5. 赋值运算符6. 其他运算符运算符优先级注意事项 Go语言提供了与其他语言类似的运算符&#xff0c;包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符等。这些运算符即可满足基本的运算需求。 1. 算…

    Selenium模拟人类行为,操作网页的方法(全)

    看到有朋友评论问&#xff0c;用selenium怎么模仿人类行为&#xff0c;去操作网页的页面呢&#xff1f; 我想了想&#xff0c;这确实是一个很大的点&#xff0c;不应该是一段代码能解决的&#xff0c; 就像是,如果让程序模拟人类的行为。例如模拟人类买菜&#xff0c;做饭&am…

    RabbitMQ的工作队列模式和路由模式有什么区别?

    RabbitMQ 的工作队列模式&#xff08;Work Queues&#xff09;和路由模式&#xff08;Routing&#xff09;是两种不同的消息传递模式&#xff0c;主要区别在于消息的分发逻辑和使用场景。以下是它们的核心差异&#xff1a; 1. 工作队列模式&#xff08;Work Queues&#xff09…