当前位置: 首页 > news >正文

ASP.NET Core 分层项目中EFCore的使用

文章目录

  • 前言
  • 一、核心
  • 二、项目分层结构
    • 1)安装 NuGet 包
      • Web 项目
      • InfrastructureLibrary项目
    • 2)领域模型和仓储接口 (Domain 层)
    • 3)基础设施层实现 (Infrastructure 层)
    • 4)应用层服务 (Application 层)
    • 5)Web API 配置
    • 6)控制器 (Web 层)
    • 7)数据库迁移
  • 三、关键点说明
    • 分层依赖:
    • 依赖注入:
    • 异步操作:
    • 领域驱动设计:
  • 总结


前言

ASP.NET Core Web API 结合 Entity Framework Core (EF Core) 的分层项目架构是一种常见的开发模式,旨在通过职责分离提高代码的可维护性、可测试性和扩展性。

一、核心

分层架构将应用按功能划分为多个逻辑层,各层职责明确,通过接口或 DTO(Data Transfer Object)通信。

二、项目分层结构

  1. Presentation层 (Web API) - 处理 HTTP 请求/响应

  2. Application层 - 业务逻辑和用例实现

  3. Domain层 - 实体模型和仓储接口

  4. Infrastructure层 - EFCore 实现和数据库配置

    MyAspNetCoreWebApplication.sln
    ├─ MyAspNetCoreWebApplication.MyWebApplication(ASP.NET Core Web API)
    ├─ MyAspNetCoreWebApplication.ApplicationLibrary(Class Library)
    ├─ MyAspNetCoreWebApplication.DomainLibrary(Class Library)
    └─ MyAspNetCoreWebApplication.InfrastructureLibrary(Class Library)
    

1)安装 NuGet 包

Web 项目

Microsoft.EntityFrameworkCore.SqlServer

InfrastructureLibrary项目

Install-Package Microsoft.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.Design
Install-Package Microsoft.EntityFrameworkCore.Tools
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.EnvironmentVariables

2)领域模型和仓储接口 (Domain 层)

  1. 实体(Entity)
    目录结构:DomainLibrary-Entity
    • Book.cs
    public class Book
    {public long Id { get; set; }public string Title { get; set; }public double Price { get; set; }public string AuthorId { get; set; }public string AuthorName { get; set; }
    }
    
    • Product.cs
    public class Product
    {public long Id { get; set; }public string Name { get; set; }public string Description { get; set; }public double Price { get; set; }
    }
    
  2. 仓储接口(RepositoryInterface)
    目录结构:DomainLibrary-Repository
    • IBookRepository.cs
    public interface IBookRepository
    {Task<IEnumerable<Book>> GetAllAsync();Task<Book> GetByIdAsync(long id);Task AddAsync(Book book);Task DeleteAsync(long id);Task UpdateAsync(Book book);
    }
    
    • IProjectRepository.cs
     public interface IProjectRepository{Task<IEnumerable<Product>>  GetAllAsync();Task<Product> GetByIdAsync(long id);Task AddAsync(Product project);Task DeleteAsync(long id);Task UpdateAsync(Product project);}
    

3)基础设施层实现 (Infrastructure 层)

  1. 数据库上下文类
    目录结构:InfrastructureLibrary-Data

    • MyDbContext.cs
      public class MyDbContext : DbContext
      {public MyDbContext(DbContextOptions<MyDbContext> options) : base(options){}public DbSet<Product> Projects { get; set; }public DbSet<Book> Books { get; set; }protected override void OnModelCreating(ModelBuilder modelBuilder){base.OnModelCreating(modelBuilder);modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);}}
      
    • MyDbContextDesignFactory.cs
      internal class MyDbContextDesignFactory : IDesignTimeDbContextFactory<MyDbContext>
      {public MyDbContext CreateDbContext(string[] args){// 手动构建配置(读取环境变量)var configuration = new ConfigurationBuilder().AddEnvironmentVariables() // 添加环境变量作为配置源.Build();string connStr = configuration.GetSection("ConnStr").Value;if (connStr == null){throw new Exception("连接字符串为空");}DbContextOptionsBuilder<MyDbContext> opt = new DbContextOptionsBuilder<MyDbContext>();opt.UseSqlServer(connStr);return new MyDbContext(opt.Options);}
      }
      
  2. 配置类
    目录结构:InfrastructureLibrary-Config

    • BookConfig.cs
      public class BookConfig : IEntityTypeConfiguration<Book>
      {public void Configure(EntityTypeBuilder<Book> builder){builder.ToTable("T_Books");}
      }
      
    • ProductConfig.cs
       public class ProductConfig : IEntityTypeConfiguration<Product>{public void Configure(EntityTypeBuilder<Product> builder){builder.ToTable("T_Products");builder.Property(p => p.Name).HasMaxLength(100).IsRequired();builder.Property(p => p.Price).HasColumnType("decimal(18,2)");}}
      
  3. 实现类Repositories
    目录结构:InfrastructureLibrary-Repositories

    • BookRepository.cs
      public class BookRepository
      {private readonly MyDbContext _dbContext;public BookRepository(MyDbContext context){_dbContext = context;}public async Task<IEnumerable<Book>> GetAllAsync()=> await _dbContext.Books.ToListAsync();public async Task<Book> GetByIdAsync(long id)=> await _dbContext.Books.FindAsync(id);public async Task AddAsync(Book book){if (book != null){await _dbContext.Books.AddAsync(book);await _dbContext.SaveChangesAsync();}}public async Task DeleteAsync(long id){Book p = await GetByIdAsync(id);if (p != null){_dbContext.Books.Remove(p);await _dbContext.SaveChangesAsync();}}public async Task UpdateAsync(Book book){if (book != null){_dbContext.Books.Update(book);await _dbContext.SaveChangesAsync();}}
      }
      
    • ProductRepository.cs
      public class ProductRepository : IProjectRepository
      {private readonly MyDbContext _dbContext;public ProductRepository(MyDbContext dbContext){_dbContext = dbContext;}public async Task<IEnumerable<Product>> GetAllAsync()=> await _dbContext.Projects.ToListAsync();public async Task<Product> GetByIdAsync(long id)=> await _dbContext.Projects.FindAsync(id);public async Task AddAsync(Product project){if (project!=null){await _dbContext.Projects.AddAsync(project);await _dbContext.SaveChangesAsync();}            }public async Task DeleteAsync(long id){Product p=await GetByIdAsync(id);if (p != null){_dbContext.Projects.Remove(p);await _dbContext.SaveChangesAsync();}}public async Task UpdateAsync(Product project){if (project != null){_dbContext.Projects.Update(project);await _dbContext.SaveChangesAsync();}}
      }
      

4)应用层服务 (Application 层)

  1. 服务类
    目录结构:ApplicationLibrary-Services
    • BookService.cs
      public class BookService
      {private readonly IBookRepository bookRepository;public BookService(IBookRepository bookRepository){this.bookRepository = bookRepository;}public async Task<IEnumerable<Book>> GetAllBookAsync(){return await bookRepository.GetAllAsync();}public async Task<Book> GetBookById(long id){return await bookRepository.GetByIdAsync(id);}public async Task AddBook(Book book)=> await bookRepository.AddAsync(book);public async Task UpdateBook(Book book)=> await bookRepository.UpdateAsync(book);public async Task DeleteBook(long id)=> await bookRepository.DeleteAsync(id);
      }
      
    • ProductService.cs
      public class ProductService
      {private readonly IProjectRepository _repository;public ProductService(IProjectRepository repository){_repository = repository;}public async Task<IEnumerable<Product>> GetAllProjectAsync(){return await _repository.GetAllAsync();}public async Task<Product> GetProductById(long id){return await _repository.GetByIdAsync(id);}public async Task AddProduct(Product product)=>await _repository.AddAsync(product);public async Task UpdateProject(Product product)=> await _repository.UpdateAsync(product);public async Task DeleteProduct(long id)=> await _repository.DeleteAsync(id);}
      

5)Web API 配置

  1. Program.cs 配置

    • Program.cs
      using DomainLibrary.Repository;
      using InfrastructureLibrary.Repositories;
      using Microsoft.EntityFrameworkCore;
      using ApplicationLibrary.Services;
      using InfrastructureLibrary.Data;var builder = WebApplication.CreateBuilder(args);// Add services to the container.
      //配置数据库
      builder.Services.AddDbContext<MyDbContext>(opt => {string connStr = builder.Configuration.GetConnectionString("DefaultConnection");//GetSection("ConnStr").Value;opt.UseSqlServer(connStr);
      });// 注册仓储
      builder.Services.AddScoped<IProjectRepository, ProductRepository>();//注册服务
      builder.Services.AddScoped<ProductService>();builder.Services.AddControllers();builder.Services.AddEndpointsApiExplorer();
      builder.Services.AddSwaggerGen();var app = builder.Build();// 自动迁移数据库(可选)
      using (var scope = app.Services.CreateScope())
      {var db = scope.ServiceProvider.GetRequiredService<MyDbContext>();db.Database.Migrate();
      }// Configure the HTTP request pipeline.
      if (app.Environment.IsDevelopment())
      {app.UseSwagger();app.UseSwaggerUI();
      }app.UseHttpsRedirection();app.UseAuthorization();app.MapControllers();app.Run();
      
  2. appsettings.json配置

    • appsettings.json
      {"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHosts": "*","ConnectionStrings": {"DefaultConnection": "Server=XXX;Database=XXX;User Id=sa;Password=XXX;TrustServerCertificate=True;Trusted_Connection=True;MultipleActiveResultSets=True"}
      }
      

6)控制器 (Web 层)

  1. 控制器示例
    • TestController.cs
       [Route("api/[controller]/[action]")][ApiController]public class TestController : ControllerBase{private readonly MyDbContext _db;private readonly ProductService _productService;public TestController(MyDbContext db, ProductService productService){_db = db;_productService = productService;}[HttpGet]public ActionResult<string> Get(){var count= _db.Books.Count();return $"count={count}";}[HttpGet]public async Task<IActionResult> GetAllProductsAsync(){var res=await _productService.GetAllProjectAsync();return Ok(res);}}
      

7)数据库迁移

  1. 打开包管理器控制台
  2. 设置默认项目为 InfrastructureLibrary
  3. 执行命令:
    Add-Migration Init
    Update-Database
    

三、关键点说明

分层依赖:

  1. Web 层引用 ApplicationInfrastructureDomain
  2. Application 层引用 DomainInfrastructure
  3. Infrastructure 层引用 Domain

依赖注入:

  1. 通过构造函数注入仓储和服务
  2. 使用 AddScoped 注册生命周期服务

异步操作:

  1. 所有数据库操作使用 async/await
  2. 使用 ToListAsync()FindAsync() 等异步方法

领域驱动设计:

  1. 仓储模式隔离数据访问细节
  2. 领域模型保持纯净无基础设施依赖

总结

分层架构在 ASP.NET Core Web API + EF Core 项目中通过职责分离提升了代码质量,但需要权衡设计复杂度和实际需求。通过合理分层、依赖注入和接口抽象,可以构建高可维护、可测试的应用程序,同时避免过度设计。最终,架构选择应服务于业务需求,而非盲目追求分层形式。

相关文章:

ASP.NET Core 分层项目中EFCore的使用

文章目录 前言一、核心二、项目分层结构1&#xff09;安装 NuGet 包Web 项目InfrastructureLibrary项目 2&#xff09;领域模型和仓储接口 (Domain 层)3&#xff09;基础设施层实现 (Infrastructure 层)4&#xff09;应用层服务 (Application 层)5&#xff09;Web API 配置6&am…...

.net core 中directory , directoryinfo ,file, fileinfo区别,联系,场景

一、类定义及核心功能 ‌Directory类‌ ‌类型‌&#xff1a;静态类 ‌功能‌&#xff1a;提供目录操作的静态方法&#xff0c;包括创建、删除、移动目录&#xff0c;以及获取子目录或文件列表等。例如Directory.CreateDirectory()、Directory.GetFiles()。 ‌适用场景‌&…...

jvm-获取方法签名的方法

在Java中&#xff0c;获取方法签名的方法可以通过以下几种方式实现&#xff0c;具体取决于你的需求和使用场景。以下是详细的介绍&#xff1a; 1. 使用反射 API Java 提供了 java.lang.reflect.Method 类来获取方法的相关信息&#xff0c;包括方法签名。 示例代码&#xff1a…...

three.js中的instancedMesh类优化渲染多个同网格材质的模型

three.js小白的学习之路。 在上上一篇博客中&#xff0c;简单验证了一下three.js中的网格共享。写的时候就有一些想法&#xff0c;如果说某个场景中有一万棵树&#xff0c;这些树共享一个geometry和material&#xff0c;有没有好的办法将其进行一定程度上的渲染优化&#xff0…...

2025年一站式AI创作平台主要功能介绍及使用教程

在当今迅速发展的数字时代&#xff0c;人工智能&#xff08;AI&#xff09;已成为推动创新和提升工作效率的关键工具。今天给大家分享一个全面的一站式AIGC内容创作平台&#xff0c;对其主要功能及使用教程进行讲解&#xff0c;旨在帮助用户显著提升工作和学习效率。无论您需要…...

YOLO11改进,尺度动态损失函数Scale-based Dynamic Loss,减少标签不准确对损失函数稳定性的影响

在目标检测领域,标签噪声与尺度敏感问题始终是制约模型性能提升的"阿喀琉斯之踵"。2025年CVPR最佳论文提出的尺度动态损失函数(Scale-based Dynamic Loss, SDL),通过构建自适应损失调节机制,不仅实现了对YOLOv11检测精度的指数级提升,更重新定义了损失函数的设…...

<项目代码>YOLO小船识别<目标检测>

项目代码下载链接 YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0…...

我用deepseek做了一个提取压缩文件夹下pdf和word文件工具

由于最近需要把大量的压缩文件的pdf和word文件统一复制到一个文件夹中。 我们一般正常操作方式的是把一个压缩文件一个一个解压&#xff0c;然后在把一个的解压好的文件夹下文件复制到另外一个文件夹中。 这个也需太繁琐了&#xff0c;从以往统计的需要花费两个小时间&#x…...

单例模式 (Singleton Pattern)

单例模式是一种创建型设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。 核心特点 唯一性&#xff1a;一个类只能有一个实例 全局访问&#xff1a;提供全局访问该实例的方式 延迟初始化&#xff1a;通常在第一次被请求时才创建实…...

01-初识前端

一、邂逅前端开发 1.1. 软件开发、软件开发体系 这儿放个图~ 1.2.完善的应用程序包括哪些&#xff1f; 服务器开发 iOS开发、Android开发 Web开发 桌面开发&#xff08;windows&#xff0c;mac os&#xff09; iOS、mac os&#xff08;OC&#xff0c;swift&#xff09;&am…...

【JavaWeb后端开发03】MySQL入门

文章目录 1. 前言1.1 引言1.2 相关概念 2. MySQL概述2.1 安装2.2 连接2.2.1 介绍2.2.2 企业使用方式(了解) 2.3 数据模型2.3.1 **关系型数据库&#xff08;RDBMS&#xff09;**2.3.2 数据模型 3. SQL语句3.1 DDL语句3.1.1 数据库操作3.1.1.1 查询数据库3.1.1.2 创建数据库3.1.1…...

使用纯前端技术html+css+js实现一个蔬果商城的前端模板!

当我们刚开始学习前端的时候&#xff0c;我们都会先学习一些基础的编程知识点。对于网站开发前端学习&#xff0c;我们就会学习 html css js 等基础的前端技术&#xff0c;我们学习了基础编程知识后&#xff0c;肯定是需要一些项目&#xff0c;或者一些练习题&#xff0c;巩固一…...

SAP系统生产跟踪报表入库数异常

生产跟踪报表入库数异常 交库21820,入库43588是不可能的 原因排查: 报表的入库数取值,是取移动类型321 (即系检验合格后过账到非限制使用)的数. 查凭证,101过账2次21807,321过账了2次21794,然后用102退1次21794.就是说这批物料重复交库了. 解决&#xff1a; 方案一:开发增强设…...

mac 本地 docker 部署 nacos

标题查看 docker 的 nacos 版本 查看可用的Nacos版本,以最新版为例. 指定版本 自己修改即可. 访问Nacos镜像库地址&#xff1a;https://hub.docker.com/r/nacos/nacos-server/tags?page1&orderinglast_updated 标题二、挂载目录配置步骤 标题‌创建本地目录‌ 按用户要…...

cgroup threaded功能例子

一、背景 cgroup在如今的系统里基本都是默认打开的一个功能。对于cgroup的cpu子系统&#xff0c;默认的颗粒度是进程为维度进行cgroup的cpu及cpuset的控制。而对于一些复杂进程&#xff0c;可能的需求是进程里一些个别线程要绑定在X1-Xn这些cpu核上&#xff0c;而除了这些个别…...

Elasticsearch插件:IDEA中的Elasticsearch开发利器

Elasticsearch插件&#xff1a;IDEA中的Elasticsearch开发利器 一、插件概述 Elasticsearch插件是为IntelliJ IDEA设计的专业工具&#xff0c;它让开发者能在IDE内直接与Elasticsearch集群交互&#xff0c;提供了查询编写、索引管理、数据分析等全方位支持。 核心价值&#…...

electron从安装到启动再到打包全教程

目录 介绍 安装 修改npm包配置 执行安装命令 源代码 运行 打包 先安装git, 安装打包工具 导入打包工具 执行打包命令 总结 介绍 electron确实好用,但安装是真的要耗费半条命。每次安装都会遇到各种问题,然后解决了之后。后面就不需要安装了,但有时候比如电脑重装…...

【Linux】轻量级命令解释器minishell

Minishell 一、项目背景 在linux操作系统中&#xff0c;用户对操作系统进行的一系列操作都不能直接操作内核&#xff0c;而是通过shell间接对内核进行操作。 Shell 是操作系统中的一种程序&#xff0c;它为用户提供了一种与操作系统内核和计算机硬件进行交互的界面。用户可以通…...

KEIL报错解决方案:No Algorithm found for: 08001000H - 080012EBH?

改这里&#xff1a; Cortex JLink/JTrace Target Drive - Flash Download - Size&#xff1a; 配好你这款芯片应该用的空间大小...

用银河麒麟 LiveCD 快速查看原系统 IP 和打印机配置

原文链接&#xff1a;用银河麒麟 LiveCD 快速查看原系统 IP 和打印机配置 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇在银河麒麟操作系统的 LiveCD 或系统试用镜像环境下&#xff0c;如何查看原系统中电脑的 IP 地址与网络打印机 IP 地址的实用教程。在系统损坏…...

DeepseekV3MLP 模块

目录 代码代码解释导入和激活函数配置类初始化方法前向传播方法计算流程 代码可视化 代码 import torch import torch.nn as nn import torch.nn.functional as F# 定义激活函数字典 ACT2FN {"relu": F.relu,"gelu": F.gelu,"silu": F.silu,&q…...

Ubuntu 系统下安装和使用性能分析工具 perf

在 Ubuntu 系统下安装和使用性能分析工具 perf 的步骤如下&#xff1a; 1. 安装 perf perf 是 Linux 内核的一部分&#xff0c;通常通过安装 linux-tools 包获取&#xff1a; # 更新软件包列表 sudo apt update# 安装 perf&#xff08;根据当前内核版本自动匹配&#xff09; …...

安恒Web安全面试题

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…...

OSPF --- LSA

文章目录 一、OSPF LSA&#xff08;链路状态通告&#xff09;详解1. LSA通用头部2. OSPFv2 主要LSA类型a. Type 1 - Router LSAb. Type 2 - Network LSAc. Type 3 - Summary LSAd. Type 4 - ASBR Summary LSAe. Type 5 - AS External LSAf. Type 7 - NSSA External LSA 3. LSA泛…...

IDEA/WebStorm中Git操作缓慢的解决方案

问题描述 在WebStorm中进行前端开发时&#xff0c;发现Git操作&#xff08;如push、checkout、pull等&#xff09;特别缓慢&#xff0c;而在命令行(cmd)中执行相同的Git命令却很快&#xff0c;排除了网络问题。 解决方案 通过修改WebStorm安装目录下的runnerw.exe文件名可以…...

网络威胁情报 | Yara

Yara 是一个在威胁情报、数字取证和威胁猎取方面较为常用的语言。本文并非是Yara语言的教程&#xff0c;更多的是希望可以让大家知道这个语言的神奇之处及其在当今信息安全领域的重要性。 Yara 是什么&#xff1f; “恶意软件研究人员&#xff08;以及其他所有人&#xff09;…...

12.QT-Combo Box|Spin Box|模拟点餐|从文件中加载选项|调整点餐份数(C++)

Combo Box QComboBox 表⽰下拉框 核⼼属性 属性说明currentText当前选中的⽂本currentIndex当前选中的条⽬下标.从0开始计算.如果当前没有条⽬被选中,值为-1editable是否允许修改设为true时, QComboBox 的⾏为就⾮常接近 QLineEdit ,也可以 设置 validatoriconSize下拉框图标…...

FTTR 全屋光纤架构分享

随着光纤网络技术的发展&#xff0c;FTTR 技术逐步普及到千家万户&#xff0c;为了战未来&#xff0c;从现在开始构建并铺设 FTTR 全屋光纤是非常有必要的。 在前期 FTTR 全屋光纤网络的载荷搭建&#xff0c;可以额定为千兆网络或者2.5GE光纤网络&#xff0c;万兆光网最大的成本…...

内网穿透快解析免费开放硬件集成SDK

一、行业问题 随着物联网技术的发展&#xff0c;符合用户需求的智能硬件设备被广泛的应用到各个领域&#xff0c;而智能设备的远程运维管理也是企业用户遇到的问题 二、快解析内网穿透解决方案 快解析是一款内网穿透产品&#xff0c;可以实现内网资源在外网访问&#xff0c;…...

实验八 版本控制

实验八 版本控制 一、实验目的 掌握Git基本命令的使用。 二、实验内容 1.理解版本控制工具的意义。 2.安装Windows和Linux下的git工具。 3.利用git bash结合常用Linux命令管理文件和目录。 4.利用git创建本地仓库并进行简单的版本控制实验。 三、主要实验步骤 1.下载并安…...

《马尼拉》桌游期望计算器

《马尼拉》桌游期望计算器&#xff1a;做出最明智的决策 注&#xff1a;本项目仍在开发验证中&#xff0c;计算结果可能不够准确&#xff0c;欢迎游戏爱好者提供协助&#xff01; 在线使用 | GitHub 项目简介 马尼拉期望计算器是一个基于 Vue 3 Vite 开发的网页应用&#xff…...

VLAN间通讯技术

多臂路由 路由器使用多条物理线路&#xff0c;每条物理线路充当一个 VLAN 的网管 注意&#xff1a;路由器对端的交换机接口&#xff0c;需要设定 Access 类型&#xff0c;因为路由器的物理接口无法处理 VLAN 标签 。 单臂路由 使用 以太网子接口 (sub-interface) 实现。 …...

linux基础学习--linux文件与目录管理

linux文件与目录管理 1. 目录与路径 1.1 相对路径与绝对路径 绝对路径&#xff1a;路径写法一定从根目录/写起。 绝对路径的正确度要高。 相对路径&#xff1a;路径写法不是由/写起。 1.2 目录的相关操作 切换目录的命令是cd&#xff0c;下面是比较特殊的目录&#xff1a;…...

云原生--基础篇-2--云计算概述(云计算是云原生的基础,IaaS、PaaS和SaaS服务模型)

1、云计算概念 云计算是一种通过互联网提供计算资源&#xff08;包括服务器、存储、数据库、网络、软件等&#xff09;和服务的技术模式。用户无需拥有和维护物理硬件&#xff0c;而是可以根据需要租用这些资源&#xff0c;并按使用量付费。 2、云计算特点 &#xff08;1&am…...

存储器综合:内存条

一、RW 1000题刷题 1、计算Cache缺失率 2、 二、前提回顾 1、CPU从单个DRAM芯片中取地址 注意&#xff1a;Cache与主存的交互以“主存块”为单位&#xff0c;当出现Cache Miss时&#xff0c;主存以“主存块”为单位传输至Cache中。 2、内存条编址 多个DRAM芯片组成内存条&a…...

树莓派超全系列教程文档--(38)config.txt视频配置

config.txt视频配置 视频选项HDMI模式树莓派4-系列的HDMI树莓派5-系列的HDMI 复合视频模式enable_tvout LCD显示器和触摸屏ignore_lcddisable_touchscreen 通用显示选项disable_fw_kms_setup 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 视频选…...

pytest-项目结构

项目结构 api_test_project/ ├── config/ │ └── config.py # 配置文件&#xff0c;存储接口的基本信息&#xff0c;如 URL、请求头、认证信息等 ├── data/ │ └── test_data.json # 测试数据文件&#xff0c;存储接口的请求参数、预期结果等 ├── tests/…...

几何编码:启用矢量模式地理空间机器学习

在 ML 模型中使用点、线和多边形&#xff0c;将它们编码为捕捉其空间属性的向量。 自地理信息系统 (GIS) 诞生之初&#xff0c;“栅格模式”和“矢量模式”之间就存在着显著的区别。在栅格模式下&#xff0c;数据以值的形式呈现在规则的网格上。这包括任何形式的图像&#xff0…...

什么是SPA,SPA与MAP区别

什么是SPA&#xff0c;SPA与MAP区别 文章目录 什么是SPA&#xff0c;SPA与MAP区别一、什么是SPA二、SPA和MPA的区别一、单页应用与多页应用的区别**二、SPA 的优缺点对比**三、WPA的优缺点 **三、SPA 实现关键技术**hash 模式模式history模式 四、SPA 的适用场景与原因**适用场…...

计算机前沿技术课程论文 K-means算法在图像处理的应用

K-means算法在图像处理的应用 这是本人在计算机前沿技术课程中的课程论文文章&#xff0c;为了方便大家参考学习&#xff0c;我把完整的论文word文档发到了我的资源里&#xff0c;有需要的可以自取。 点击完整资源链接 目录 K-means算法在图像处理的应用摘要&#xff1a;引言1…...

第十四届蓝桥杯 2023 C/C++组 平方差

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 核心思路&#xff1a; 第一种思路&#xff1a; 第二种思路&#xff1a; 坑点&#xff1a; 代码&#xff1a; 数学找规律 O(n) 50分代码详解&#xff1a; O(1)满分代码详解&#x…...

【数学建模】随机森林算法详解:原理、优缺点及应用

随机森林算法详解&#xff1a;原理、优缺点及应用 文章目录 随机森林算法详解&#xff1a;原理、优缺点及应用引言随机森林的基本原理随机森林算法步骤随机森林的优点随机森林的缺点随机森林的应用场景Python实现示例超参数调优结论参考文献 引言 随机森林是机器学习领域中一种…...

计算机组成与体系结构:存储器(Memory)

目录 &#x1f4c1; 当你打开一个文件&#xff0c;计算机会做什么&#xff1f; ⚡ 越大的 memory&#xff0c;访问速度越快吗&#xff1f; &#x1f9e0; 那么&#xff0c;我们是怎么设计存储器的呢&#xff1f; Primary Memory&#xff08;主存&#xff09;登场&#xff…...

MyBatis框架—xml映射

目录 一.为什么需要进行手动映射? 二.关联查询 1.使用resultMap进行映射 2.使用Connection进行映射 一.为什么需要进行手动映射? 当我们设计多表查询或关联查询时&#xff0c;表中含有相同的字段名或要进行关联查询时&#xff0c;MyBatis无法智能识别如何处理映射结果&…...

Vue接口平台学习十——接口用例页面2

效果图及简单说明 左边选择用例&#xff0c;右侧就显示该用例的详细信息。 使用el-collapse折叠组件&#xff0c;将请求到的用例详情数据展示到页面中。 所有数据内容&#xff0c;绑定到caseData中 // 页面绑定的用例编辑数据 const caseData reactive({title: "",…...

Visual Studio 2022 运行一个后台程序而不显示控制台窗口

在 Visual Studio 2022 中&#xff0c;希望运行一个后台程序而不显示控制台窗口&#xff08;黑色命令框&#xff09;&#xff0c;可以通过以下方法实现&#xff1a; 修改项目输出类型为 Windows 应用程序 右键项目 → 选择 属性 (Properties)在 配置属性 → 链接器 → 系统 (…...

剑指Offer(数据结构与算法面试题精讲)C++版——day17

剑指Offer&#xff08;数据结构与算法面试题精讲&#xff09;C版——day17 题目一&#xff1a;节点值之和最大的路径题目二&#xff1a;展平二叉搜索树题目三&#xff1a;二叉搜索树的下一个节点附录&#xff1a;源码gitee仓库 题目一&#xff1a;节点值之和最大的路径 题目&am…...

opencv函数展示4

一、形态学操作函数 1.基本形态学操作 &#xff08;1&#xff09;cv2.getStructuringElement() &#xff08;2&#xff09;cv2.erode() &#xff08;3&#xff09;cv2.dilate() 2.高级形态学操作 &#xff08;1&#xff09;cv2.morphologyEx() 二、直方图处理函数 1.直方图…...

10天学会嵌入式技术之51单片机-day-3

第九章 独立按键 按键的作用相当于一个开关&#xff0c;按下时接通&#xff08;或断开&#xff09;&#xff0c;松开后断开&#xff08;或接通&#xff09;。实物图、原理图、封装 9.2 需求描述 通过 SW1、SW2、SW3、SW4 四个独立按键分别控制 LED1、LED2、LED3、LED4 的亮…...

DeepSeek智能时空数据分析(二):3秒对话式搞定“等时圈”绘制

序言&#xff1a;时空数据分析很有用&#xff0c;但是GIS/时空数据库技术门槛太高 时空数据分析在优化业务运营中至关重要&#xff0c;然而&#xff0c;三大挑战仍制约其发展&#xff1a;技术门槛高&#xff0c;需融合GIS理论、SQL开发与时空数据库等多领域知识&#xff1b;空…...