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

wordpress文章右边自定义字段保定官网优化技巧

wordpress文章右边自定义字段,保定官网优化技巧,什么是网站域名,长沙哪家网络公司做网站好本文首先介绍了ABP内置的软删除过滤器(ISoftDelete)和多租户过滤器(IMultiTenant)#xff0c;然后介绍了如何实现一个自定义过滤器#xff0c;最后介绍了在软件开发过程中遇到的实际问题#xff0c;同时给出了解决问题的一个未必最优的思路。一.预定义过滤器ABP中的数据过滤…   本文首先介绍了ABP内置的软删除过滤器(ISoftDelete)和多租户过滤器(IMultiTenant)然后介绍了如何实现一个自定义过滤器最后介绍了在软件开发过程中遇到的实际问题同时给出了解决问题的一个未必最优的思路。一.预定义过滤器  ABP中的数据过滤器源码在Volo.Abp.Data[2]包中官方定义了2个开箱即用的过滤器分别是软删除过滤器(ISoftDelete)和多租户过滤器(IMultiTenant)想必大家对这2个内置的过滤器已经比较熟悉了。下面重点说下通过IDataFilter实现局部过滤和通过AbpDataFilterOptions实现全局过滤。1.IDataFilter局部过滤  主要的思路就是通过IDataFilter依赖注入然后通过_dataFilter.DisableXXX()临时的启用或者禁用过滤器namespace Acme.BookStore {public class MyBookService : ITransientDependency{private readonly IDataFilter _dataFilter;private readonly IRepositoryBook, Guid _bookRepository;public MyBookService(IDataFilter dataFilter, IRepositoryBook, Guid bookRepository){_dataFilter dataFilter;_bookRepository bookRepository;}public async TaskListBook GetAllBooksIncludingDeletedAsync(){// 临时禁用ISoftDelete过滤器using (_dataFilter.DisableISoftDelete()){return await _bookRepository.GetListAsync();}}} }这样就会局部地把IsDeleted1的记录查找出来。2.AbpDataFilterOptions全局过滤主要是通过选项(Options)的方式来配置全局过滤ConfigureAbpDataFilterOptions(options {options.DefaultStates[typeof(ISoftDelete)] new DataFilterState(isEnabled: false); });这样就会全局地把IsDeleted1的记录查找出来。其中的一个问题是这段代码写到哪里呢自己是写到XXX.Host-XXXHostModule-ConfigureServices中比如Business.Host-BusinessHostModule-ConfigureServices。二.自定义过滤器  自定义过滤器是比较简单的基本上都是八股文格式了对于EFCore来说就是重写DbContext中的ShouldFilterEntity和CreateFilterExpression方法。因为暂时用不到MongoDB所以不做介绍有兴趣可以参考[1]也不是很难。下面通过一个例子来介绍下EF Core的自定义过滤器。1.定义过滤器接口首先定义一个过滤器接口然后实现该接口public interface IIsActive {bool IsActive { get; } }public class Book : AggregateRootGuid, IIsActive {public string Name { get; set; }public bool IsActive { get; set; } //Defined by IIsActive }2.重写DbContext中的方法然后就是重写DbContext中的ShouldFilterEntity和CreateFilterExpression方法protected bool IsActiveFilterEnabled DataFilter?.IsEnabledIIsActive() ?? false;protected override bool ShouldFilterEntityTEntity(IMutableEntityType entityType) {if (typeof(IIsActive).IsAssignableFrom(typeof(TEntity))){return true;}return base.ShouldFilterEntityTEntity(entityType); }protected override ExpressionFuncTEntity, bool CreateFilterExpressionTEntity() {var expression base.CreateFilterExpressionTEntity();if (typeof(IIsActive).IsAssignableFrom(typeof(TEntity))){ExpressionFuncTEntity, bool isActiveFilter e !IsActiveFilterEnabled || EF.Propertybool(e, IsActive);expression expression null ? isActiveFilter : CombineExpressions(expression, isActiveFilter);}return expression; }  突然看上去觉得这个自定义过滤器好复杂后来想想那ABP内置的软删除过滤器(ISoftDelete)和多租户过滤器(IMultiTenant)是如何实现的呢然后就找到了源码ABP/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs看了源码实现后会发现格式一模一样所以自定义过滤器使用起来没有这么复杂。三.遇到的实际问题  假如在SaaS系统中有一个主中心和分中心的概念什么意思呢就是在主中心中可以看到所有分中心的User数据同时主中心可以把一些通用的资料(比如科普文章)共享给分中心。在ABP群里问了下有人建议宿主就是宿主用来做租户管理的不能把它当成一个租户这是一个父子租户的问题。有人建议搞一个仿租户ID过滤器这样既能曲线解决问题又不背离宿主和租户的原则。父子租户第一次听说所以暂不考虑。因为系统已经开发了一部分如果每个实体都继承仿租户ID过滤器接口那么也觉得麻烦。  最终选择把主中心当成是宿主用户分中心当成是租户。对于一些通用的资料(比如科普文章)在增删改查中直接IDataFilter局部过滤。比如查找实现如下public async TaskPagedResultDtoArticleDto GetAll(GetArticleInputDto input) {// 临时禁用掉IMultiTenant过滤器using (_dataFilter.DisableIMultiTenant()){var query (await _repository.GetQueryableAsync()).WhereIf(!string.IsNullOrWhiteSpace(input.Filter), a a.Title.Contains(input.Filter));var totalCount await query.CountAsync();var items await query.OrderBy(input.Sorting ?? Id).Skip(input.SkipCount).Take(input.MaxResultCount).ToListAsync();var dto ObjectMapper.MapListArticle, ListArticleDto(items);return new PagedResultDtoArticleDto(totalCount, dto);} }  对于主中心中可以看到所有分中心的User数据这个问题因为只是涉及到查看不做增删改所以又新建了一个User查找接口在该接口中直接IDataFilter局部过滤。这样新建的User查找接口就可以看到所有分中心的数据原来的User查找接口仅能看到宿主或者租户的User数据。总之适合自己需求的架构就是最好的如果架构满足不了需求了那么就迭代架构。参考文献[1]数据过滤https://docs.abp.io/zh-Hans/abp/6.0/Data-Filtering[2]Volo.Abp.Datahttps://github.com/abpframework/abp/tree/dev/framework/src/Volo.Abp.Data[3]EntityFramework.DynamicFiltershttps://github.com/zzzprojects/EntityFramework.DynamicFilters[4]ABP文档笔记 - 数据过滤https://www.cnblogs.com/wj033/p/6494879.html[5]ABP领域层 - 数据过滤器https://www.kancloud.cn/gaotang/abp/225839[6]Mastering-ABP-Frameworkhttps://github.com/PacktPublishing/Mastering-ABP-Framework[7]ABP多租户https://docs.abp.io/zh-Hans/abp/6.0/Multi-Tenancy[8]ASP.NET Boilerplate中文文档https://www.kancloud.cn/gaotang/abp/225819[9]详解ABP框架中数据过滤器与数据传输对象使用https://wenku.baidu.com/view/ec237e90b3717fd5360cba1aa8114431b80d8e5e[10]ASP.NET Boilerplate官方文档https://aspnetboilerplate.com/Pages/Documents/Introduction[11]How to create a custom data filter with EF Corehttps://support.aspnetzero.com/QA/Questions/4752/How-to-create-a-custom-data-filter-with-EF-Core
http://www.pierceye.com/news/378027/

相关文章:

  • 可以看网站的浏览器wordpress+博客+简书
  • 游戏源码网站免费网站模板有哪些内容
  • 江西网站优化广东网站设计有名的公司
  • wordpress整合dplayer关键词优化举例
  • wordpress怎么设置跳站外链接番禺网站建设培训学校
  • 怎样建立网站平台新网站应该怎么做
  • 根据颜色找网站济南做网站公司排名
  • 面对面视频 网站开发网络科技加我qq是干嘛
  • 如何登录网站制作平台百度旧版本
  • 广东营销型网站建设报价定制商品的app
  • 网站导航常用关键字电子商务网站设计内容
  • 建设vip网站相关视频wordpress 修改用户头像
  • 考百度指数 某个关键词在某个行业网站上的wordpress与Wix对比
  • 机器人网站建设规划书福州网站制作怎样
  • 自己创建一个网站需要多少钱2023最建议买10款手机
  • 寻找富阳网站建设国内个人网站欣赏
  • 企业自建站城市建设模拟游戏官方网站
  • 网站建设数据库类型建立网站信息发布登记制度
  • it培训机构都有哪些seo推广教程seo推广技巧
  • 龙岩网站开发较好的公司wordpress屏蔽首页
  • 有没有做美食的网站深圳网站建站公司
  • 学校网站建设需求分析调研表网站右侧信息跟随左侧菜单栏变化
  • 家乡网站建设策划案邢台哪里建网站
  • 网站建设实习收获青岛网上房地产网站
  • 简述电子政务网站设计的技术企业邮箱是什么类型的账户
  • 深圳网站建设公司元嘉定网站开发
  • 佛山外贸网站建设平台上传网站安装教程
  • c2c网站建设实例德国网站建设
  • 建网站支持设备是什么意思佛山中小企业网站建设
  • 网站建设与管理读后感宁德住房和城乡建设部网站