zoukankan      html  css  js  c++  java
  • 思考一种好的架构(三)

    这节说下最最最核心的库

    数据持久化ORM 

    其实还有很多关键点没说,但是我都跳过了,先说实现场景,再说架构,由浅入深

    这里我使用的是Chloe.ORM,用起来比较顺手,也很轻,便于扩展,没有太大的问题,可以很方便的做事件(读写分离)CQRS,(工作单元)WorkOfUnit

     /// <summary>
        /// 单次请求中DC上下配置对象
        /// </summary>
        public interface IDCScoped: IDbConnectionFactory
        {
            /// <summary>
            /// 数据库连接字符串
            /// </summary>
            string ConnectionString { get; }
    
            /// <summary>
            /// 操作类型
            /// </summary>
            DCOperationType OperationType { get; }
    
            /// <summary>
            /// 选择操作类型
            /// </summary>
            /// <param name="connectionString"></param>
            /// <param name="operationType"></param>
            void SelectOpeation(string connectionString, DCOperationType operationType);
    
    
    
        }
     /// <summary>
        /// 数据库范围
        /// </summary>
        public class DCScope : IDCScoped
        {
            /// <summary>
            /// 数据库连接上下字符串
            /// </summary>
            public string ConnectionString { get;private set; }
            /// <summary>
            /// 操作类型
            /// </summary>
            public DCOperationType OperationType { get; private set; }
    
            /// <summary>
            /// 创建DC
            /// </summary>
            /// <returns></returns>
            public IDbConnection CreateConnection()
            {
                return new MySqlConnection(ConnectionString);
            }
            /// <summary>
            /// 选择操作
            /// </summary>
            /// <param name="connectionString"></param>
            /// <param name="operationType"></param>
            public void SelectOpeation(string connectionString, DCOperationType operationType)
            {
                this.ConnectionString = connectionString;
                this.OperationType = operationType;
            }
        }
        /// <summary>
        /// DC操作类型
        /// </summary>
        public enum DCOperationType {
            /// <summary>
            /// 读操作
            /// </summary>
            Query = 0,
            /// <summary>
            /// 写操作
            /// </summary>
            Command=1
        }
     public static class IQueryExtend
        {
            public static IQuery<T> EmptyCheck<T>(this IQuery<T> query,object judgeValue, Expression<Func<T, bool>> predicate) {
                if (judgeValue!=null)
                {
                   return query.Where(predicate);
                }
                return query;
            }
        }

    这个只是一个非空判断的扩展Where方法,单独写出来只是为了表示Chloe.ORM一切都归它管,扩展方法也是

     public static class Startup
        {
            public static void ConfigureServices(IServiceCollection services)
            {
                services.AddScoped<IDCScoped, DCScope>();
                services.AddScoped<IDbContext>(x=> new MySqlContext(x.GetService<IDCScoped>()));
            }
    
            public static void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
            }
        }

    这个注入了IDScoped对象和IDbContext对象

    IDScoped 是保存每次需要数据库的信息

    ORM.Chloe.DoMain 

    负责维护一个数据库上下文和它的生命周期,Chloe.ORM的扩展也归它管,但是具体要选哪个数据库创建对象就不归它管了,谁爱管谁管,反正我不负责选则数据库的业务

  • 相关阅读:
    Python正则表达式指南(转)
    二进制文件与文本文件的区分(转)
    Linux上的下载软件uGet
    Ubuntu 12.04安装Google Chrome(转)
    单元测试中的黑盒测试的重要性(转)
    尾递归(转)
    chrome使用技巧(转)
    LRU算法的Python实现
    MySQL单列索引和组合索引的区别介绍(转)
    Python性能优化(转)
  • 原文地址:https://www.cnblogs.com/AnAng/p/12607292.html
Copyright © 2011-2022 走看看