zoukankan      html  css  js  c++  java
  • SevenArmsSeries.Repositories

    数据访问的简约设计

    https://github.com/bigmouthz/SevenArmsSeries.Repositories

     1     public class Request
     2     {
     3         /// <summary>
     4         /// 请求主体或标识约定
     5         /// </summary>
     6         public string Guid { get; set; }
     7 
     8         /// <summary>
     9         /// 查询条件 对应于系统后台实现规则 
    10         /// </summary>
    11         public IList<RequestParameter> Params { get; set; }
    12     }
    1     public class RequestParameter
    2     {
    3         public string Name { get; set; }
    4 
    5         public string Value { get; set; }
    6 
    7         public string Type { get; set; }
    8     }
     1     /// <summary>
     2     /// 命令执行请求
     3     /// </summary>
     4     public class CommandRequest : Request
     5     {
     6         /// <summary>
     7         /// 返回值类型:true:返回任意类型,false:Int类型
     8         /// </summary>
     9         public bool TrueScalar_FalseIntByResult { get; set; }
    10 
    11     }
     1     /// <summary>
     2     /// 命令执行返回值
     3     /// </summary>
     4     public class CommandResponse
     5     {
     6         /// <summary>
     7         /// 返回值
     8         /// </summary>
     9         public object ResultValue { get; set; }
    10     }
     1  /// <summary>
     2     /// 存储-返回对象
     3     /// </summary>
     4     public class RepositoryResponse
     5     {
     6         /// <summary>
     7         /// 执行有无成功
     8         /// </summary>
     9         public bool ResultState { get; set; }
    10 
    11         /// <summary>
    12         /// 返回执行纪录情况
    13         /// </summary>
    14         public string MessageString
    15         {
    16             get
    17             {
    18                 StringBuilder sb = new StringBuilder();
    19                 if (CreateMessage != null && CreateMessage.Count > 0)
    20                 {
    21                     sb.AppendLine("Create:");
    22                     foreach (var m in CreateMessage)
    23                     {
    24                         sb.AppendFormat("{0},{1} ", m.Key, m.Value).AppendLine();
    25                     }
    26                 }
    27                 if (UpdateMessage != null && UpdateMessage.Count > 0)
    28                 {
    29                     sb.AppendLine("Update:");
    30                     foreach (var m in UpdateMessage)
    31                     {
    32                         sb.AppendFormat("{0},{1} ", m.Key, m.Value).AppendLine();
    33                     }
    34                 }
    35                 if (RemoveMessage != null && RemoveMessage.Count > 0)
    36                 {
    37                     sb.AppendLine("Remove:");
    38                     foreach (var m in RemoveMessage)
    39                     {
    40                         sb.AppendFormat("{0},{1} ", m.Key, m.Value).AppendLine();
    41                     }
    42                 }
    43                 return sb.ToString();
    44             }
    45         }
    46 
    47         /// <summary>
    48         /// 执行情况-新增
    49         /// </summary>
    50         public Dictionary<string, string> CreateMessage { get; set; }
    51 
    52         /// <summary>
    53         /// 执行情况-修改
    54         /// </summary>
    55         public Dictionary<string, string> UpdateMessage { get; set; }
    56 
    57         /// <summary>
    58         /// 执行情况-删除
    59         /// </summary>
    60         public Dictionary<string, string> RemoveMessage { get; set; }
    61     }
    RepositoryResponse
     1     /// <summary>
     2     /// 存储-请求对象
     3     /// </summary>
     4     /// <typeparam name="TKey"></typeparam>
     5     /// <typeparam name="TEntity"></typeparam>
     6     public class RepositoryRequest<TKey, TEntity>:Request
     7     {
     8         /// <summary>
     9         /// 新增实体集
    10         /// </summary>
    11         public List<TEntity> CreateEntities { get; set; }
    12 
    13         /// <summary>
    14         /// 修改实体集
    15         /// </summary>
    16         public List<TEntity> UpdateEntities { get; set; }
    17 
    18         /// <summary>
    19         /// 删除实体集
    20         /// </summary>
    21         public List<TKey> RemoveEntities { get; set; }
    22     }
    RepositoryRequest
     1  /// <summary>
     2     /// 单记录查询请求对象
     3     /// </summary>
     4     public class QueryBySingleRequest:Request
     5     {
     6         public static string DefaultNullParamPlus = " 1=1 ";
     7 
     8         private string _paramPlus = string.Empty;
     9         /// <summary>
    10         /// 查询条件 用于复杂的查询页面,接收前台拼接好的sql语句条件 用于字符串替换默认为{0}
    11         /// </summary>
    12         public string ParamPlus
    13         {
    14             get
    15             {
    16                 return string.IsNullOrWhiteSpace(_paramPlus) ? DefaultNullParamPlus : _paramPlus;
    17             }
    18             set { _paramPlus = value; }
    19         }
    20 
    21         private Dictionary<string, string> _paramSort = new Dictionary<string, string>();
    22         /// <summary>
    23         /// 排序条件 关键字:排序 对应于系统后台实现规则(asc|desc), 转换后 用于字符串替换默认为{1}
    24         /// </summary>
    25         public Dictionary<string, string> ParamSort { get { return _paramSort; } set { _paramSort = value; } }
    26 
    27    
    28     }
    QueryBySingleRequest
     1     /// <summary>
     2     /// 单记录对象返回对象
     3     /// </summary>
     4     /// <typeparam name="TDto"></typeparam>
     5     public class QueryBySingleResponse<TDto>
     6     {
     7         /// <summary>
     8         /// 返回的记录
     9         /// </summary>
    10         public TDto Row { get; set; }
    11     }
    QueryBySingleResponse
     1  /// <summary>
     2     /// 多记录查询请求对象
     3     /// </summary>
     4     public class QueryByMoreRequest : QueryBySingleRequest
     5     {
     6         /// <summary>
     7         /// 是否分页
     8         /// </summary>
     9         public bool IsPaging { get; set; }
    10 
    11         private int _pageIndex;
    12         /// <summary>
    13         /// 分页情况下的,当前页面,下标为1起
    14         /// </summary>
    15         public int PageIndex { get { return _pageIndex <= 0 ? 1 : _pageIndex; } set { _pageIndex = value; } }
    16 
    17         private int _pageSize;
    18         /// <summary>
    19         /// 分页情况下的,页面尺寸,最少为1起
    20         /// </summary>
    21         public int PageSize { get { return _pageSize <= 0 ? 1 : _pageSize; } set { _pageSize = value; } }
    22   
    23         /// <summary>
    24         /// 是否启用页面缓存,仅当页面缓存有效时才有用
    25         /// </summary>
    26         public bool IsCachePage { get; set; }
    27 
    28         /// <summary>
    29         /// 恒等于 启用分页下的当前页面(后台无意义,前台用于控制用)
    30         /// </summary>
    31         public int _cachePageIndex { get; set; }
    32 
    33         /// <summary>
    34         /// 缓存情况下,缓存页面数
    35         /// </summary>
    36         public int CahcePageCount { get; set; }
    37 
    38     }
    QueryByMoreRequest
     1     /// <summary>
     2     /// 多记录查询返回对象
     3     /// </summary>
     4     /// <typeparam name="TDto"></typeparam>
     5     public class QueryByMoreResponse<TDto>
     6     {
     7         /// <summary>
     8         /// 返回总记录数
     9         /// </summary>
    10         public int TotalRowCount { get; set; }
    11 
    12         /// <summary>
    13         /// 返回的记录集
    14         /// </summary>
    15         public List<TDto> Rows { get; set; }
    16     }
    QueryByMoreResponse

     应用实现示例:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using SevenArmsSeries.Repositories.RDBMS;
    
    namespace SevenArmsSeries.PassionateRing.RDBMSStoreTest
    {
        public class User:IEntity
        {
            public string Guid { get; set; }
            public string Code { get; set; }
            public string Name { get; set; }
            public int IsAdministrator { get; set; }
    
            #region IEntity Members
    
            public IKey GetKey()
            {
                return (IKey)new UserKey() {  Guid =  this.Guid };
            }
    
            public List<Repositories.RDBMS.Core.SqlParams> GetSQLParams()
            {
                return new List<Repositories.RDBMS.Core.SqlParams>() 
                {
                     new Repositories.RDBMS.Core.SqlParams(){ ColumnName = "@Guid", Value = this.Guid, ColumnType = System.Data.DbType.String },
                     new Repositories.RDBMS.Core.SqlParams(){ ColumnName = "@Code", Value = this.Code, ColumnType = System.Data.DbType.String },
                     new Repositories.RDBMS.Core.SqlParams(){ ColumnName = "@Name", Value = this.Name, ColumnType = System.Data.DbType.String },
                     new Repositories.RDBMS.Core.SqlParams(){ ColumnName = "@IsAdministrator", Value = this.IsAdministrator, ColumnType = System.Data.DbType.Boolean },
                };
            }
    
            #endregion
        }
    
        public class UserKey : IKey
        {
            public string Guid { get; set; }
    
            #region IKey Members
    
            public List<Repositories.RDBMS.Core.SqlParams> GetSQLParams()
            {
                return new List<Repositories.RDBMS.Core.SqlParams>() 
                {
                     new Repositories.RDBMS.Core.SqlParams(){ ColumnName = "@Guid", Value = this.Guid, ColumnType = System.Data.DbType.String },
                };
            }
    
            #endregion
        }
    }
    

      

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using SevenArmsSeries.Repositories;
    using SRRDBMS = SevenArmsSeries.Repositories.RDBMS;
    using SevenArmsSeries.Repositories.RDBMS;
    
    namespace SevenArmsSeries.PassionateRing.RDBMSStoreTest
    {
    
        public class UserHelper : IQueryBySingle<User>,IQueryByCount, IQueryByMore<User>
        {
            readonly  string Flag = "SevenArmsSeries.PassionateRing.RDBMSStoreTest.User";
    
            public UserHelper()
            {
                if (!SRRDBMS.ReposityEntityFactory.Items.ContainsKey(Flag))
                {
                    SRRDBMS.ReposityEntityFactory.Items.Add(Flag,
                                   new ReposityEntity()
                                   {
    
                                       OwnerService = "PassionateRing",
                                       QuerySingleEntity = @"Select [Guid],[Code],[Name],[IsAdministrator] 
                                         From   [PassionateRing].[dbo].[User] 
                                         Where  [Guid] = @Guid",
                                       CreateEntity = @"INSERT INTO [PassionateRing].[dbo].[User]
                                        ([Guid],[Code],[Name],[IsAdministrator])
                                         VALUES
                                        (@Guid ,@Code ,@Name ,@IsAdministrator)",
                                       UpdateEntity = @"UPDATE [PassionateRing].[dbo].[User]
                                        SET [Code] = @Code
                                          ,[Name] = @Name
                                          ,[IsAdministrator] = @IsAdministrator
                                        Where [Guid] = @Guid ",
                                       RemoveEntity = @"Delete From  [PassionateRing].[dbo].[User] 
                                        Where [Guid] = @Guid ",
                                       QueryCountEntity = @"Select Count(*) CNT 
                                         From   [PassionateRing].[dbo].[User] 
                                        Where 1 = 1
                                        And  {0}",
                                       QueryMoreEntity = @"Select [Guid],[Code],[Name],[IsAdministrator] 
                                         From   [PassionateRing].[dbo].[User] 
                                        Where 1 = 1
                                        And  {0}
                                        Order By {1}",
                                       CommandEntity = @"Update [PassionateRing].[dbo].[User] 
                                       SET [IsAdministrator] = @IsAdministrator
                                        Where [Guid] = @Guid  ",                                                           
                                   }
                                );
    
                    SRRDBMS.ReposityEntityFactory.Items[Flag].Add("CreateTable",
                        @"IF NOT EXISTS  (SELECT  * FROM [PassionateRing].dbo.SysObjects WHERE ID = object_id(N'[User]') 
                        AND OBJECTPROPERTY(ID, 'IsTable') = 1) 
                            CREATE TABLE [PassionateRing].[dbo].[User](
    	                        [Guid] [varchar](40) COLLATE Chinese_PRC_CI_AS NOT NULL,
    	                        [Code] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,
    	                        [Name] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,
    	                        [IsAdministrator] [bit] NULL,
                             CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED 
                            (
    	                        [Guid] ASC
                            )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
                            ) ON [PRIMARY]
                        ");
                }
            }
    
            public QueryBySingleResponse<User> Get(QueryBySingleRequest request)
            {
                return new QueryBySingle<User>().Get(request, SRRDBMS.ReposityEntityFactory.Items[Flag]);
            }
    
            public int GetCount(QueryBySingleRequest request)
            {
                return new QueryByCount().GetCount(request, SRRDBMS.ReposityEntityFactory.Items[Flag]);
            }
            
            public QueryByMoreResponse<User> Gets(QueryByMoreRequest request)
            {
                return new QueryByMore<User>().Gets(request, SRRDBMS.ReposityEntityFactory.Items[Flag]);
            }
            
            public CommandResponse ChangeUserState(CommandRequest request)
            {
                return new Command().Execute(request, SRRDBMS.ReposityEntityFactory.Items[Flag]);
            }
    
            public CommandResponse CreateTable(CommandRequest request)
            {
                return new Command().Execute(request, SRRDBMS.ReposityEntityFactory.Items[Flag], "CreateTable");
            }
    
            public RepositoryResponse Save(RepositoryRequest<UserKey, User> request)
            {
                return new Repository<UserKey, User>().Save(request, SRRDBMS.ReposityEntityFactory.Items[Flag]);
            }
        }
    }
    

      

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using SevenArmsSeries.Repositories;
    
    namespace SevenArmsSeries.PassionateRing.RDBMSStoreTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                UserHelper helper = new UserHelper();
                var r1 =  helper.CreateTable(new Repositories.CommandRequest() { TrueScalar_FalseIntByResult = false });
                var r2 = helper.Save(new Repositories.RepositoryRequest<UserKey, User>()
                {
                    CreateEntities = new List<User>() 
                    {
                        new User(){ Guid = "1", Code="A", Name = "A", IsAdministrator=0},
                        new User(){ Guid = "2", Code="B", Name = "B", IsAdministrator=0},
                        new User(){ Guid = "3", Code="C", Name = "C", IsAdministrator=0},
                        new User(){ Guid = "4", Code="D", Name = "D", IsAdministrator=0},
                    },
                    UpdateEntities = new List<User>() 
                    {
                        new User(){ Guid = "1", Code="A", Name = "AA", IsAdministrator=0},
                        new User(){ Guid = "4", Code="D", Name = "DD", IsAdministrator=0},
                     },
                    RemoveEntities = new List<UserKey>() 
                    {
                        new UserKey(){ Guid ="2" },
                        new UserKey(){ Guid ="3" },                    
                    },
    
                });
                var r3 = helper.ChangeUserState(new Repositories.CommandRequest()
                {
                    TrueScalar_FalseIntByResult = false,
                    Params = new List<RequestParameter>() 
                    {
                        new RequestParameter(){ Name = "IsAdministrator", Value ="1", Type ="bit", },
                        new RequestParameter(){ Name = "Guid", Value ="1", Type ="string", }
               },
                });
                var r4 = helper.Get(new QueryBySingleRequest()
                {
                    Params = new List<RequestParameter>() 
                    {
                        new RequestParameter(){ Name = "Guid", Value ="1", Type ="string", }
                    },
                });
                var r5 = helper.GetCount(new QueryBySingleRequest()
                {
                    ParamPlus = "1=1",
                    ParamSort = new Dictionary<string, string>() 
                    {
                        {"[Code]","desc"},
                        {"[Name]","desc"},
                    }
                });
                var r6 = helper.Gets(new QueryByMoreRequest()
                {
                    ParamPlus = "1=1",
                    ParamSort = new Dictionary<string, string>() 
                    {
                        {"[Code]","desc"},
                        {"[Name]","desc"},
                    },
                });
    
                Console.WriteLine();
            }
        }
    }
    

      

  • 相关阅读:
    ACM学习
    吴翼大神
    心急的C小加(两种解法)
    万圣节派对(水题)
    poj 1163 The Triangle
    POJ 1088滑雪
    1690 开关灯
    908. 校园网
    STL之stack栈
    1163 访问艺术馆
  • 原文地址:https://www.cnblogs.com/bigmouthz/p/3135873.html
Copyright © 2011-2022 走看看