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

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

 

目录

奔跑吧,代码小哥!

MVC5网站开发之一 总体概述

MVC5 网站开发之二 创建项目

MVC5 网站开发之三 数据存储层功能实现

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

MVC5 网站开发之五 展示层架构

MVC5 网站开发之六 管理员 1、登录、验证和注销

MVC5 网站开发之六 管理员 2、添加、删除、重置密码、修改密码、列表浏览

MVC5 网站开发之七 用户功能 1、角色的后台管理

 

一、业务逻辑层的架构

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

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

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

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

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

 

NineskyContext-数据上下文

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

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

Category-栏目模型。

CategoryManager-栏目管理类。

Content-内容模型。

ContentManager-内容管理类。

User-用户模型

UserManager-用户管理类

Administrator-管理员类

AdministratorManager-管理员管理类

 

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

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

Response 响应返回类。

Paging<T> 分页数据类。

二、基础功能的实现

1、添加引用

(1)、添加EntityFramewok 引用

 

 

 

 

 

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

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

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

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

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

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

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

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

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

2、NineskyContext类

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

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

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

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。

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个属性。

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

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

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

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

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

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

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类是所有管理类的基类,此类包含了管理类的常用方法。

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

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

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

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下载源文件。

上一篇:leetcode 179. Largest Number 求最大组合数 ---------- java


下一篇:windows及linux环境下永久修改pip镜像源的方法