网站建设视频技术论坛,网站建设z,杭州微网站建设公司哪家好,apache 配置php网站SmartSql源码#xff1a;https://github.com/Ahoo-Wang/SmartSql1|1简介动态代理仓储(SmartSql.DyRepository)组件是SmartSql非常独特的功能#xff0c;它能简化SmartSql的使用。对业务代码除了配置几乎没有侵入。可以说使用SmartSqlContainer是原始方法#xff0c;而DyRepo… SmartSql源码https://github.com/Ahoo-Wang/SmartSql1|1简介动态代理仓储(SmartSql.DyRepository)组件是SmartSql非常独特的功能它能简化SmartSql的使用。对业务代码除了配置几乎没有侵入。可以说使用SmartSqlContainer是原始方法而DyRepository自动帮你实现这些方法。DyRepository的表现是只需要定义仓储接口通过简单配置就能自动实现这些接口并注册到IoC容器中使用时注入即刻获取实现。原理是通过接口和接口方法的命名规则来获取SmartSql的xml文件中的Scope和SqlId用接口方法的参数作为Request通过xml中的sql自动判断是查询还是执行操作最后实现对ISmartSqlMapper的调用。1|2适合场景使用了仓储模式的架构仓储模式主要在DDD战术中运用用来隔离领域和数据库。DyRepository的功能需求主要是在DDD的实践中发现的目前为止已经满足DDD实践的大部分需求如果还有其他的相关需求欢迎提出Issue。类似SqlHepler的应用DyRepository可以将任意一个接口实现出查询数据库的工具CURD方法不在话下。通过接口注入更能发挥解耦的作用。1|3使用介绍下面会简单演示DyRepository与ISmartSqlMapper的使用对比。准备工作先创建一个仓储这个仓储不依赖SmartSql只是普普通通的仓储接口创建配置xml文件SmartSqlMapConfig.xml再创建xml配置文件Activity.xml放到Maps目录并且在属性面板设置为“始终复制”:准备工作完成下面就可以展示两种用法的区别。两种用法ISmartSqlMapper 用法如果不用DyRepository我们需要用ISmartSqlMapper实现这个仓储。再把实现类注册到IoC中:Dpy如果使用DyRepository我们只需配置一下IoC注册即可。注入使用使用方法就注入接口再调用接口方法了。1|4总结通过DyRepository与ISmartSqlMapper的简单对比我们就可以看出DyRepository的强大为我们省下了很多代码。当然ISmartSqlMapper自然也有它的灵活性能够在任何地方使用。但是如果没有其他的特殊需求在架构方面因为对业务代码几乎无侵入DyRepository无疑是最推荐的使用方式。本文只介绍了DyRepository默认约定的使用方法其实它还能通过各种配置项去实现更灵活的功能。详情请看下一节《DyRepository配置》。2|0DyRepository配置DyRepository的配置分为默认配置、特性配置和注册配置但是都必须配置IoC注册因为要都需要创建动态的接口实现到IoC中。2|1必须的配置:单个注册 services.AddRepositoryIUserRepository();批量注册2|2可选配置特性配置指在接口上标注特性来配置DyRepository的配置项而注册配置是指在IoC注册方法中配置下面演示一下两者的不同。Scope配置场景I{Scope}Repository是默认配置的Scope模版如IUserRepository的Scope就是User。如果是这样的接口命名风格则无需再配置。而当需要换接口命名风格如查询User的Dao层名称是IUserDao则需要配置对应的Scope。特性配置 [SqlMap(Scope User)] public interface IUserDao{}注册配置的只要被扫描到的接口不同就可以给不同的接口配置不同的属性SqlId配置SqlId默认是取仓储接口的方法名只要方法名跟xml中的SqlId一样则无需任何配置。场景因为SmartSql的sql配置是可以动态渲染的当同一个SqlId传入不同的参数可以渲染出不同的查询条件。例如此时如果只用默认配置写两个Query(string)方法就会有同方法名同参数类型而无法重载的问题。因此此时需要接口方法名不同而通过配置去指定相同的SqlId。特性配置注册配置册配置中是通过配置一个叫sqlIdNamingConvert的委托参数来实现接口方法名到SqlId的转换方法。需要注意的是这个配置需要把AddSmartSqlRepositoryFactory和AddRepositoryFromAssembly两个方法分开原因是前几个配置中的AddSmartSqlRepositoryFromAssembly方法内部调用过AddSmartSqlRepositoryFactory如果再次调用会造成冲突。其它配置场景如果希望SmartSql只做接口实现而不侵入接口以上的注册配置基本就能满足大部分需求。但是如果需要深入使用SmartSql那么利用特性配置和一个泛型接口能得到更多额外的功能。接口方法指定Sql即直接给接口方法绑定sql无需再从xml中配置sql了但请注意参数前缀还是需要在对应的配置文件配置。即把接口方法的参数值传递给Sql渲染时指定参数名的参数例如把id的值传递给UserId继承泛型接口之后能够直接调用它里面的CURD通用方法。同步调用IRepositoryTEntity, TPrimary异步调用IRepositoryAsyncTEntity, TPrimary相关文章如何通过本地化事件正确实现微服务内部强一致性事件总线跨微服务间最终一致性SmartCode 正式开源不只是代码生成器SmartSql For Asp.Net Core 最佳实践原文地址https://www.cnblogs.com/ElderJames/p/9670296.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com