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

 

目录

奔跑吧,代码小哥!

MVC5网站开发之一 总体概述

MVC5 网站开发之二 创建项目

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

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

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

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

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

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

 

一、业务逻辑层的架构

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

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

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

 

NineskyContext-数据上下文

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

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

Category-栏目模型。

CategoryManager-栏目管理类。

Content-内容模型。

ContentManager-内容管理类。

User-用户模型

UserManager-用户管理类

Administrator-管理员类

AdministratorManager-管理员管理类

 

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

Response 响应返回类。

Paging<T> 分页数据类。

二、基础功能的实现

1、添加引用

(1)、添加EntityFramewok 引用

 

 

 

 

 

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

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

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

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

在引用管理器中选择 项目->解决方案->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个属性。

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

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

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

MVC5 网站开发之四 业务逻辑层的架构和基本功能的更多相关文章

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

    展示层由Ninesky.Web项目实现,负责网站内容的显示,项目包含Member和Control两个区域.   目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项 ...

  2. MVC5 网站开发之九 网站设置

    网站配置一般用来保存网站的一些设置,写在配置文件中比写在数据库中要合适一下,因为配置文件本身带有缓存,随网站启动读入缓存中,速度更快,而保存在数据库中要单独为一条记录创建一个表,结构不够清晰,而且读写 ...

  3. MVC5网站开发之一 总体概述

    由于前几次都没能写完,这次年底总算有自由时间了,又想继续捣鼓一下.于是下载了VS 2015专业版(不知为什么我特别钟爱专业版,而不喜欢企业版).由于以前的教训,我这次决定写一个极简的Deom,简到什么 ...

  4. MVC5 网站开发之二 创建项目

    昨天对项目的思路大致理了一下,今天先把解决方案建立起来.整个解决包含Ninesky.Web.Ninesky.Core,Ninesky.DataLibrary等3个项目.Ninesky.Web是web应 ...

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

    数据存储层在项目Ninesky.DataLibrary中实现,整个项目只有一个类Repository.   目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 ...

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

    上次业务逻辑和展示层的架构都写了,可以开始进行具体功能的实现,这次先实现管理员的登录.验证和注销功能. 目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 MV ...

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

    目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 MVC5 网站开发之三 数据存储层功能实现 MVC5 网站开发之四 业务逻辑层的架构和基本功能 MVC5 网 ...

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

    角色是网站中都有的一个功能,用来区分用户的类型.划分用户的权限,这次实现角色列表浏览.角色添加.角色修改和角色删除. 目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 ...

  9. MVC5 网站开发之七 用户功能 2 用户添加和浏览

    目录 MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 MVC5 网站开发之三 数据存储层功能实现 MVC5 网站开发之四 业务逻辑层的架构和基本功能 MVC5 网站开发之五 展示层架 ...

随机推荐

  1. Vagrant 基础全面解析

    这篇 Vagrant 入门文章将带你创建一个 Vagrant 项目,这个过程将会用到 Vagrant 所提供的主要基本特性.如果想了解 Vagrant 能为你带来哪些好处,可以阅读 Vagrant 官 ...

  2. python自动化测试(2)-自动化基本技术原理

    python自动化测试(2) 自动化基本技术原理 1   概述 在之前的文章里面提到过:做自动化的首要本领就是要会 透过现象看本质 ,落实到实际的IT工作中就是 透过界面看数据. 掌握上面的这样的本领 ...

  3. mysql 7下载安装及问题解决

    mysql 7安装及问题解决 一.mysql下载 下载地址:https://www.mysql.com/downloads/ Community (GPL) Downloads MySQL Commu ...

  4. angular2系列教程(六)两种pipe:函数式编程与面向对象编程

    今天,我们要讲的是angualr2的pipe这个知识点. 例子

  5. Unity3D框架插件uFrame实践记录(一)

    1.概览 uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分).因为用于Unity3D,所以它 ...

  6. 编写高质量代码:改善Java程序的151个建议(第8章:多线程和并发___建议126~128)

    建议126:适时选择不同的线程池来实现 Java的线程池实现从根本上来说只有两个:ThreadPoolExecutor类和ScheduledThreadPoolExecutor类,这两个类还是父子关系 ...

  7. 用javascript写星际飞机大战游戏

    在github里看到了个不错的脚本游戏,决定亲自动手来写,效果如下 下面是代码的思路分享 把整个代码理解消化确实不容易,但是如果你坚持看完相信你一定会有收获 如果没兴趣可以直接点击下面的链接 复制代码 ...

  8. 从Maya中把模型搬运至网页的过程

    虽然利用threejs来在网页中渲染3d模型不是第一次折腾了,但是还是遇到了各种问题.总结下我所遇到的问题,希望能给正在使用threejs的小伙伴一个帮助. 一.所使用的软件与开发环境 Maya201 ...

  9. 《深入理解Java虚拟机》虚拟机性能监控与故障处理工具

    上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念 ...

  10. MVVM大比拼之vue.js源码精析

    VUE 源码分析 简介 Vue 是 MVVM 框架中的新贵,如果我没记错的话作者应该毕业不久,现在在google.vue 如作者自己所说,在api设计上受到了很多来自knockout.angularj ...