柚子快報(bào)邀請(qǐng)碼778899分享:c# 系統(tǒng)架構(gòu)分析
柚子快報(bào)邀請(qǐng)碼778899分享:c# 系統(tǒng)架構(gòu)分析
一、速通一圖流
二、系統(tǒng)架構(gòu)功能、作用分析
1. Furion:框架核心層
功能:這是 Furion 框架的核心層,通常包含框架本身的基本功能和配置。這一層應(yīng)該是比較穩(wěn)定的,不應(yīng)該包含業(yè)務(wù)邏輯,而是提供項(xiàng)目其他部分需要依賴的基礎(chǔ)設(shè)施功能。作用:為整個(gè)應(yīng)用程序提供通用的功能支持和框架級(jí)別的配置。例如,依賴注入配置、全局異常處理、日志管理等。
2. Furion.Application:業(yè)務(wù)應(yīng)用層
功能:這一層主要負(fù)責(zé)業(yè)務(wù)邏輯的實(shí)現(xiàn),是應(yīng)用程序的核心部分。所有與業(yè)務(wù)相關(guān)的代碼,比如服務(wù)層、用例邏輯、應(yīng)用程序的核心功能實(shí)現(xiàn)等,都會(huì)寫在這里。作用:封裝業(yè)務(wù)邏輯,確保業(yè)務(wù)規(guī)則和流程的一致性。這一層不應(yīng)該直接處理數(shù)據(jù)訪問(那是倉儲(chǔ)層的職責(zé)),而是通過依賴注入使用倉儲(chǔ)層提供的數(shù)據(jù)訪問功能。
3. Furion.Core:核心層
功能:這一層通常包含應(yīng)用程序的核心基礎(chǔ)設(shè)施,如實(shí)體定義、倉儲(chǔ)接口、領(lǐng)域模型等。核心層應(yīng)該是輕量級(jí)的,并且不依賴于其他實(shí)現(xiàn)細(xì)節(jié)(例如數(shù)據(jù)庫訪問層)。作用:定義核心業(yè)務(wù)對(duì)象和基礎(chǔ)設(shè)施代碼,供應(yīng)用層和數(shù)據(jù)訪問層使用。這一層關(guān)注于領(lǐng)域模型和接口定義,確保應(yīng)用的核心業(yè)務(wù)邏輯可以獨(dú)立于具體的技術(shù)實(shí)現(xiàn)進(jìn)行開發(fā)和測(cè)試。
4. Furion.Database.Migrations:EF Core 架構(gòu)遷移文件層
功能:這一層專門用于存放 EF Core 的數(shù)據(jù)庫遷移文件。這些文件包含了數(shù)據(jù)庫架構(gòu)的變更記錄,EF Core 通過這些遷移文件來保持?jǐn)?shù)據(jù)庫和應(yīng)用程序模型之間的一致性。作用:管理數(shù)據(jù)庫架構(gòu)的變更和遷移,是數(shù)據(jù)庫與應(yīng)用程序之間的一座橋梁。開發(fā)人員可以通過遷移來應(yīng)用或回滾數(shù)據(jù)庫的變更。
5. Furion.EntityFramework.Core:EF Core 配置層
功能:這一層負(fù)責(zé)配置和**管理 EF Core,**通常包括 DbContext 的配置、模型創(chuàng)建規(guī)則、數(shù)據(jù)庫上下文的注入和數(shù)據(jù)訪問的具體實(shí)現(xiàn)等。作用:集中管理 EF Core 的配置和數(shù)據(jù)訪問邏輯,為業(yè)務(wù)層提供數(shù)據(jù)操作的基礎(chǔ)設(shè)施。這個(gè)層次將數(shù)據(jù)訪問與業(yè)務(wù)邏輯分離,遵循依賴倒置原則。
6. Furion.Web.Core:Web 核心層
功能:這一層包含了與 Web 相關(guān)的公共代碼,如過濾器、中間件、Web Helpers 等。通常是跨多個(gè)控制器或模塊共享的通用代碼,確保 Web 請(qǐng)求處理的通用邏輯集中管理。作用:為 Web 層提供通用功能支持,如請(qǐng)求過濾、授權(quán)認(rèn)證、跨域配置、異常處理等。通過這一層,Web 層的代碼可以更加簡(jiǎn)潔且專注于業(yè)務(wù)功能的實(shí)現(xiàn)。
7. Furion.Web.Entry:Web 入口層/啟動(dòng)層
功能:這是 Web 應(yīng)用程序的入口點(diǎn),通常包含程序啟動(dòng)類(如 Program.cs)和 Startup.cs,用于配置應(yīng)用程序啟動(dòng)時(shí)所需的所有服務(wù)和中間件。作用:配置應(yīng)用程序的啟動(dòng)流程,包括依賴注入的初始化、路由配置、應(yīng)用中間件管道的設(shè)置等。這一層負(fù)責(zé)將整個(gè)應(yīng)用程序整合起來,并將其運(yùn)行在 Web 服務(wù)器上。
三、初級(jí)后端工程師開發(fā)特別要注意的具體結(jié)構(gòu)
1. Application 項(xiàng)目
1.1 項(xiàng)目作用
Application 項(xiàng)目主要負(fù)責(zé)服務(wù)類的實(shí)現(xiàn)、數(shù)據(jù)傳輸對(duì)象(DTO)的定義,以及接口的定義。它是應(yīng)用程序的業(yè)務(wù)邏輯層,通過定義和實(shí)現(xiàn)服務(wù)來處理業(yè)務(wù)規(guī)則,并通過 DTO 進(jìn)行數(shù)據(jù)傳輸。
1.2 書寫方式
項(xiàng)目名稱:Test.Admin.Application
文件夾結(jié)構(gòu):
接口定義:放置用于定義服務(wù)接口的文件夾。
Dtos:包含具體的數(shù)據(jù)傳輸對(duì)象(DTOs)。 服務(wù)類:包含業(yè)務(wù)邏輯的實(shí)現(xiàn)類。 基礎(chǔ)服務(wù)類:BaseService.cs,用于封裝公共的業(yè)務(wù)邏輯或服務(wù)功能。全局引用文件:GlobalUsings.cs,用于定義常用的 using 指令,以避免在每個(gè)文件中重復(fù)引用。
1.3 例子
接口定義:File 上傳 具體的數(shù)據(jù)對(duì)象:
namespace Easy.Admin.Application.File.Dtos
{
public class UploadFileOutput
{
///
/// 文件名
///
public string Name { get; set; }
///
/// 附件鏈接
///
public string Url { get; set; }
}
}
服務(wù)類:
using Easy.Admin.Application.File.Dtos;
using Easy.Admin.Core.Options;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Options;
using OnceMi.AspNetCore.OSS;
namespace Easy.Admin.Application.File
{
public class FileService : IDynamicApiController, ITransient
{
private readonly IOSSService _ossService;
private readonly IOptionsMonitor
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IWebHostEnvironment _webHostEnvironment;
private readonly IIdGenerator _idGenerator;
public FileService(IOSSService ossService,
IOptionsMonitor
IHttpContextAccessor httpContextAccessor,
IWebHostEnvironment webHostEnvironment,
IIdGenerator idGenerator)
{
_ossService = ossService;
_ossOptionsMonitor = ossOptionsMonitor;
_httpContextAccessor = httpContextAccessor;
_webHostEnvironment = webHostEnvironment;
_idGenerator = idGenerator;
}
///
/// 上傳附件
///
///
///
[NonUnify]
public async Task> Upload([Required] IFormFile file)
{
if (file is null or { Length: 0 })
{
throw Oops.Oh("請(qǐng)上傳文件");
}
var options = _ossOptionsMonitor.CurrentValue;
var now = DateTime.Today;
string name = _idGenerator.Encode(_idGenerator.NewLong());
string extension = Path.GetExtension(file.FileName);
if (string.IsNullOrWhiteSpace(extension))
{
throw Oops.Bah("無效文件");
}
// 文件路徑
string filePath = $"/{now.Year}/{now.Month:D2}/{now.Day:D2}/";
// 本地存儲(chǔ)處理
if (!options.Enable)
{
filePath = string.Concat(options.Bucket.TrimEnd('/'), filePath);
string s = Path.Combine(_webHostEnvironment.WebRootPath, filePath);
if (!Directory.Exists(s))
{
Directory.CreateDirectory(s);
}
var stream = System.IO.File.Create($"{s}{name}{extension}");
await file.CopyToAsync(stream);
await stream.DisposeAsync();
var request = _httpContextAccessor.HttpContext!.Request;
string url = $"{request.Scheme}://{request.Host.Value}/{filePath}{name}{extension}";
return new List
{
new()
{
Name = $"{name}{extension}",
Url = url
}
};
}
// 云存儲(chǔ)處理
string fileName = $"{filePath}{name}{extension}";
await _ossService.PutObjectAsync(options.Bucket, fileName, file.OpenReadStream());
string bucket = options.Provider == OSSProvider.Minio ? $"/{options.Bucket}" : string.Empty;
return new List
{
new()
{
Name = $"{name}{extension}",
Url = $"{options.Domain.TrimEnd('/')}{bucket}{fileName}"
}
};
}
}
}
2.Core 項(xiàng)目
1. 項(xiàng)目作用
Core 項(xiàng)目是應(yīng)用程序的基礎(chǔ)層,提供應(yīng)用的基礎(chǔ)服務(wù)和公共資源,支持其他項(xiàng)目模塊(如 Web 應(yīng)用層、業(yè)務(wù)邏輯層等)的開發(fā)和運(yùn)行。它通常包含基礎(chǔ)設(shè)施、工具類、核心業(yè)務(wù)邏輯、數(shù)據(jù)庫操作等。
2. 書寫方式
項(xiàng)目名稱:Test.Admin.Core
公共資源文件夾:包含各類共享資源和基礎(chǔ)服務(wù)。
接口文件夾:放置接口定義的文件夾。
接口1:具體的接口文件。接口2:具體的接口文件。 抽象類文件夾:放置抽象類的文件夾。
抽象類1:具體的抽象類文件。抽象類2:具體的抽象類文件。 資源類1:公共資源類。資源類2:公共資源類。 SqlSugar ORM:集成了 SqlSugar ORM,用于處理數(shù)據(jù)庫操作。
Pager 分頁:處理數(shù)據(jù)庫查詢結(jié)果的分頁。Repositories 倉庫類:提供數(shù)據(jù)查詢和持久化的方法。 緩存機(jī)制類:用于優(yōu)化數(shù)據(jù)庫查詢,減少數(shù)據(jù)庫訪問次數(shù),提高性能。擴(kuò)展方法類:定義自定義的查詢擴(kuò)展或其他實(shí)用工具方法。工作單元類:用于管理數(shù)據(jù)庫事務(wù),確保數(shù)據(jù)操作的一致性和完整性。過濾器類:用于添加特定的過濾器或配置查詢選項(xiàng)。
柚子快報(bào)邀請(qǐng)碼778899分享:c# 系統(tǒng)架構(gòu)分析
推薦鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。