怎样做php网站网站建设方案ppt下载

张小明 2026/1/1 8:55:58
怎样做php网站,网站建设方案ppt下载,wordpress建站云盘,杨谦教授编的营销课程一、充血模型和失血模型1. 充血模型的优势充血模型更加OOP充血模型代码可读性更好1.1 充血模型伪代码var messageDto controller.ReadDto();var message messageDto.ToEntity();message.Save();1.2 失血模型伪代码var messageDto controller.ReadDto();var message message…一、充血模型和失血模型1. 充血模型的优势充血模型更加OOP充血模型代码可读性更好1.1 充血模型伪代码var messageDto controller.ReadDto();var message messageDto.ToEntity();message.Save();1.2 失血模型伪代码var messageDto controller.ReadDto();var message messageDto.ToEntity();var messageService controller.GetMessageService();messageService.Save(message);2. 充血模型爱你不容易大部分程序员都知道充血模型好,想实现却很难大部分业务逻辑都需要依赖外部服务充血模型需要用到外部服务,又不想依赖外部服务的具体实现很容易想到使用IOC的依赖注入来解决我们给DTO注入服务还行,因为IOC参与了controller过程当DTO发生转化时,新增的服务IOC还是有点力不从心没法引用外部服务的充血模型气血不通,业务表达能力大大下降这也是大部分人弃用充血模型的主要原因,不好用还不如不用这个任督二脉PocoEmit可以帮你打通二、首先来个Case演示一下Dto转化为实体但是实体有更多逻辑依赖外部服务,这些外部服务Dto不见得提供的了这就需要注入PocoEmit支持构造函数参数注入和属性注入IMapper对象是默认支持注入的服务1. Entity比Dto多出来的Mapper可以注入class MessageDto{public string Message { get; set; }}class MessageEntity{public IMapper Mapper { get; set; }public string Message { get; set; }}2. 转化并注入的代码var mapper Mapper.Create();var dto new MessageDto { Message Hello UseMapper };MessageEntity message mapper.ConvertMessageDto, MessageEntity(dto);Assert.NotNull(message.Mapper);三、再演示注入自定义的服务1. UserDomain比Dto多出来的Repository可以注入class UserDTO{public int Id { get; set; }public string Name { get; set; }}class UserDomain(UserRepository repository, int id, string name){private readonly UserRepository _repository repository;public UserRepository Repository _repository;public int Id { get; } id;public string Name { get; } name;// ...}class UserRepository{void Add(UserDomain user) { }void Update(UserDomain entity) { }void Remove(UserDomain entity) { }public static readonly UserRepository Instance new();}2. 注册、转化并注入的代码通过UseDefault可以注入服务IMapper mapper Mapper.Create().UseDefault(UserRepository.Instance);var dto new UserDTO { Id 1, Name Jxj };UserDomain user mapper.ConvertUserDTO, UserDomain(dto);Assert.NotNull(user.Repository);四、注入IOC容器的Case注入IOC容器需要安装nuget包PocoEmit.ServiceProvider1. 包含IOC容器的实体class UserWithServiceProvider{public int Id { get; set; }public string Name { get; set; }public IServiceProvider ServiceProvider { get; set; }}2. 注册、转化并注入的代码UseSingleton是把容器作为唯一容器注入UseScope是使用当前Scope子容器UseContext是在Mvc下,使用当前HttpContext的RequestServices子容器var services new ServiceCollection();var serviceProvider services.BuildServiceProvider();var mapper Mapper.Create();mapper.UseSingleton(serviceProvider);var dto new UserDTO { Id 1, Name Jxj };UserWithServiceProvider user mapper.ConvertUserDTO, UserWithServiceProvider(dto);Assert.NotNull(user.ServiceProvider);五、当然还可以注入容器内的服务1. UserDomain多出来的Repository需要注入这次我们用IOC来管理Repository这样才能更好的利用依赖注入Repository可能还会依赖其他的服务手动维护服务对象可能会很麻烦,IOC容器擅长维护这些复杂关系class UserDomain(UserRepository repository, int id, string name){private readonly UserRepository _repository repository;public UserRepository Repository _repository;public int Id { get; } id;public string Name { get; } name;// ...}class UserRepository{void Add(UserDomain user) { }void Update(UserDomain entity) { }void Remove(UserDomain entity) { }}2. 注册、转化并注入的代码通过UseScope注入IOC容器通过UseDefault告知这个类型从IOC容器中注入var services new ServiceCollection().AddScopedUserRepository();var serviceProvider services.BuildServiceProvider();var mapper Mapper.Create();mapper.UseScope(serviceProvider).UseDefaultUserRepository();var dto new UserDTO { Id 1, Name Jxj };UserDomain user mapper.ConvertUserDTO, UserDomain(dto);Assert.NotNull(user.Repository);六、支持IOC容器的特性支持FromKeyedServices支持FromServices1. FromKeyedServices标记注入点和服务键class UserDomain1([FromKeyedServices(User1)]UserRepository repository, int id, string name): UserDomain(repository, id, name){}class UserDomain2([FromKeyedServices(User2)] UserRepository repository, int id, string name): UserDomain(repository, id, name){}class UserDomain(UserRepository repository, int id, string name){private readonly UserRepository _repository repository;public UserRepository Repository _repository;public int Id { get; } id;public string Name { get; } name;// ...}class UserRepository(string tableName){private readonly string _tableName tableName;public string TableName _tableName;void Add(UserDomain user) { }void Update(UserDomain entity) { }void Remove(UserDomain entity) { }}2. 注册、转化并注入的代码由于识别出FromKeyedServices,就不需要UseDefault这样简洁又优雅string table1 User1;string table2 User2;var services new ServiceCollection().AddKeyedScoped(table1, (_, _) new UserRepository(table1)).AddKeyedScoped(table2, (_, _) new UserRepository(table2));var serviceProvider services.BuildServiceProvider();var mapper Mapper.Create();mapper.UseScope(serviceProvider);var dto new UserDTO { Id 1, Name Jxj };UserDomain user mapper.ConvertUserDTO, UserDomain1(dto);Assert.NotNull(user.Repository);UserDomain user2 mapper.ConvertUserDTO, UserDomain2(dto);Assert.NotNull(user2.Repository);七、竞品类似的功能1. AutoMapper不支持AutoMapper的NullSubstitute用来指定源属性为null时的默认值用AutoMapper实现类似功能需要复杂的自定义IValueResolver来实现PocoEmit在源无法匹配或源字段为null都可能触发依赖注入2. EF有类似功能不过貌似只支持EF内部某些服务请参阅 EF Core实体类的依赖注入八、总结1. OOM映射需要依赖注入DTO、实体、领域模型如果有业务逻辑就需要依赖外部服务支持按类型注入,也支持按指定的参数或属性注入支持FromKeyedServices和FromServices需要外部服务就需要依赖注入2. PocoEmit的依赖注入助力程序分层架构依赖注入的加持每一层想调用啥就调用啥同时也让每一层更好的划分让调用啥,不让调用啥更容易控制同时也让业务需要划分多少层就划分多层变得简单3. IOC容器使用需要注意简单作业单容器,使用UseSingleton即可多线程需要使用UseScopeMvc(含WebApi)逻辑处理使用UseContextUseContext需要引用nuget包PocoEmit.Mvc如果是Mvc异步处理或Quartz类似作业不要用UseContext就怕异步中获取到了HttpContext,但执行中途被释放了,后面就可能异常了
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

前程无忧网站开发待遇怎么样wordpress怎么传文章

一、幂等性核心概念与问题分析1.1 幂等性定义与重要性幂等性是分布式系统中的核心概念,指同一个操作无论执行一次还是多次,结果都保持一致。在软件系统中,幂等性主要体现在两个方面:接口幂等:防止客户端重复提交请求消…

张小明 2025/12/22 19:13:10 网站建设

网站建站报告个人网站seo

Linux 系统使用指南与相关技术解析 1. 符号与数字 在 Linux 系统中,许多符号和数字都有着特定的用途。例如,星号(*)常用于通配符扩展,可在文件查找和命令使用时匹配多个字符,在文件操作命令中能方便地指定多个文件。反斜杠(\)用于转义字符,当需要输入特殊字符时,可…

张小明 2025/12/22 19:12:09 网站建设

网站新闻打不开柳市网站制作

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个使用Vue3 Teleport的全屏加载组件。功能需求:1. 当API请求时显示全屏半透明遮罩 2. 中央显示旋转的加载图标 3. 自动隐藏错误和完成状态 4. 支持自定义加载文字…

张小明 2025/12/31 18:51:49 网站建设

公司做网站需要哪些网站服务器有哪些种类

WeChatPad:3分钟搞定微信双设备同时在线,告别扫码烦恼! 【免费下载链接】WeChatPad 强制使用微信平板模式 项目地址: https://gitcode.com/gh_mirrors/we/WeChatPad 还在为微信的单设备登录限制而烦恼吗?WeChatPad是一款专…

张小明 2025/12/29 7:36:22 网站建设

如何拥有自己的网站域名应用商店官方免费下载

近日,知名社会活动家吕绍蔚先生正式获聘香港区域国别研究院名誉院长,聘书于2025年11月颁发,证书编号HKRIAIPR666209。此次聘任既是对其在民间外交与国际合作领域卓越成就的高度认可,更将为研究院强化学术实力、助力香港打造国际交…

张小明 2025/12/31 20:49:57 网站建设

效果图制作代做网站低代码开发平台是什么

Linux 环境下部署 ComfyUI 的完整实践指南 在当前生成式 AI 快速发展的背景下,越来越多开发者和内容创作者开始转向可定制、高复现性的工具链。传统“一键式”图形界面虽然上手快,但在面对复杂任务时往往显得力不从心。而 ComfyUI 正是为解决这一痛点而…

张小明 2025/12/22 19:08:04 网站建设