五分钟完成 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;给开发者的工具箱又…

[蓝桥杯][算法提高VIP]凶手-思维

题目描述 巴斯维克命案抓住了六个嫌疑犯&#xff0c;他们的口供如下&#xff1a; A&#xff1a;我不是罪犯 B&#xff1a;A、C中有一个是罪犯 C&#xff1a;A和B说了假话 D&#xff1a;C和F说了假话 E&#xff1a;其他五个人中&#xff0c;只有A和D说了真话 F&#xff1a;我是罪…

php mysql 子查询_php – MySQL查询和子查询

我有这样的查询&#xff1a;SELECT SUM(price) AS GINTO,((SELECT COUNT(price)*9.99 FROM sms_logs WHERE price 200000)(SELECT COUNT(price)*3.99 FROM sms_logs WHERE price 60000)(SELECT COUNT(price)*1.99 FROM sms_logs WHERE price 24000)(SELECT COUNT(price)*0.9…

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

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

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

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

sas sql中有类似mysql的 g_SAS中的SQL

自我愚见&#xff0c;望有错指出改之。/*SQL 学习*//*数据定义语言(DDL)&#xff1a;create、drop、alter*//*数据操作语言(DML)&#xff1a;insert、update、delete*//*数据查询语言(DQL)&#xff1a;select*//*数据控制语言(DCL)&#xff1a;grant、remove、commit、rollback…

论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…

mysql innodb status_查看innodb的运行状态

show innodb status 在以后的mysql版本将会被show engine innodb status所替代。总所周知show engine innodb status是用来查看当前的mysql数据库中innodb表的相关状态。1&#xff1a;show engine innodb status。-----------------------------------| Type | Name | Status |…

[蓝桥杯][算法提高VIP]扫雷-枚举

题目描述 扫雷游戏你一定玩过吧&#xff01;现在给你若干个nm的地雷阵&#xff0c;请你计算出每个矩阵中每个单元格相邻单元格内地雷的个数&#xff0c;每个单元格最多有8个相邻的单元格。 0< n,m< 100 &#xff08;注意两个矩阵之间应该有一个空行&#xff0c;由于oj的…

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

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