ASP.NET MVC5网站开发之业务逻辑层的架构和基本功能 (四)
业务逻辑层在ninesky.core中实现,主要功能封装一些方法通过调用数据存储层,向界面层提供服务。
一、业务逻辑层的架构
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.entity和ninesky.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
代码下载: 点击source code 点击download下载源文件。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。