第2章 逻辑分页、AutoFac注入、工作单元与仓储

news2024/11/16 11:47:54

1 CoreCms.Net.Model.ViewModels.Basics.IPageList<T>

namespace CoreCms.Net.Model.ViewModels.Basics

{

    ///<typeparam name="T">泛型类型实例(1个指定实体的类型实例)</typeparam>

    /// <summary>

    /// 【逻辑分页列表--接口】

    /// <remarks>

    /// 摘要:

    ///     通过继承该接口的具体实现类中的属性成员实例,逻辑的从数据源中加载指定1页中的数据,存储到1逻辑页中,从而尽量少的从指定表加载数据,从而尽量降低内存的消耗。

    /// 说明:

    ///     逻辑分页交互操作对象是当前程序与数据库的指定表。

    /// </remarks>

    /// </summary>

    public interface IPageList<T> : IList<T>

    {

        #region 属性

        /// <summary>

        /// 【当前页】

        /// <remarks>

        /// 摘要:

        ///     获取/设置当前页,当前逻辑(内存)页面的整型索引值,从“0”开始计算。

        /// </remarks>

        /// </summary>

        int PageIndex { get; }

        /// <summary>

        /// 【页面大小】

        /// <remarks>

        /// 摘要:

        ///     获取/设置页面大小,即1逻辑(内存)页面最多所存储的实例项的整型个数值。

        /// </remarks>

        /// </summary>

        int PageSize { get; }

        /// <summary>

        /// 【总计值】

        /// <remarks>

        /// 摘要:

        ///     获取/设置数据源实例项的整型总计值。

        /// </remarks>

        /// </summary>

        int TotalCount { get; }

        /// <summary>

        /// 【总页数】

        /// <remarks>

        /// 摘要:

        ///     获取/设置总页数,即数据源实例项,可以分为逻辑页数的总计值。

        /// </remarks>

        /// </summary>

        int TotalPages { get; }

        /// <summary>

        /// 【上1页?】

        /// <remarks>

        /// 摘要:

        ///     获取1个值false(没有)/true(),该值指示在逻辑(内存)分页操作中当前页是否有上1(1页之前没有上1)

        /// </remarks>

        /// </summary>

        bool HasPreviousPage { get; }

        /// <summary>

        /// 【下1页?】

        /// <remarks>

        /// 摘要:

        ///     获取1个值false(没有)/true(),该值指示在逻辑(内存)分页操作中当前页是否有下1(最后1页之后没有下1)

        /// </remarks>

        /// </summary>

        bool HasNextPage { get; }

        #endregion

    }

}

2 CoreCms.Net.Model.ViewModels.Basics.PageList<T>  

namespace CoreCms.Net.Model.ViewModels.Basics

{

    ///<typeparam name="T">泛型类型实例(1个指定实体的类型实例)</typeparam>

    /// <summary>

    /// 【逻辑分页列表--类】

    /// <remarks>

    /// 摘要:

    ///     通过该类及其属性成员实例,只逻辑的从数据源中加载指定1页中的数据,存储到1(逻辑)页中,从而尽量少的从指定表加载数据,从而尽量降低内存的消耗。

    /// 说明:

    ///     (逻辑)分页交互操作对象是当前程序与数据库的指定表。

    /// [Serializable]

    ///     序列化可以对象的状态信息转换成可以持久化或者可以传输形式的过程。一般是转为字节数据。而把字节数组还原成原来同等对象的过程成为反序列化。

    ///     这里特指把逻辑分页实体中的所有数据换成可以进行网络传输的形式。

    /// </remarks>

    /// </summary>

    [Serializable]

    public class PageList<T> : List<T>, IPageList<T>

    {

        #region 拷贝构造方法

        ///<typeparam name="T">泛型类型实例(1个指定实体的类型实例)</typeparam>

        /// <param name="source">“IQueryable”实例进行存储的1个指定类型的数据源(枚举数接口实例=长串型,包含:数组、列表、字典等)</param>

        /// <param name="pageIndex">分页操作中当前页的整型索引值。</param>

        /// <param name="pageSize">1逻辑(内存)页面最多所存储的实例项的整型个数值。</param>

        /// <summary>

        /// 【拷贝构造方法】

        /// <remarks>

        /// 摘要:

        ///     通过拷贝构造方法为该类中的属性成员赋值实例化初始值,并获取1逻辑(内存)页面内的所有数据。

        /// </remarks>

        /// </summary>

        public PageList(IQueryable<T> source, int pageIndex, int pageSize)

        {

            var total = source.Count();

            TotalCount = total;

            TotalPages = total / pageSize;

            if (total % pageSize > 0)

                TotalPages++;

            PageSize = pageSize;

            PageIndex = pageIndex;

            AddRange(source.Skip(pageIndex * pageSize).Take(pageSize).ToList());

        }

        /// <param name="source">以列表接口实例进行存储的1个指定类型的数据源(包含:数组、列表、字典等)</param>

        /// <param name="pageIndex">分页操作中当前页的整型索引值。</param>

        /// <param name="pageSize">1逻辑(内存)页面最多所存储的实例项的整型个数值。</param>

        /// <summary>

        /// 【拷贝构造方法】

        /// <remarks>

        /// 摘要:

        ///     通过拷贝构造方法为该类中的属性成员赋值实例化初始值,并获取1逻辑(内存)页面内的所有数据。

        /// </remarks>

        /// </summary>

        public PageList(IList<T> source, int pageIndex, int pageSize)

        {

            TotalCount = source.Count();

            TotalPages = TotalCount / pageSize;

            if (TotalCount % pageSize > 0)

                TotalPages++;

            PageSize = pageSize;

            PageIndex = pageIndex;

            AddRange(source.Skip(pageIndex * pageSize).Take(pageSize).ToList());

        }

        /// <param name="source">以列表接口实例进行存储的1个指定类型的数据源(包含:数组、列表、字典等)</param>

        /// <param name="pageIndex">分页操作中当前页的整型索引值。</param>

        /// <param name="pageSize">1逻辑(内存)页面最多所存储的实例项的整型个数值。</param>

        /// <param name="totalCount">数据源实例项的整型总计值。</param>

        /// <summary>

        /// 【拷贝构造方法】

        /// <remarks>

        /// 摘要:

        ///     通过拷贝构造方法为该类中的属性成员赋值实例化初始值,并获取1逻辑(内存)页面内的所有数据。

        /// </remarks>

        /// </summary>

        public PageList(IEnumerable<T> source, int pageIndex, int pageSize, int totalCount)

        {

            TotalCount = totalCount;

            TotalPages = TotalCount / pageSize;

            if (TotalCount % pageSize > 0)

                TotalPages++;

            PageSize = pageSize;

            PageIndex = pageIndex;

            AddRange(source);

        }

        #endregion

        #region 属性

        /// <summary>

        /// 【当前页】

        /// <remarks>

        /// 摘要:

        ///     获取/设置当前页,当前逻辑(内存)页面的整型索引值,从“0”开始计算。

        /// </remarks>

        /// </summary>

        public int PageIndex { get; }

        /// <summary>

        /// 【页面大小】

        /// <remarks>

        /// 摘要:

        ///     获取/设置页面大小,即1逻辑(内存)页面最多所存储的实例项的整型个数值。

        /// </remarks>

        /// </summary>

        public int PageSize { get; private set; }

        /// <summary>

        /// 【总计值】

        /// <remarks>

        /// 摘要:

        ///     获取/设置数据源实例项的整型总计值。

        /// </remarks>

        /// </summary>

        public int TotalCount { get; }

        /// <summary>

        /// 【总页数】

        /// <remarks>

        /// 摘要:

        ///     获取/设置总页数,即数据源实例项,可以分为逻辑页数的总计值。

        /// </remarks>

        /// </summary>

        public int TotalPages { get; }

        /// <summary>

        /// 【上1页?】

        /// <remarks>

        /// 摘要:

        ///     获取1个值false(没有)/true(),该值指示在逻辑(内存)分页操作中当前页是否有上1(1页之前没有上1)

        /// </remarks>

        /// </summary>

        public bool HasPreviousPage => PageIndex > 0;

        /// <summary>

        /// 【下1页?】

        /// <remarks>

        /// 摘要:

        ///     获取1个值false(没有)/true(),该值指示在逻辑(内存)分页操作中当前页是否有下1(最后1页之后没有下1)

        /// </remarks>

        /// </summary>

        public bool HasNextPage => PageIndex + 1 < TotalPages;

        #endregion

    }

}

3 CoreCms.Net.Core.AutoFac.AutofacModuleRegister  

using Autofac;

using System.Reflection;

namespace CoreCms.Net.Core.AutoFac

{

    /// <summary>

    /// Autofac模型注入--类】

    /// <remarks>

    /// 摘要:

    ///     通过该类中的方法成员把指定的程序集(*.dll)依赖注入到Autofac容器中。

    /// </remarks>

    /// </summary>

    public class AutofacModuleRegister : Autofac.Module

    {

        /// <param name="builder">Autofac依赖注入容器实例。</param>

        /// <summary>

        /// 【载入】

        /// <remarks>

        /// 摘要:

        ///     通过该方法把指定程序集中的所有实例依赖注入到Autofac容器中。

        /// </remarks>

        /// </summary>

        protected override void Load(ContainerBuilder builder)

        {

            //获取当前程序启动项程序集(*.dll)文件所在目录(文件夹)的绝对路径字符串(这里特指“..\bin\Debug\net7.0”)

            var basePath = AppContext.BaseDirectory;

            #region 带有接口层的服务注入

            //var servicesDllFile = Path.Combine(basePath, "CoreCms.Net.Services.dll");

            var repositoryDllFile = Path.Combine(basePath, "CoreCms.Net.Repository.dll");

            /*  if (!(File.Exists(servicesDllFile) && File.Exists(repositoryDllFile)))

            {

                var msg = "Repository.dllServices.dll 丢失,因为项目解耦了,所以需要先F6编译,再F5运行,请检查 bin 文件夹,并拷贝。";

                throw new Exception(msg);

            }*/

         

            // 获取 Service.dll 程序集服务,并注册

            /*var assemblysServices = Assembly.LoadFrom(servicesDllFile);

            //支持属性注入依赖重复

            builder.RegisterAssemblyTypes(assemblysServices).AsImplementedInterfaces().InstancePerDependency()

                .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);

*/

            // 获取 Repository.dll 程序集服务,并注册

            var assemblysRepository = Assembly.LoadFrom(repositoryDllFile);

            //支持属性注入依赖重复

            builder.RegisterAssemblyTypes(assemblysRepository).AsImplementedInterfaces().InstancePerDependency()

                .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);

            #endregion

        }

    }

}

4 Program.cs

#region AutoFac注册============================================================================

builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());

builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>

{

    //获取所有控制器类型并使用属性注入

    var controllerBaseType = typeof(ControllerBase);

    containerBuilder.RegisterAssemblyTypes(typeof(Program).Assembly)

        .Where(t => controllerBaseType.IsAssignableFrom(t) && t != controllerBaseType)

        .PropertiesAutowired();

    containerBuilder.RegisterModule(new AutofacModuleRegister());

});

#endregion

5 CoreCms.Net.IRepository.UnitOfWork.IUnitOfWork

using SqlSugar;

namespace CoreCms.Net.IRepository.UnitOfWork

{

    /// <summary>

    /// 【工作单元--类】

    /// <remarks>

    /// 摘要:

    ///     通过继承该接口的具体实现类中的方法成员,获取SqlSugarScope(用单例AddSingleton 单例)上下文中间件实例,从而为实现实体与表的CURD操作提供支撑。

    /// </remarks>

    /// </summary>

    public interface IUnitOfWork

    {

        #region 方法

        /// <summary>

        /// 【获取数据库数据端】

        /// <remarks>

        /// 摘要:

        ///     获取SqlSugarScope(用单例AddSingleton  单例)上下文中间件实例,该实例为通过 SqlSugar中间件实现实体与表的CURD操作提供支撑。

        /// </remarks>

        /// </summary>

        SqlSugarScope GetDbClient();

        /// <summary>

        /// 【事务开始】

        /// <remarks>

        /// 摘要:

        ///    该方法通过事务操作实现实现实体与表的CURD操作提供支撑,该方法主要指开启1个事务。

        /// </remarks>

        /// </summary>

        void BeginTran();

        /// <summary>

        /// 【事务提交】

        /// <remarks>

        /// 摘要:

        ///    该方法通过事务操作实现实现实体与表的CURD操作提供支撑,该方法主要指把1个事务中的所有操作进行提交到指定的数据库中。

        /// </remarks>

        /// </summary>

        void CommitTran();

        /// <summary>

        /// 【事务回滚】

        /// <remarks>

        /// 摘要:

        ///    该方法通过事务操作实现实现实体与表的CURD操作提供支撑,当把1个事务中的所有操作进行提交到指定的数据库的过程中如果出现异常时,则通过该方法实现回滚。

        /// </remarks>

        /// </summary>

        void RollbackTran();

        #endregion

    }

}

6 CoreCms.Net.IRepository.UnitOfWork.UnitOfWork

using CoreCms.Net.IRepository.UnitOfWork;

//using CoreCms.Net.Loging;

//using NLog;

using SqlSugar;

using SqlSugar.IOC;

namespace CoreCms.Net.Repository.UnitOfWork

{

    /// <summary>

    /// 【工作单元--类】

    /// <remarks>

    /// 摘要:

    ///     通过该类中的成员获取SqlSugarScope(用单例AddSingleton  单例)上下文中间件实例,从而为实现实体与表的CURD操作提供支撑。

    /// </remarks>

    /// </summary>

    public class UnitOfWork : IUnitOfWork

    {

        #region 拷贝构造方法与变量

        /// <summary>

        /// 【上下文中间件实例】

        /// <remarks>

        /// 摘要:

        ///    ISqlSugarClient( AddScoped  每次请求一个实例)上下文中间件实例,该实例为通过 SqlSugar中间件实现实体与表的CURD操作提供支撑。

        /// </remarks>

        /// </summary>

        private readonly ISqlSugarClient _sqlSugarClient;

        /// <summary>

        /// 【拷贝构造方法】

        /// <remarks>

        /// 摘要:

        ///     通过该拷贝构造方法,对当前类中变量成员进行实例化。

        /// </remarks>

        /// </summary>

        public UnitOfWork()

        {

            _sqlSugarClient = DbScoped.SugarScope;

        }

        #endregion

        #region 方法

        /// <summary>

        /// 【获取数据库数据端】

        /// <remarks>

        /// 摘要:

        ///     获取SqlSugarScope(用单例AddSingleton  单例)上下文中间件实例,该实例为通过 SqlSugar中间件实现实体与表的CURD操作提供支撑。

        /// </remarks>

        /// </summary>

        public SqlSugarScope GetDbClient()

        {

            // 必须要as,后边会用到切换数据库操作

            return _sqlSugarClient as SqlSugarScope;

        }

        /// <summary>

        /// 【事务开始】

        /// <remarks>

        /// 摘要:

        ///    该方法通过事务操作实现实现实体与表的CURD操作提供支撑,该方法主要指开启1个事务。

        /// </remarks>

        /// </summary>

        public void BeginTran()

        {

            GetDbClient().BeginTran();

        }

        /// <summary>

        /// 【事务提交】

        /// <remarks>

        /// 摘要:

        ///    该方法通过事务操作实现实现实体与表的CURD操作提供支撑,该方法主要指把1个事务中的所有操作进行提交到指定的数据库中。

        /// </remarks>

        /// </summary>

        public void CommitTran()

        {

            try

            {

                GetDbClient().CommitTran();

            }

            catch (Exception ex)

            {

                GetDbClient().RollbackTran();

               // NLogUtil.WriteFileLog(LogLevel.Error, LogType.Web, "事务提交异常", "事务提交异常", new Exception("事务提交异常", ex));

                throw;

            }

        }

        /// <summary>

        /// 【事务回滚】

        /// <remarks>

        /// 摘要:

        ///    该方法通过事务操作实现实现实体与表的CURD操作提供支撑,当把1个事务中的所有操作进行提交到指定的数据库的过程中如果出现异常时,则通过该方法实现回滚。

        /// </remarks>

        /// </summary>

        public void RollbackTran()

        {

            GetDbClient().RollbackTran();

        }

        #endregion

    }

}

12 CoreCms.Net.Web.Admin.Controllers.SysRoleController

using Microsoft.AspNetCore.Mvc;

using System.ComponentModel;

using CoreCms.Net.IRepository;

namespace CoreCms.Net.Web.Admin.Controllers

{

    [ApiController]

    [Route("[controller]/[action]")]

    public class SysRoleController : ControllerBase

    {

        private readonly ISysRoleRepository _dal;

        public SysRoleController(ISysRoleRepository dal)

        {

            _dal = dal;

        }

        #region 获取列表============================================================

        [HttpPost]

        [Description("获取列表")]

        public async Task</*AdminUiCallBack*/ bool> GetPageList()

        {

            var v = await _dal.QueryPageAsync(null,"");

            return true;

        }

        #endregion

    }

}

对以上功能更为具体实现和注释见:230727_002CoreShop230628(逻辑分页、AutoFac注入、工作单元与仓储)。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/800847.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

akka 简单使用

由于AKka的核心是Actor&#xff0c;而Actor是按照Actor模型进行实现的&#xff0c;所以在使用Akka之前&#xff0c;有必要弄清楚什么是Actor模型。 Actor模型最早是1973年Carl Hewitt、Peter Bishop和Richard Seiger的论文中出现的&#xff0c;受物理学中的广义相对论(general…

3ds MAX绘制茶壶

综合一下之前的内容画个茶壶 长方形&#xff0c;然后转化为可编辑多边形&#xff0c;添加节点并设置圆角&#xff0c;如下图 车削生成一个圆环&#xff0c;其实这一步也可以用一个圆柱体和两个圆角圆柱体解决 效果如下&#xff1a; 茶壶的底座绘制好了 接下来是茶壶的上半边 …

牛客网面试必刷:CD12 换钱的最少货币数

牛客网面试必刷&#xff1a;CD12 换钱的最少货币数 前言一、动态规划&#xff08;1&#xff09;需要判断钱币和总金额&#xff08;2&#xff09;不需要判断钱币和总金额 前言 问题链接: CD12 换钱的最少货币数 一、动态规划 参考自&#xff1a;【编程题 动态规划】兑换零钱(…

Coremail敏感配置信息泄露

生活是美好的&#xff0c;生命在其间又是如此短促。既然活着&#xff0c;就应该好好地活。应该更珍惜自己生命的每个时刻&#xff0c;精神上的消沉无异于自杀。像往日一样正常的投入生活吧&#xff0c;即便是痛苦&#xff0c;也应该被看做是人的正常情感&#xff0c;甚至它是组…

【多线程】进程调度的基本过程

进程调度的基本过程 1. 什么是进程/任务&#xff08;Process/Task&#xff09;2. 描述一个进程3. 什么是进程调度&#xff1f;3.1 进程状态3.2 进程的优先级3.3 进程的上下文3.4 进程的记账信息 4. 组织这些进程 1. 什么是进程/任务&#xff08;Process/Task&#xff09; 操作…

【用户体验分析报告】 按需加载组件,导致组件渲染卡顿,影响交互体验?组件拆包预加载方案来了!

首先&#xff0c;我们看一些针对《如何提升应用首屏加载体验》的文章&#xff0c;提到的必不可少的措施&#xff0c;便是减少首屏幕加载资源的大小&#xff0c;而减少资源大小必然会想到按需加载措施。本文提到的便是一个基于webpack 插件与 react 组件实现的一套研发高度自定义…

nginx入门 - 学习笔记

一、初识 1、相关概念 1&#xff09;正向代理 一个位于客户端和原始服务器之间的服务器&#xff0c;为了从原始服务器取得内容&#xff0c;客户端向代理发送一个请求并指定目标&#xff0c;然后代理向原始服务器转交请求并将获得内容返回给客户端。 2&#xff09;反向代理…

【C++】多态,虚函数表相关问题解决

文章目录 多态概念及其触发条件重写和协变&#xff08;考点1&#xff09;&#xff08;考点2&#xff09; 虚函数表及其位置&#xff08;考点3&#xff09; 多继承中的虚函数表 多态概念及其触发条件 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态。具体点就是去完成…

DSA之图(2):图的存储结构

文章目录 0 图的结构1 邻接矩阵1.1 无向图的邻接矩阵1.2 有向图的邻接矩阵1.3 网&#xff08;有权图&#xff09;的邻接矩阵表示法1.4 邻接矩阵的建立1.4.1 采用邻接矩阵建立无向网1.4.2 采用邻接矩阵建立有向网 1.5 邻接矩阵的优缺点1.5.1 优点1.5.2 缺点 2 邻接表2.1 无向图的…

Java将汉字转拼音以及判断字符是否为汉字

首先是将汉字转换为拼音&#xff1a; 导入依赖&#xff1a; <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>创建转拼音的静态方法toPinyin&#xf…

掌握 Python RegEx:深入探讨模式匹配

动动发财的小手&#xff0c;点个赞吧&#xff01; 什么是正则表达式&#xff1f; 正则表达式通常缩写为 regex&#xff0c;是处理文本的有效工具。本质上&#xff0c;它们由一系列建立搜索模式的字符组成。该模式可用于广泛的字符串操作&#xff0c;包括匹配模式、替换文本和分…

在线阅读版:《2023中国软件供应链安全分析报告》全文

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01; 专栏供应链安全 数字化时代&#xff0c;软件无处不在。软件如同社会中的“虚拟人”&#xff0c;已经成为支撑社会正常运转的最基本元素之一&#xff0c;软件的安全性问题也正在成为当今社会的根本性、基础性问题。 随…

火车头采集器伪原创【php源码】

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python中按钮的位置怎么摆放&#xff0c;python中按钮怎么设置颜色&#xff0c;现在让我们一起来看看吧&#xff01; 火车头采集ai伪原创插件截图&#xff1a; 1、用python的pygame,做一个按钮 唔...摁钮&#xff1f;…

【万字长文】SpringBoot整合SpringSecurity+JWT+Redis完整教程(提供Gitee源码)

前言&#xff1a;最近在学习SpringSecurity的过程中&#xff0c;参考了很多网上的教程&#xff0c;同时也参考了一些目前主流的开源框架&#xff0c;于是结合自己的思路写了一个SpringBoot整合SpringSecurityJWTRedis完整的项目&#xff0c;从0到1写完感觉还是收获到不少的&…

MYSQL导入excel数据后只显示500条

问题&#xff1a;明明显示数据全部导入成功&#xff0c;但是点开table后发现只显示了500条 解决步骤&#xff1a;&#xff08;以datagrip为例&#xff09; 其实大家已经把数据导入了&#xff0c;只是在工具里&#xff0c;它在设置里面做了限制&#xff0c;只显示500条数据。只…

Kotlin 内联函数语法之let、apply、also、run、with的用法与详解

一、介绍 kotlin的语法千奇百怪&#xff0c;今天我们将介绍项目中频率使用比较高的几个内联函数。 二、什么叫内联函数&#xff1f; 内联函数 的语义很简单&#xff1a;把函数体复制粘贴到函数调用处 。使用起来也毫无困难&#xff0c;用 inline关键字修饰函数即可。 语法&a…

三菱FX5U系列PLC内置定位功能的基本使用方法介绍

三菱FX5U系列PLC内置定位功能的基本使用方法介绍 三菱FX5U系列PLC本体自带的高速脉冲输出可以实现定位功能,具体的使用方法可参考以下内容: 参数设定 如下图所示,新建一个工程,在左侧的项目树中找到参数–模块参数—高速I/O,双击进入后找到输出功能—定位—点击进入详细设…

BHQ 1Mal,BHQ-1 Maleimide,BHQ1马来酰亚胺,黑洞猝灭剂

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ PART1----产品描述&#xff1a; BHQ-1 Maleimide黑洞猝灭剂-1(BHQ-1)被归类为暗猝灭剂&#xff0c;该淬灭剂能够将一定距离内荧光基团发出的光全部吸收&#xff0c;实现对荧光信号的淬灭&#xff0c;所以可得到更强的特异性…

基于SpringBoot+Vue的学习平台设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

神经网络的初始化方法

文章目录 1、随机初始化2、Xavier初始化3、He初始化4、权重预训练初始化5、零初始化 对于神经网络的训练过程中&#xff0c;合适的参数初始化方法有助于更好的处理梯度消失和梯度爆炸问题。通常有以下几种初始化方法&#xff1a; 1、随机初始化 随机初始化&#xff08;Random…