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

在官方开发教程这一段的内容叫做开发应用服务端,作为现在前后端分离的开发模式来说,一个应用就分为前端页面框架和后端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. linux下,使用nginx实现动静分离,访问图片报404

    一.需求描述 最近在开发一个微信小程序,由于微信小程序端代码包总大小限定在三四兆,所以有很多的图标资源就不能放在微信小程序中进行打包, 否则会超过微信的限制而无法打包.自己能够想到的最简单的办法就是将 ...

  2. 泰凌微TLSR825x智能照明解决方案开发之实例解析

    一 前记 前几天,看到了一个笑话,一个朋友在群里吼道,老婆送的皮带,用了半年之后,怎么里面掉出来一个电路板,这个是是啥? 笔者看了回复道,哥们,老婆不放心你啊. 在这个万物都可智能的时代,产品不加上智 ...

  3. linux c 打印时间最简单的实例

    最简单的代码,能够解决最棘手的问题,才是解决工程师的需要: #include <stdio.h> #include <time.h> #include <unistd.h ...

  4. [noip2015]运输计划(LCA,二分)

    运输计划[做题笔记] 挺难绷的... 题意 概括:给定 \(n\) 个节点的树和 \(n-1\) 条边的权值,现在可以将一条边的权值改为 \(0\) .找出一条边,使得将这条边权值赋为 \(0\) 时 ...

  5. 【leetcode 1799 N次操作后的最大分数和】状态压缩

    回溯会超时,状态压缩 class Solution { public int maxScore(int[] nums) { int len = nums.length; int size = 1 &l ...

  6. Kotlin 协程基础使用学习

    原文: Kotlin 协程基础使用学习-Stars-One的杂货小窝 本篇阅读可能需要以下知识,否则可能阅读会有些困难 客户端开发基础(Android开发或JavaFx开发) Java多线程基础 ko ...

  7. 你是怎么处理vue项目中的错误的?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.错误类型 任何一个框架,对于错误的处理都是一种必备的能力 在Vue 中,则是定义了一套对应的错误处理规则给到使用者,且在源代码级别,对 ...

  8. 记录-html-docs-js避坑指南

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 我们公司目前在做基于tiptap的在线协同文档,最近需要做导出 pdf.word 需求. 导出 word 文档使用的是html-do ...

  9. ubuntu18.04如何运行.exe文件

    在Ubuntu上安装Wine 到wine官网查看的安装步骤 如果您之前安装过来自其他仓库的 Wine 安装包,请在尝试安装 WineHQ 安装包之前删除它及依赖它的所有安装包(如:wine-mono. ...

  10. SQLServer递归触发器在KES中的一次改造分析

    文章概要: 某项目将数据从 SQLSERVER 迁移到 KES.其中SQLSERVER中触发器用到了 TRIGGER_NESTLEVEL() 函数,KES并不能直接支持该函数. 起初在分析该问题时想复 ...