为了不影响阅读的体验,我把系列导航放到文章最后了,有需要的小伙伴可以直接通过导航跳转到对应的文章 : P

TodoList需求简介

首先明确一下我们即将开发的这个TodoList应用都需要完成什么功能,我不会一次性把所有的特性诸如允许用户登陆之类的需求全部写上,只是先列出最基本的功能性需求:

  1. 我们可以维护一个TodoList。
  2. TodoList可以包含多个TodoItem。
  3. 对于TodoList,我们可以设置其名称
  4. 对于每个TodoItem,我们可以设置其内容,超期时间,是否完成。
  5. 对于所有实体,可以完成增删改查的操作。

开发工具

.NET 6

.NET 6这个没什么好说的,按照官方说明下载安装好就可以了。

Visual Studio Code

使用Visual Studio Code的原因是其免费,跨平台,功能足够用。虽然在智能补全上不如Visual StudioVisual Studio for Mac或者Rider强大,但是因为看这篇文章的你可能用不同的系统,不同的工具,所以我还是决定用所有平台都免费并且表现一致的IDE来进行演示,你可以任选一个自己已有的IDE进行开发。

当然为了顺利的使用VScode开发.NET 6 Web API项目,有一些扩展应用也是必须要安装的,在VSCode的Extension中搜索并安装以下扩展ID:

  • ms-dotnettools.csharp - 由OmniSharp提供的VSCode开发调试C#项目的必选项。
  • ms-azuretools.vscode-docker - Docker扩展。

Hoppscotch

大家可能对这个工具名字比较陌生,这是用于对Web API项目进行本地测试的工具。大家更熟悉Postman,而这款工具的前身叫做Postwoman,现在更名为Hoppscotch,使用Chrome内核的浏览器打开Hoppscotch后可以在地址栏上点击可用扩展标志,选择安装到本地,方便以后使用:

打开以后的界面长这样:

功能非常强大,测试Restful接口,GraphQL接口,实时通信接口(WebSocket/SSE/Socket.IO/MQTT)都可以,而且占用资源比Postman要低很多,颜值又高还免费……简直良心。

Clean Architecture简介

Clean Architecture是大神Robert C. Martin在自己的博客上发表的一篇关于如何组织应用程序结构和依赖关系来实现更好的独立、解耦的多层项目结构的方式,推荐大家有时间把这篇文章好好看一下。

经过长久的实践和演化,目前我个人觉得最简洁、使用起来最舒服的Clean Architecture结构是这样的:

搭建解决方案结构

# 创建解决方案目录
mkdir TodoList && cd TodoList # 创建解决方案
dotnet new sln -n TodoList # 按照clean architecture的项目结构,创建WebApi项目以及classlib项目
dotnet new webapi -f net6.0 -n TodoList.Api -o ./src/TodoList.Api
dotnet new classlib -f net6.0 -n TodoList.Application -o ./src/TodoList.Application
dotnet new classlib -f net6.0 -n TodoList.Domain -o ./src/TodoList.Domain
dotnet new classlib -f net6.0 -n TodoList.Infrastructure -o ./src/TodoList.Infrastructure # 按照clean architecture的结构和依赖关系,设置项目间的引用
# Application只依赖于Domain
dotnet add src/TodoList.Application/TodoList.Application.csproj reference src/TodoList.Domain/TodoList.Domain.csproj
# Infrastructure只依赖于Application
dotnet add src/TodoList.Infrastructure/TodoList.Infrastructure.csproj reference src/TodoList.Application/TodoList.Application.csproj
# Api依赖于Application和Infrastructure
dotnet add src/TodoList.Api/TodoList.Api.csproj reference src/TodoList.Application/TodoList.Application.csproj
dotnet add src/TodoList.Api/TodoList.Api.csproj reference src/TodoList.Infrastructure/TodoList.Infrastructure.csproj # 将所有项目添加到sln上
dotnet sln TodoList.sln add src/TodoList.Api/TodoList.Api.csproj
dotnet sln TodoList.sln add src/TodoList.Application/TodoList.Application.csproj
dotnet sln TodoList.sln add src/TodoList.Domain/TodoList.Domain.csproj
dotnet sln TodoList.sln add src/TodoList.Infrastructure/TodoList.Infrastructure.csproj

运行

在终端定位到当前解决方案目录里运行:

$ dotnet restore
Determining projects to restore...
Restored /Users/yu.li1/Projects/asinta/blogs/cnblogs/TodoList/src/TodoList.Application/TodoList.Application.csproj (in 206 ms).
Restored /Users/yu.li1/Projects/asinta/blogs/cnblogs/TodoList/src/TodoList.Infrastructure/TodoList.Infrastructure.csproj (in 206 ms).
Restored /Users/yu.li1/Projects/asinta/blogs/cnblogs/TodoList/src/TodoList.Api/TodoList.Api.csproj (in 306 ms).
1 of 4 projects are up-to-date for restore. $ dotnet run --project src/TodoList.Api/TodoList.Api.csproj
Building...
info: Microsoft.Hosting.Lifetime[14]
Now listening on: https://localhost:7039
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5050
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: /Users/yu.li1/Projects/asinta/blogs/cnblogs/TodoList/src/TodoList.Api/

使用Hoppscotch使用WebAPI项目自带的WeatherForecast接口查看项目是否运行成功:

项目结构到这里就搭建完成了,我们可以删除Api项目中的示例WeatherForecast相关的文件,以及三个类库项目中的Class1.cs文件。最终的项目结构长这样:

我们在后续的文章中会逐渐向其中加入更多的代码。

总结

这篇文章从需求开始,介绍了本系列中使用的工具,代码结构,并将项目初始化结束,我还没有解释每个项目文件的含义,但其实类似的内容已经有很多人写过了,可以参考下其他人的文章。

  • 使用.NET 6开发TodoList应用(1)——系列背景
  • 使用.NET 6开发TodoList应用(2)——项目结构搭建
  • 使用.NET 6开发TodoList应用(3)——引入第三方日志
  • 使用.NET 6开发TodoList应用(4)——引入数据存储
  • 使用.NET 6开发TodoList应用(5.0)——领域实体创建和配置
  • 使用.NET 6开发TodoList应用(5.1)——实现CQRS模式
  • 使用.NET 6开发TodoList应用(5.2)——实现AutoMapper
  • 使用.NET 6开发TodoList应用(6)——实现POST请求
  • 使用.NET 6开发TodoList应用(7)——实现GET请求
  • 使用.NET 6开发TodoList应用(8)——实现全局异常处理
  • 使用.NET 6开发TodoList应用(9)——实现PUT请求
  • 使用.NET 6开发TodoList应用(10)——实现PATCH请求
  • 使用.NET 6开发TodoList应用(11)——HTTP请求幂等性的考虑
  • 使用.NET 6开发TodoList应用(12)——实现接口请求验证
  • 使用.NET 6开发TodoList应用(13)——实现ActionFilter
  • 使用.NET 6开发TodoList应用(14)——实现查询分页
  • 使用.NET 6开发TodoList应用(15)——实现查询过滤
  • 使用.NET 6开发TodoList应用(16)——实现查询搜索
  • 使用.NET 6开发TodoList应用(17)——实现查询排序
  • 使用.NET 6开发TodoList应用(18)——实现数据塑形
  • 使用.NET 6开发TodoList应用(19)——实现HATEAOS支持
  • 使用.NET 6开发TodoList应用(20)——处理OPTION和HEAD请求
  • 使用.NET 6开发TodoList应用(21)——实现Root Document
  • 使用.NET 6开发TodoList应用(22)——实现API版本控制
  • 使用.NET 6开发TodoList应用(23)——实现缓存
  • 使用.NET 6开发TodoList应用(24)——实现请求限流和阈值控制
  • 使用.NET 6开发TodoList应用(25)——实现基于JWT的Identity功能
  • 使用.NET 6开发TodoList应用(26)——实现RefreshToken
  • 使用.NET 6开发TodoList应用(27)——实现Configuration和Option的强类型绑定
  • 使用.NET 6开发TodoList应用(28)——实现API的Swagger文档化
  • 使用.NET 6开发TodoList应用(29)——实现应用程序健康检查
  • 使用.NET 6开发TodoList应用(30)——实现本地化功能
  • 使用.NET 6开发TodoList应用(31)——实现Docker打包和部署
  • 使用.NET 6开发TodoList应用(32)——实现基于Github Actions和ACI的CI/CD

使用.NET 6开发TodoList应用(2)——项目结构搭建的更多相关文章

  1. vue2项目结构搭建

    vue2项目结构初搭建与项目基本流程 一.开始项目结构搭建的重要性 决定项目是否能够健康成长 决定了项目是否利于多人协作开发 决定了项目是否利于后期维护 决定了项目是否性能良好 决定了代码是否重用率降 ...

  2. NET 项目结构搭建

    NET 项目结构搭建 我们头开始,从简单的单项目解决方案,逐步添加业务逻辑的约束,从应用逻辑和领域逻辑两方面考虑,从简单的单个项目逐步搭建一个多项目的解决方案.主要内容:(1)搭建应用逻辑和领域逻辑都 ...

  3. SpringMVC+Spring+mybatis项目从零开始--分布式项目结构搭建

    转载出处: SpringMVC+Spring+mybatis+Redis项目从零开始--分布式项目结构搭建 /** 本文为博主原创文章,如转载请附链接. **/ SSM框架web项目从零开始--分布式 ...

  4. .NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI

    作为后端开发的我来说,前端表示真心玩不转,你如果让我微调一个位置的样式的话还行,但是让我写一个很漂亮的后台的话,真心做不到,所以我一般会选择套用一些开源UI模板来进行系统UI的设计.那如何套用呢?今天 ...

  5. [Vue 牛刀小试]:第十六章 - 针对传统后端开发人员的前端项目框架搭建

    一.前言 在之前学习 Vue 基础知识点的文章中,我们还是采用传统的方式,通过在 html 页面上引用 vue.js 这个文件,从而将 Vue 引入到我们的项目开发中.伴随着 Node.js 的出现, ...

  6. weex 项目开发(四)项目框架搭建 及 自定义 TabBar 组件

    1.安装  路由模块  及  状态管理模块 npm install vue-router --save npm install vuex --save 2.自定义  TabBar  组件 src / ...

  7. 架构系列:ASP.NET 项目结构搭建

    我们头开始,从简单的单项目解决方案,逐步添加业务逻辑的约束,从应用逻辑和领域逻辑两方面考虑,从简单的单个项目逐步搭建一个多项目的解决方案.主要内容:(1)搭建应用逻辑和领域逻辑都简单的单项目 (2)为 ...

  8. MVC 实用构架实战(一)——项目结构搭建

    一.前言 在<上篇>中,已经把项目整体结构规划做了个大概的规划.在本文中,将使用代码的方式来一一解说各个层次.由于要搭建一个基本完整的结构,可能文章会比较长.另外,本系列主要出于实用的目的 ...

  9. vue2.0 仿手机新闻站(二)项目结构搭建 及 路由配置

    1.项目结构 $ vue init webpack-simple news $ npm install vuex vue-router axios style-loader css-loader -D ...

随机推荐

  1. 【Tool】IDEA功能--SVN和Git

    IDEA功能--SVN和Git 2019-11-08  21:12:22  by冲冲 1.IDEA的SVN (1)提交项目代码到SVN服务器 ① 指定不用上传的目录 ② 设置项目上传的路径 SVN服务 ...

  2. IE 跨域设置

    开发的时候会发现IE下跨域无法访问,报错: Failed to load resource: net::ERR_CONNECTION_REFUSED 解决方法有两种: 自己写代理服务,访问代理服务,代 ...

  3. Qt Creator 源码学习笔记03,大型项目如何管理工程

    阅读本文大概需要 6 分钟 一个项目随着功能开发越来越多,项目必然越来越大,工程管理成本也越来越高,后期维护成本更高.如何更好的组织管理工程,是非常重要的 今天我们来学习下 Qt Creator 是如 ...

  4. LOJ #2185 / 洛谷 P3329 - [SDOI2015]约数个数和(莫比乌斯函数)

    LOJ 题面传送门 / 洛谷题面传送门 题意: 求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^md(ij)\),\(d(x)\) 为 \(x\) 的约数个数. \( ...

  5. Git常用操作(二)

    仓库拉取 git clone XXX 修改仓库链接 $ git config -l # 显示coding列表 $ git config --get remote.origin.url # 返回orig ...

  6. Glib 对 C 函数进行单元测试

    1. Glib 单元测试框架 Glib 为单元测试提供了一套完整的测试框架,每个测试运行包括以下几个部分 测试数据结构 测试 setup 与 teardown 函数 测试函数 2. 单元测试数据结构 ...

  7. FVCOM编译过程详解

    本文目的旨在介绍fvcom编译的全过程,顺便介绍linux中make命令的文件写法和一般的编程过程简述一下. 1.编程过程 编程,一般就是编写可执行程序过程.这个过程主要是源文件生成中间代码文件,再到 ...

  8. Linux升级命令yum upgrade和yum update的区别

    Linux升级命令有两个分别是yum upgrade和yum update, 这个两个命令是有区别的: yum -y update 升级所有包同时也升级软件和系统内核 yum -y upgrade 只 ...

  9. Oracle-一张表中增加计算某列值重复的次数列,并且把表中其他列也显示出来,或者在显示过程中做一些过滤

    总结: 1.计算某列值(数值or字符串)重复的次数 select 列1,count( 列1 or *) count1  from table1 group by 列1 输出的表为:第一列是保留唯一值的 ...

  10. Python3调用C程序(超详解)

    Python3调用C程序(超详解) Python为什么要调用C? 1.要提高代码的运算速度,C比Python快50倍以上 2.对于C语言里很多传统类库,不想用Python重写,想对从内存到文件接口这样 ...