开发主题:何谓开发应用服务端

在官方开发教程这一段的内容叫做开发应用服务端,作为现在前后端分离的开发模式来说,一个应用就分为前端页面框架和后端API,页面框架调用WEBAPI实现业务就完事了。所以咱们今天开发一个WEBAPI就叫做应用服务端。

在传统的三层框架美好的年代,一个应用就是数据层、业务逻辑层、前端UI层就打完收工了。但为了实现更高程度的可复用、可扩展、并且能够更大程度的遵循设计模式单一职责开闭原则和里氏替换三大根本原则,现在的软件工程在以前三层架构的模式上研究出了领域驱动模式,而以前追求的对象持久化,把应用程序中的对象和对象的状态存储到数据库当中也发展成为了ORM框架(Object-Relational Mapping,对象关系映射),最终实现低代码甚至是无代码的目标。

回到今天的主题,那我们要开发一个应用的功能,就从数据层业务逻辑层UI层三层发展到了现在ABP这样的模式。

一、创建解决方案:

二、创建数据实体:

  1. 创建实体
  2. 把实体添加到DTO(数据上下文DbContext)以实现数据持久化
  3. 将Book实体映射到数据库表
  4. 执行一次数据迁移

三、创建应用程序:

  1. 创建 BookDto实体类
  2. CreateUpdateBookDto
  3. IBookAppService
  4. BookAppService
  5. 自动生成API Controllers
  6. Swagger UI

创建解决方案

在开始开发之前,请按照入门教程创建名为 Acme.BookStore 的新解决方案.也就是我们上一篇文章创建的源代码。

创建数据实体

第一步:创建实体

启动模板中的领域层分为两个项目:

创建Book实体

Acme.BookStore.Domain包含你的实体, 领域服务和其他核心域对象.

Acme.BookStore.Domain.Shared包含可与客户共享的常量,枚举或其他域相关对象.

在解决方案的领域层(Acme.BookStore.Domain项目)中定义你的实体.

该应用程序的主要实体是Book. 在Acme.BookStore.Domain项目中创建一个 Books 文件夹(命名空间),并在其中添加名为 Book 的类,如下所示:

using System;
using Volo.Abp.Domain.Entities.Auditing; namespace Acme.BookStore.Books
{
public class Book : AuditedAggregateRoot<Guid>
{
public string Name { get; set; } public BookType Type { get; set; } public DateTime PublishDate { get; set; } public float Price { get; set; }
}
}

ABP为实体提供了两个基本的基类: AggregateRoot和Entity. Aggregate Root是领域驱动设计 概念之一. 可以视为直接查询和处理的根实体(请参阅实体文档).

Book实体继承了AuditedAggregateRoot,AuditedAggregateRoot类在AggregateRoot类的基础上添加了一些基础审计属性(例如CreationTime, CreatorId, LastModificationTime 等). ABP框架自动为你管理这些属性.

Guid是Book实体的主键类型.

为了保持简单,本教程将实体属性保留为 public get/set . 如果你想了解关于DDD最佳实践,请参阅实体文档.

BookType枚举

Book实体使用了BookType枚举. 在Acme.BookStore.Domain.Shared项目中创建Books文件夹(命名空间),并在其中添加BookType:

点击查看代码
namespace Acme.BookStore.Books
{
public enum BookType
{
Undefined,
Adventure,
Biography,
Dystopia,
Fantastic,
Horror,
Science,
ScienceFiction,
Poetry
}
}

最终的文件夹/文件结构应该如下所示:
![image](https://img2024.cnblogs.com/blog/3155240/202404/3155240-20240415203135680-1939581168.png)
![image](https://img2024.cnblogs.com/blog/3155240/202404/3155240-20240415203221204-951034364.png)

第二步:把实体添加到DTO(数据上下文DbContext)

第三步:将Book实体映射到数据库表

第四步:执行一次数据迁移

创建应用程序

第一步:创建 BookDto实体类

第二步:CreateUpdateBookDto

第三步:IBookAppService

第四步:BookAppService

第五步:自动生成API Controllers

第六步:Swagger UI

ABP -Vnext框架一步一步入门落地教程——使用ABP -Vnext创建一个WEBAPI接口(二)的更多相关文章

  1. 一步一步学Silverlight 2系列(1):创建一个基本的Silverlight应用

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  2. ASP.NET Aries 入门开发教程2:配置出一个简单的列表页面

    前言: 朋友们都期待我稳定地工作,但创业公司若要躺下,也非意念可控. 若人生注定了风雨飘摇,那就雨中前行了. 最机开始看聊新的工作机会,欢迎推荐,创业公司也可! 同时,趁着自由时间,抓紧把这系列教程给 ...

  3. Docker入门(windows版),利用Docker创建一个Hello World的web项目

    Docker 当大家点开这篇博客的时候,相信大家对docker多多少少也有些认识了,最近学习docker这门技术,略微有些心得,写篇文章记录一下学习过程并帮大家跳过一些坑. docker的核心有两个, ...

  4. ABP VNext框架中Winform终端的开发和客户端授权信息的处理

    在ABP VNext框架中,即使在它提供的所有案例中,都没有涉及到Winform程序的案例介绍,不过微服务解决方案中提供了一个控制台的程序供了解其IDS4的调用和处理,由于我开发过很多Winform项 ...

  5. 系列文章--一步一步学Silverlight2

    概述 由TerryLee编写的<Silverlight 2完美征程>一书,已经上市,在该系列文章的基础上补充了大量的内容,敬请关注.官方网站:http://www.dotneteye.cn ...

  6. 一步一步学Silverlight 2系列文章

    概述 由TerryLee编写的<Silverlight 2完美征程>一书,已经上市,在该系列文章的基础上补充了大量的内容,敬请关注.官方网站:http://www.dotneteye.cn ...

  7. ASP.NET + MVC5 入门完整教程八 -—-- 一个完整的应用程序(上)

    https://blog.csdn.net/qq_21419015/article/details/80509513 SportsStore 1.开始创建Visual Studio 解决方案和项目这里 ...

  8. ASP.NET + MVC5 入门完整教程七 -—-- MVC基本工具(上)

    https://blog.csdn.net/qq_21419015/article/details/80474956 这里主要介绍三类工具之一的 依赖项注入(DI)容器,其他两类 单元测试框架和模仿工 ...

  9. BitAdminCore框架应用篇:(二)创建一个简单的增删改查模块

    NET Core应用框架之BitAdminCore框架应用篇系列 框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxin/cookie ...

  10. 超实用的Flask入门基础教程,新手必备!

    Flask入门基础教程 Flask简介 Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活.轻便.安全且容易上手.它可以很好地结合MVC模式进行开发,开发人员分工合 ...

随机推荐

  1. [.Net]使用Soa库+Abp搭建微服务项目框架(二):面向服务体系的介绍

    ​ 上一章我们建立了一个典型的面向领域设计的Abp小项目,如果按照常规的开发方式,会遇到什么问题呢? 先来完善一下这个小项目,在定义好各实体类后,运行Miguration并向数据库里写入一些初始数据. ...

  2. 4时4态 加被动 例句:I will have been being done - will have be be do - 频率副词位置

    4时4态 频率副词的用法和位置:放在实义动词之前.放在be 动词之后.放在情态动词之后. 频率副词的位置一般是放在实义动词之前.放在be 动词之后.放在情态动词之后.放在be动词之后:She is s ...

  3. C++实现一个简单的生产者-消费者队列

    本文的代码都是ChatGPT生成,我只是做了微小的调整和整合,AI提示词如下: 设计一个C++类,支持生产者-消费者模型,可以通过size函数获取剩余数量 可能第一次生成的不一定合适,多刷新几次. 生 ...

  4. pfx文件导出pem和私钥,更换网站域名证书

    openssl 路径: C:\Program Files\OpenSSL-Win64\bin -- 导出pem证书openssl pkcs12 -in C:\BackUp\Lightning\cert ...

  5. 编译器与Makefile

    编译器与Makefile 目录 编译器与Makefile gcc/g++/clang clang gcc g++ 编译器过程 Makefile 什么是Makefile Makefile规则 变量 in ...

  6. js使用typeof与instanceof相结合编写一个判断常见变量类型的函数

    /** * 常见类型判断 * @param {any} param */ function getParamType(param) { // 先判断是否能用typeof 直接判断 let types1 ...

  7. 瑞云科技联合飞蝶VR教育、大朋VR推出元宇宙 5G VR智慧教育整体解决方案

    近日,瑞云科技3DCAT实时渲染云与飞蝶VR.大朋VR达成深度合作.基于瑞云深度自研的实时渲染云技术.飞蝶VR教育内容资源的深厚积累以及大朋VR优秀的VR硬件产品力,三方针对元宇宙 5G VR智慧教育 ...

  8. 在 Windows 上利用Qwen大模型搭建一个 ChatGPT 式的问答小助手

    本文首发于公众号:Hunter后端 原文链接:在 Windows 上利用Qwen大模型搭建一个 ChatGPT 式的问答小助手 最近 ChatGPT 式的聊天机器人比较火,可以提供各种问答功能,阿里最 ...

  9. java 发送 http 请求练习两年半(HttpURLConnection)

    1.起一个 springboot 程序做 http 测试: @GetMapping("/http/get") public ResponseEntity<String> ...

  10. 记录--`ElementUI` 中的奇技淫巧

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 在ElementUI的世界中,不仅有基础的组件和功能,还有一些让你眼前一亮.*得不能再*的高级技巧和窍门.本文将揭示这些技巧,让你在前端开 ...