服务器之家

服务器之家 > 正文

ASP.NET MVC5网站开发之业务逻辑层的架构和基本功能 (四)

时间:2020-03-19 14:48     来源/作者:洞庭夕照

业务逻辑层在Ninesky.Core中实现,主要功能封装一些方法通过调用数据存储层,向界面层提供服务。

一、业务逻辑层的架构

ASP.NET MVC5网站开发之业务逻辑层的架构和基本功能 (四)

Ninesky.Core包含三个命名空间Ninesky.Core、Ninesky.Core.Types、Ninesky.Core.General.

Ninesky.Core包含模型和功能实现,Ninesky.Core.Types是项目用到的一些类型的定义,Ninesky.Core.General是项目用到的一些方法的定义。

1、Ninesky.Core命名空间的结构

ASP.NET MVC5网站开发之业务逻辑层的架构和基本功能 (四)

NineskyContext-数据上下文

ContextFactory- 获取数据上下文的工厂类

BaseManager-基础类,实现了一些常用数据访问方法,提供其他管理类继承。

Category-栏目模型。

CategoryManager-栏目管理类。

Content-内容模型。

ContentManager-内容管理类。

User-用户模型

UserManager-用户管理类

Administrator-管理员类

AdministratorManager-管理员管理类

2、Ninesky.Core.Types命名空间的结构

ASP.NET MVC5网站开发之业务逻辑层的架构和基本功能 (四)

Response 响应返回类。

Paging<T> 分页数据类。

二、基础功能的实现

1、添加引用

(1)、添加EntityFramewok 引用

ASP.NET MVC5网站开发之业务逻辑层的架构和基本功能 (四)

Ninesky.Core项目->引用【右键】 –>管理NuGet程序包

ASP.NET MVC5网站开发之业务逻辑层的架构和基本功能 (四)

在NuGet包管理对器话框中选择 EntityFramewok 并安装。

(2)、添加Ninesky.DataLibrary项目的引用

ASP.NET MVC5网站开发之业务逻辑层的架构和基本功能 (四)

Ninesky.Core项目->引用【右键】 –>添加引用

ASP.NET MVC5网站开发之业务逻辑层的架构和基本功能 (四)

在引用管理器中选择 项目->解决方案->Ninesky.DataLibrary,点击确定。

2、NineskyContext类

NineskyContext类是项目的数据数据上下文,使模型和数据库的表进行对应。

Ninesky.Core项目【右键】->添加->类, 输入类名NineskyContext。

在类中引入命名空间System.Data.Entity;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
 
namespace Ninesky.Core
{
 public class NineskyContext:DbContext
 {
 
 
  public NineskyContext():base("DefaultConnection")
  {
   Database.SetInitializer<NineskyContext>(new CreateDatabaseIfNotExists<NineskyContext>());
  }
 }
}

3、ContextFactory类

ContextFactory是一个简单工厂类,CurrentContext()是一个静态函数,用来获取当前线程DbContext。

Ninesky.Core项目【右键】->添加->类, 输入类名ContextFactory。

在类中添加对System.Runtime.Remoting.Messaging的引用。在类中实现CurrentContext()静态方法返回数据上下文NineskyContext。方法中通过CallContext类在线程中存储NineskyContext。

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System.Runtime.Remoting.Messaging;
 
namespace Ninesky.Core
{
 /// <summary>
 /// 数据上下文工厂
 /// </summary>
 public class ContextFactory
 {
  /// <summary>
  /// 获取当前线程的数据上下文
  /// </summary>
  /// <returns>数据上下文</returns>
  public static NineskyContext CurrentContext()
  {
   NineskyContext _nContext = CallContext.GetData("NineskyContext") as NineskyContext;
   if (_nContext == null)
   {
    _nContext = new NineskyContext();
    CallContext.SetData("NineskyContext", _nContext);
   }
   return _nContext;
  }
 }
}

4、Response类

Response类是一个常用的方法返回数据类型,包含返回代码、返回消息和返回数据3个属性。

ASP.NET MVC5网站开发之业务逻辑层的架构和基本功能 (四)

在Ninesky.Core项目[右键]新建文件夹,输入名称Types。

在Types文件夹[右键]->添加->类,在弹出的添加新项对话框中输入类名Response。代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
namespace Ninesky.Core.Types
{
 /// <summary>
 ///
 /// </summary>
 public class Response
 {
  /// <summary>
  /// 返回代码. 0-失败,1-成功,其他-具体见方法返回值说明
  /// </summary>
  public int Code { get; set; }
 
  /// <summary>
  /// 返回消息
  /// </summary>
  public string Message { get; set; }
 
  /// <summary>
  /// 返回数据
  /// </summary>
  public dynamic Data { get; set; }
 
  public Response()
  {
   Code = 0;
  }
 }
}

5、Paging<T>类

Paging<T>类是一个查询分页数据时使用的类,包含当前页、每页记录数、总记录数、和当前页数据列表等几个属性。

ASP.NET MVC5网站开发之业务逻辑层的架构和基本功能 (四)

在Types文件夹[右键]->添加->类,在弹出的添加新项对话框中输入类名Paging。代码如下:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System.Collections.Generic;
 
namespace Ninesky.Core.Types
{
 public class Paging<T>
 {
  /// <summary>
  /// 当前页。从1计数
  /// </summary>
  public int PageIndex { get; set; }
 
  /// <summary>
  /// 每页记录数。默认20
  /// </summary>
  public int PageSize { get; set; }
 
  /// <summary>
  /// 总记录数
  /// </summary>
  public int TotalNumber;/// <summary>
  /// 当前页记录列表
  /// </summary>
  public List<T> Items { get; set; }
  
  public Paging()
  {
   PageIndex = 1;
   PageSize = 20;
  }
 }
}

6、BaseManager类

BaseManager类是所有管理类的基类,此类包含了管理类的常用方法。

ASP.NET MVC5网站开发之业务逻辑层的架构和基本功能 (四)

将Ninesky.Core项目的Class1.cs重命名为BaseManager.cs

引入命名空间System.Data.Entity和Ninesky.Core.Types,实现共有方法。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
using Ninesky.Core.Types;
using Ninesky.DataLibrary;
using System.Data.Entity;
using System.Linq;
 
namespace Ninesky.Core
{
 /// <summary>
 /// 管理类的基类
 /// </summary>
 /// <typeparam name="T">模型类</typeparam>
 public abstract class BaseManager<T> where T :class
 {
  /// <summary>
  /// 数据仓储类
  /// </summary>
  protected Repository<T> Repository;
 
  /// <summary>
  /// 默认构造函数
  /// </summary>
  public BaseManager():this(ContextFactory.CurrentContext())
  {
  }
  /// <summary>
  /// 构造函数
  /// </summary>
  /// <param name="dbContext">数据上下文</param>
  public BaseManager(DbContext dbContext){
   Repository = new Repository<T>(dbContext);
  }
 
  /// <summary>
  /// 添加
  /// </summary>
  /// <param name="entity">实体数据</param>
  /// <returns>成功时属性【Data】为添加后的数据实体</returns>
  public virtual Response Add(T entity)
  {
   Response _response = new Response();
   if(Repository.Add(entity)>0)
   {
    _response.Code = 1;
    _response.Message = "添加数据成功!";
    _response.Data = entity;
   }
   else
   {
    _response.Code = 0;
    _response.Message = "添加数据失败!";
   }
 
   return _response;
  }
 
  /// <summary>
  /// 更新
  /// </summary>
  /// <param name="entity">实体数据</param>
  /// <returns>成功时属性【Data】为更新后的数据实体</returns>
  public virtual Response Update(T entity)
  {
   Response _response = new Response();
   if (Repository.Update(entity) > 0)
   {
    _response.Code = 1;
    _response.Message = "更新数据成功!";
    _response.Data = entity;
   }
   else
   {
    _response.Code = 0;
    _response.Message = "更新数据失败!";
   }
 
   return _response;
  }
 
 
  /// <summary>
  /// 删除
  /// </summary>
  /// <param name="ID">主键</param>
  /// <returns>Code:0-删除失败;1-删除陈功;10-记录不存在</returns>
  public virtual Response Delete(int ID)
  {
   Response _response = new Response();
   var _entity = Find(ID);
   if (_entity == null)
   {
    _response.Code = 10;
    _response.Message = "记录不存在!";
   }
   else
   {
    if (Repository.Delete(_entity) > 0)
    {
     _response.Code = 1;
     _response.Message = "删除数据成功!";
    }
    else
    {
     _response.Code = 0;
     _response.Message = "删除数据失败!";
    }
   }
   
 
   return _response;
  }
 
  /// <summary>
  /// 查找实体
  /// </summary>
  /// <param name="ID">主键</param>
  /// <returns>实体</returns>
  public virtual T Find(int ID)
  {
   return Repository.Find(ID);
  }
 
  /// <summary>
  /// 查找数据列表-【所有数据】
  /// </summary>
  /// <returns>所有数据</returns>
  public IQueryable<T> FindList()
  {
   return Repository.FindList();
  }
 
  /// <summary>
  /// 查找分页数据
  /// </summary>
  /// <param name="paging">分页数据</param>
  /// <returns>分页数据</returns>
  public Paging<T> FindPageList(Paging<T> paging)
  {
   paging.Items = Repository.FindPageList(paging.PageSize, paging.PageIndex, out paging.TotalNumber).ToList();
   return paging;
  }
 
  /// <summary>
  /// 总记录数
  /// </summary>
  /// <returns>总记录数</returns>
  public virtual int Count()
  {
   return Repository.Count();
  }
 }
}

=====================================

代码见:https://ninesky.codeplex.com/SourceControl/latest

代码下载:https://ninesky.codeplex.com 点击SOURCE CODE 点击Download下载源文件。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://www.cnblogs.com/mzwhj/p/5197028.html

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
超A是什么意思 你好a表达的是什么
超A是什么意思 你好a表达的是什么 2019-06-06
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
返回顶部