五分钟完成 ABP vNext 通讯录 App 开发

ABP vNext(后文简称Abp)是 Volo 公司堪称艺术品级的应用开发框架,它基于领域驱动设计(DDD)的思维,创新地采用了模块化的设计。Abp 目前无疑是 ASP.NET Core 开发框架中最先进和最优雅的存在。笔者认为,凭借绝妙的模块化设计和丝滑的开发体验,Abp 有望超越 Spring 家族在历史上的影响力。

模块开发与应用开发的关系

使用 Abp 框架,你可以提前制作一些功能模块,例如微信登录、私信、博客、论坛等模块,将它们打包备用。在开发具体的 App 应用时,你可以轻松将模块安装到你的工程中,节省了大量的重复性工作。除了自己造轮子,你还可以在 NuGet 上安装由开源社区维护的模块,当然,社区也在等待你的贡献。

五分钟完成通讯录 App 开发

今天我们不讲模块开发,而是从最简单的应用开发入手,笔者将遵循 Abp 最佳实践,带你体验如何在 5 分钟内,使用 Abp 框架开发一个通讯录 App。

第一步:使用 ABP CLI 生成项目

  1. 命令行安装 ABP CLI:dotnet tool install -g Volo.Abp.Cli

  2. 命令行生成通讯录 App 项目:abp new AddressBook(将在当前目录中生成项目)

第二步:创建“联系人”实体

在 Abp 中,联系人应为聚合根 AggregateRoot,详细请参考 Abp 官方手册对于领域驱动设计(DDD)的讲解。

  1. 新建 aspnet-core/src/AddressBook.Domain/Contacts 目录

  2. 在目录下手动创建 Contact.cs 文件

    public class Contact : AggregateRoot<Guid>{public virtual string Name { get; protected set; }public virtual string PhoneNumber { get; protected set; }public virtual string Address { get; protected set; }public virtual byte? Age { get; protected set; }public virtual DateTime? Birthday { get; protected set; }protected Contact() { }public Contact(Guid id,string name,string phoneNumber,string address,byte? age,DateTime? birthday) : base(id){Name = name;PhoneNumber = phoneNumber;Address = address;Age = age;Birthday = birthday;}}
  1. 运行 Address.DbMigrator 项目,这是为了给数据库建立基础结构和数据

第三步:使用 AbpHelper 生成剩余代码

  1. 下载 AbpHelper GUI:https://github.com/EasyAbp/AbpHelper.GUI/releases

  2. 使用 Code Generator 功能,一键生成与 Contact 相关的全套代码:

如果你更习惯命令行操作,可以使用 AbpHelper CLI:https://github.com/EasyAbp/AbpHelper.CLI

第四步:开发完毕

  1. 启动 AddressBook.Web 项目

  2. 登录并使用通讯录(admin 用户的默认密码是 1q2w3E*

你一定注意到了,表单已被 abp-dynamic-form TagHelper 自动生成。另外,你只需要简单的修改本地化文件,就能显示出中文词汇,这里我们不做演示。

后记

我们的通讯录项目天然包含:用户权限角色管理、多租户 SaaS 支持,如果你打算系统的学习 Abp 框架,请阅读官方手册:https://docs.abp.io

文中使用的 AbpHelper 是由国内爱好者创建的 EasyAbp 开源组织制作的开发工具集,能明显提高你的开发效率,并且完全免费。此外,EasyAbp 还提供了很多实用的模块,了解更多:https://github.com/EasyAbp/EasyAbpGuide

下一节

在下一节中,笔者将会介绍,如何给通讯录安装私信模块。此模块由 EasyAbp 组织开发并持续维护,你甚至可以在商业项目中免费使用它。

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

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

相关文章

mysql 5.74安装教程_MySQL安装、基本账户安全(5.0以后版本)

-----------MySQL 5.0以后版本的安装-----------MySQL安装安装包学习的必杀绝技——就是阅读包的安装说明(readme & install)文档。----------# rm /etc/my.cnf (安装前执行一下)----------1.Mysql-5.0.40.tar.gz1.1.Source Installation Overview(lines 74 of …

使用GUI工具Portainer.io管控Docker容器

背景5年前容器技术扑面而来&#xff0c;如今已经成为面向云原生开发的基础架构&#xff0c;基于微服务的设计需要部署大量容器&#xff0c;同时强调了友好快速的管理容器。是时候推荐一个轮子Portainer.io&#xff1a;提供GUI界面的容器管理工具&#xff0c;给开发者的工具箱又…

【项目升级】集成Quartz.Net Job实现(一)

这两天的新闻也是越来越多了&#xff0c;不仅Github接手了NPM&#xff0c;还有.NET 5也要新鲜出炉了&#xff08;11月正式发布&#xff09;&#xff0c;当然还有MVP峰会也正在如火如荼的展开&#xff0c;会有哪些好的东西被碰撞出来&#xff0c;也是很期待的。这些天我也简单的…

DevC++如何安装自定义头文件并使用

首先我们打开DevC&#xff0c;然后点击新建。 新建一个控制台应用程序 取一个喜欢的文件名。 然后会出现如下界面。 点击新建单元 将头文件源码放入 找到空白位置&#xff0c;右键&#xff0c;然后点关闭并保存 保存的文件名要为头文件的名字 使用这个头文件时&#xff0c;只…

论ORM之EFCore初篇(快速基于本地数据库实现数据操作)

欢迎大家阅读《朝夕Net社区技术专刊》第6期我们致力于.NetCore的推广和落地&#xff0c;为更好的帮助大家学习&#xff0c;方便分享干货&#xff0c;特创此刊&#xff01;很高兴你能成为忠实读者&#xff0c;文末福利不要错过哦&#xff01;前言&#xff1a;今天准备带大家一站…

C++变量的初始化问题及列表初始化

在C中&#xff0c;初始化是一个异常复杂的问题&#xff0c;很多人认为初始化是赋值的一种&#xff0c;事实上&#xff0c;初始化和赋值是两个完全不同的操作。 列表初始化 要定义一个名为haif的int变量并初始化为0&#xff0c;以下4条语句都可以做到。 int haif 0; int hai…

c++ set 遍历_47. Set 是如何工作的(3) 遍历顺序是如何确定的?

Set 是无序容器&#xff0c;它的插入顺序与迭代&#xff08;或者 print&#xff09;输出的顺序不保证与插入顺序一致&#xff0c;与 Dict 类似的问题&#xff0c;Set 的输出顺序是如何决定的呢&#xff1f;首先我们从 Set 的输出开始寻找蛛丝马迹&#xff0c;在 Dict 的研究中&…

跟着“土牛”学架构知识

这里的土牛是指abp的作者&#xff0c;土耳其人&#xff0c;简称“土牛”&#xff0c;前两天看了他分享的ppt&#xff0c;这里做个小笔记。架构分层图一&#xff08;abp作者&#xff09;图二&#xff08;clean架构&#xff09;图三&#xff08;在朋友圈看到的&#xff09;每种架…

《C++ Primer》2.6.1节练习

练习2.39&#xff1a; 在类体花括号后加一个分号就好了。 练习2.40&#xff1a; 代码如下&#xff1a; struct Sales_data{std::string bookNo;//书籍编号unsigned units_sold 0;//销售量double sellingprice 0.0;//零售价double saleprice 0.0//实售价double discount 0…

Cef mysql.exe_CEF3.2623使用记录:windows编译

CEF3.2623使用记录&#xff1a;windows编译1&#xff1a;cef3.2623下载地址2623是cef3最后一个支持xp系统的版本&#xff0c;且可以支持html的audio标签&#xff0c;可以用作对html音频的处理下载地址为 https://bitbucket.org/chromiumembedded/cef/branch/2623。下载win32版本…

Asp.Net Core 中IdentityServer4 授权流程及刷新Token

一、前言上面分享了IdentityServer4 两篇系列文章&#xff0c;核心主题主要是密码授权模式及自定义授权模式&#xff0c;但是仅仅是分享了这两种模式的使用&#xff0c;这篇文章进一步来分享IdentityServer4的授权流程及refreshtoken。系列文章目录(没看过的先看这几篇文章再来…

C++关于const限定符,这一篇足够!!!

C关于const限定符&#xff0c;这一篇足够&#xff01;&#xff01;!const限定符初始化和constconst引用初始化和对const的引用对const的引用可能引用一个并非const对象指针和constconst指针顶层constconst限定符 有时候我们希望定义这样一种变量&#xff0c;它的值不能被改变。…

liunx版mysql服务无法启动_linux环境下mysql无法启动

无论发现怎样的问题&#xff0c;首先查看err日志。问题一&#xff1a;查询err日志显示权限问题。分析&#xff1a;mysql原本是所属mysql用户&#xff0c;如果在root用户下启动就有可能出现问题。解决&#xff1a;(1)查看mysql的权限(2)发现有root权限&#xff0c;混乱了。所以先…

玩转控件:重写/重绘Dev中MessageBox弹窗控件

很久没有更新博客了&#xff0c;本想着直接发一篇《手撕ERP》系列&#xff0c;从控件重写、重绘&#xff0c;到框架搭建&#xff0c;再到部分模块实现业务的。但是每次动手的时候&#xff0c;都觉得难以下手。直接从数据库设计开始吧&#xff0c;模块设计还没定下来&#xff0c…

.NET Core开发实战(第26课:工程结构概览:定义应用分层及依赖关系)--学习笔记...

26 | 工程结构概览&#xff1a;定义应用分层及依赖关系从这一节开始进入微服务实战部分这一节主要讲解工程的结构和应用的分层在应用的分层这里定义了四个层次&#xff1a;1、领域模型层2、基础设施层3、应用层4、共享层可以通过代码来看一下源码链接&#xff1a;https://githu…

容器网络是如何影响Kubernetes中数据库性能的?

关于Kubernetes中的数据库&#xff0c;大家最关心的第一个问题是性能。由于这种担心的存在&#xff0c;许多使用Kubernetes进行生产应用程序工作的客户正在Kubernetes之外的裸机或VM上运行数据库。因此&#xff0c;我们致力于深入研究Kubernetes抽象层&#xff0c;确定值得测试…

mysql php状态函数_mysql_stat()查询MySQL服务器当前系统状态

mysql教程&#xff1a;mysql_stat()查询MySQL服务器当前系统状态 定义和用法 mysql_stat() 函数返回 MySQL 服务器的当前系统状态。 如果成功&#xff0c;则该函数返回状态。如果失败&#xff0c;则返回 false。 语法 mysql_stat(connection)参数 描述 connection 可mysql教程&…

聊聊面试的事(应聘方)

这里是Z哥的个人公众号每周五11&#xff1a;45 按时送达当然了&#xff0c;也会时不时加个餐&#xff5e;我的第「134」篇原创敬上原本春节长假之后会有不少人开始新的面试之旅。但是疫情的到来打乱了这个节奏&#xff0c;包括招聘方的计划。因此&#xff0c;在以往是金三银四的…

mysql边备份边导入么_MySQL 怎么导入导出操作

mysql 如何导入导出操作1、MySQL 如何导入导出个别需要数据记录&#xff1f;– 先导出数据所在的表结构&#xff1a;mysql> show create table CHARBASE into outfile “/db/mysql/RS.sql” ;– 将需要单独导出的内容存放在文本文件里&#xff0c;这里一定要注意存放的位置必…

Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(三)

在前面两篇文章中&#xff0c;我介绍了基于IdentityServer4的一个Identity Service的实现&#xff0c;并且实现了一个Weather API和基于Ocelot的API网关&#xff0c;然后实现了通过Ocelot API网关整合Identity Service做身份认证的API请求。今天&#xff0c;我们进入前端开发&a…