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();
        }
    }
}

  

原文地址:https://www.cnblogs.com/bigmouthz/p/3135873.html