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

在官方开发教程这一段的内容叫做开发应用服务端,作为现在前后端分离的开发模式来说,一个应用就分为前端页面框架和后端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. Spring事务(三)-事务传播行为

    在Spring里,一个事务方法被另外一个事务方法调用时,两个方法的事务应该如何进行,说白话一点,就是说当出现异常需要回滚时,各个方法的数据操作是否要全部回滚,事务传播行为就是决定了这样的一个处理结果. ...

  2. 用Python编写自己的微型Redis

    building-a-simple-redis-server-with-python 前几天我想到,写一个简单的东西会很整洁 雷迪斯-像数据库服务器.虽然我有很多 WSGI应用程序的经验,数据库服务器 ...

  3. Android Studio源码导入与调试

    从事Android开发都需要涉及到Android源码的阅读,特别是系统应用或者Framework开发,读代码的时间远远比写代码的时间更多. 一. 生成iml与ipr 在Android Studio中导 ...

  4. LinuxDNS分析从入门到放弃(记一次有趣的dns问题排查记录,ping 源码分析,getaddrinfo源码分析)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明   ubuntu 18.04 前言   我们这里有一块 ...

  5. OSI七层协议和TCP/IP五层协议

      OSI七层模型概略: OSI 中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 HTTP,SMTP,FTP,DNS 表示层 数据压缩,解压,数据加密 无 会话层 解 ...

  6. springboot 在 yaml 文件中读取 pom 文件的 properties

    如果没有其他配置,只能读取 yaml 文件所在模块下 和 父级模块的 pom 的 properties,以下是配置: <properties> <revision>1.0< ...

  7. Cesium之双屏联动实现

    1. 概述 双屏联动是常见的一种地图开发需求,主要用于同时查看两个地图,进行对比查看,还有一种类似的需求叫"卷帘门"(map split) 双屏联动效果如下: 卷帘门的效果如下: ...

  8. 记录-js基础练习题

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 隔行换色(%): window.onload = function() { var aLi = document.getElementsB ...

  9. Informix日志报错:Could not do a physical-order read to fetch netxt row

    jmeter请求接口,1线程不报错,2线程及以上报错"无法执行查询",看后台日志,报错Could not do a physical-order read to fetch net ...

  10. MySQL报语法错误,排查竟然花了一个钟!!!!

    背景:最近协助远程同事开发一个功能,我调用同事写的接口,出现报错,影响和前端联调,同事正在处理其他事情,暂时无暇顾及.遂自行解决.查看日志现发一个inser语句报语法错误. 异常日志: bad SQL ...