.NET 项目重构之DDD分层搭建

发布时间 2023-07-25 10:05:19作者: HOYU_Z

1. 目录

2. 背景

好久没有做国内项目了,也好久没有重构项目了。正好手里有一个定时服务需要重构, 就想着正好称着这个机会学一点点新的知识。比如DDD。

3. 环境

Windows 11 、Visual Studio 2022 、.NET 7 、SqlServer2022

4. 项目搭建

在项目文件夹中依次执行这些命令,或者放在PowerShell脚本里执行。

这里需要说明一下第一个项目创建的是MVC项目,选择MVC的原因有两个:

第一,可以加入SwaggerUI 跳过定时任务直接调试代码。

第二,可以在图形页面中查看该项目的异常信息。

mkdir 01-Presentation
mkdir 02-Application
mkdir 03-Domain
mkdir 04-Infrastructure

dotnet new mvc -n QuartzServices.Web -o ./01-Presentation/QuartzServices.Web
dotnet new classlib -n QuartzServices.Application -o ./02-Application/QuartzServices.Application
dotnet new classlib -n QuartzServices.Domain -o ./03-Domain/QuartzServices.Domain
dotnet new classlib -n QuartzServices.Domain.Core -o ./03-Domain/QuartzServices.Domain.Core
dotnet new classlib -n QuartzServices.Infrastructure -o ./04-Infrastructure/QuartzServices.Infrastructure

dotnet new sln -n QuartzServices

dotnet sln add ./01-Presentation/QuartzServices.Web/QuartzServices.Web.csproj
dotnet sln add ./02-Application/QuartzServices.Application/QuartzServices.Application.csproj
dotnet sln add ./03-Domain/QuartzServices.Domain/QuartzServices.Domain.csproj
dotnet sln add ./03-Domain/QuartzServices.Domain.Core/QuartzServices.Domain.Core.csproj
dotnet sln add ./04-Infrastructure/QuartzServices.Infrastructure/QuartzServices.Infrastructure.csproj

创建完, 目录结构如下:


├─01-Presentation
│  └─QuartzServices.Web
│      │  appsettings.Development.json
│      │  appsettings.json
│      │  Program.cs
│      │  QuartzServices.Web.csproj
│      │  QuartzServices.Web.csproj.user
│      │
│      ├─Controllers
│      │      HomeController.cs
│      │
│      ├─Models
│      │      ErrorViewModel.cs
│      │
│      ├─Properties
│      │      launchSettings.json
│      │
│      ├─Views
│      │  │  _ViewImports.cshtml
│      │  │  _ViewStart.cshtml
│      │  │
│      │  ├─Home
│      │  │      Index.cshtml
│      │  │      Privacy.cshtml
│      │  │
│      │  └─Shared
│      │          Error.cshtml
│      │          _Layout.cshtml
│      │          _Layout.cshtml.css
│      │          _ValidationScriptsPartial.cshtml
│      │
│      └─wwwroot
│          │  favicon.ico
│          │
│          ├─css
│          │      site.css
│          │
│          ├─js
│          │      site.js
│          │
│          └─lib
│              ├─bootstrap
│              │  │  LICENSE
│              │  │
│              │  └─dist
│              │      ├─css
│              │      │      bootstrap-grid.css
│              │      │      bootstrap-grid.css.map
│              │      │      bootstrap-grid.min.css
│              │      │      bootstrap-grid.min.css.map
│              │      │      bootstrap-grid.rtl.css
│              │      │      bootstrap-grid.rtl.css.map
│              │      │      bootstrap-grid.rtl.min.css
│              │      │      bootstrap-grid.rtl.min.css.map
│              │      │      bootstrap-reboot.css
│              │      │      bootstrap-reboot.css.map
│              │      │      bootstrap-reboot.min.css
│              │      │      bootstrap-reboot.min.css.map
│              │      │      bootstrap-reboot.rtl.css
│              │      │      bootstrap-reboot.rtl.css.map
│              │      │      bootstrap-reboot.rtl.min.css
│              │      │      bootstrap-reboot.rtl.min.css.map
│              │      │      bootstrap-utilities.css
│              │      │      bootstrap-utilities.css.map
│              │      │      bootstrap-utilities.min.css
│              │      │      bootstrap-utilities.min.css.map
│              │      │      bootstrap-utilities.rtl.css
│              │      │      bootstrap-utilities.rtl.css.map
│              │      │      bootstrap-utilities.rtl.min.css
│              │      │      bootstrap-utilities.rtl.min.css.map
│              │      │      bootstrap.css
│              │      │      bootstrap.css.map
│              │      │      bootstrap.min.css
│              │      │      bootstrap.min.css.map
│              │      │      bootstrap.rtl.css
│              │      │      bootstrap.rtl.css.map
│              │      │      bootstrap.rtl.min.css
│              │      │      bootstrap.rtl.min.css.map
│              │      │
│              │      └─js
│              │              bootstrap.bundle.js
│              │              bootstrap.bundle.js.map
│              │              bootstrap.bundle.min.js
│              │              bootstrap.bundle.min.js.map
│              │              bootstrap.esm.js
│              │              bootstrap.esm.js.map
│              │              bootstrap.esm.min.js
│              │              bootstrap.esm.min.js.map
│              │              bootstrap.js
│              │              bootstrap.js.map
│              │              bootstrap.min.js
│              │              bootstrap.min.js.map
│              │
│              ├─jquery
│              │  │  LICENSE.txt
│              │  │
│              │  └─dist
│              │          jquery.js
│              │          jquery.min.js
│              │          jquery.min.map
│              │
│              ├─jquery-validation
│              │  │  LICENSE.md
│              │  │
│              │  └─dist
│              │          additional-methods.js
│              │          additional-methods.min.js
│              │          jquery.validate.js
│              │          jquery.validate.min.js
│              │
│              └─jquery-validation-unobtrusive
│                      jquery.validate.unobtrusive.js
│                      jquery.validate.unobtrusive.min.js
│                      LICENSE.txt
│
├─02-Application
│  └─QuartzServices.Application
│        Class1.cs
│        QuartzServices.Application.csproj
│      
├─03-Domain
│  ├─QuartzServices.Domain
│  │    Class1.cs
│  │    QuartzServices.Domain.csproj
│  └─QuartzServices.Domain.Core
│       Class1.cs
│       QuartzServices.Domain.Core.csproj
│      
└─04-Infrastructure
    └─QuartzServices.Infrastructure
        Class1.cs
        QuartzServices.Infrastructure.csproj
        

5. 结语

这样整个项目的基本层级关系就搭建完成了,接下来接入日志相关服务。