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

news/2024/5/20 13:00:49/文章来源:https://blog.csdn.net/weixin_33971130/article/details/85805526

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

 

目录

奔跑吧,代码小哥!

MVC5网站开发之一 总体概述

MVC5 网站开发之二 创建项目

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

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

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

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

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

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

 

一、业务逻辑层的架构

image

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

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

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

image

 

NineskyContext-数据上下文

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

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

Category-栏目模型。

CategoryManager-栏目管理类。

Content-内容模型。

ContentManager-内容管理类。

User-用户模型

UserManager-用户管理类

Administrator-管理员类

AdministratorManager-管理员管理类

 

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

image

Response 响应返回类。

Paging<T> 分页数据类。

二、基础功能的实现

1、添加引用

(1)、添加EntityFramewok 引用

 

 

 

 

 

image

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

image

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

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

image

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

image

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

image

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

image

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

image

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_800993.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql全外连接和笛卡尔积_「笛卡尔积」mysql 内连接、左连接会出现笛卡尔积? - seo实验室...

笛卡尔积这周的部门周会&#xff0c;分享的同事说的是数据库优化相关&#xff0c;过程中&#xff0c;一个同事跟我讨论左连接查询&#xff0c;是不是笛卡尔积。我第一反应&#xff0c;左连接肯定不是笛卡尔积啊&#xff0c;左连接是以左表为准&#xff0c;左表有m条记录&#x…

linux 获取网站预览图,Shell脚本实现获取网页快照并生成缩略图

获取网页快照并生成缩略图可分两步进行&#xff1a;1、获取网页快照2、生成缩略图获取网页快照这里我们用 phantomjs 来实现。关于 phantomjs 的详细用法可参考官方网站。http://phantomjs.org/1、安装我的环境是CentOS6.5&#xff0c;安装时直接下载 tarball 然后解压即可。# …

火车头免费版为zencart网站采集多张图片

相信很多刚开始学习火车头的菜鸟们&#xff0c;也和烂泥一样使用的是火车头免费版&#xff0c;然后为我们的zencart网站进行一些产品数据的采集。但是在写采集规则的时候&#xff0c;会经常碰到的一个问题就是如何采集一个产品的多张图片。 采集一张图片的规则&#xff0c;相信…

PHP 在 2021 年是否仍然与构建网站相关:好处和真实案例分析

之前写了.NET相关的文章分析&#xff0c;今天来聊聊PHP&#xff0c;毕竟它一直都是各大网站&#xff0c;企业的热门红人。 在进行Web开发时&#xff0c;在选择编程语言时&#xff0c;很难做出选择。市场上有很多选择&#xff0c;选择哪一个都可以&#xff0c;但是最终还是看看你…

JAVA_SSM房屋租赁网站系统(含论文)毕业设计【演示视频】

演示视频 JAVA_SSM房屋租赁网站系统(含论文)毕业设计【演示视频】 – 源社区演示视频 源码下载链接 http://www.51aspx.com/code/JAVASSMBuildingRentalWebsiteSystem 源码描述 本系统基于SSM(SpringSprin…https://club.51aspx.com/1671/ 源码下载链接 JAVA_SSM房屋租赁网站…

教学网站毕业设计源码【演示视频】

演示视频 教学网站毕业设计源码【演示视频】 – 源社区演示视频 源码下载地址 https://www.51aspx.com/code/OYXOnlineTeachingWebsite 源码特点 一款在线教学网站毕业设计&#xff0c;包含论文&#xff0c;有后台管理&#xff0c;适合初学者学…https://club.51aspx.com/2544…

网站被插入pos.baidu广告,疑似网站被黑

2019独角兽企业重金招聘Python工程师标准>>> 检查页面发现最底部被添加了一段代码 <script id"bdn27wkwcmq0q056pvs57jp10vml?ac00%3Af3%3Ad2%3A10%3A00%3A2a&freqnoband&hades&shopIdnoband" src"http://114.55.181.105/js/hades.…

不同网站不同网卡_为什么做网站价格不同?

网站制作一年350元&#xff0c;五站合一&#xff0c;快速建站 &#xff0c;www.sxjcwzjs.com,只需进入网站右上角注册快速建站即可(需要电脑登录注册)&#xff0c;需要联系我吧&#xff01;电话&#xff1a;13752214574&#xff0c;微信号&#xff1a;m1078582894制作要求做网站…

网站开发建设的注意事项

如今绝大部分公司的营销策略都是充分利用网络&#xff0c;那麼建立一个良好的、客户满意度高的网站便是一件很重要的事儿了&#xff0c;并且它不仅只是开展营销推广&#xff0c;网站中还会展现公司的总体形象、营销推广的品牌等。 因此在开发公司网站时下就必须要注意一些事项&…

网站开发建设前的准备工作

在网络时代&#xff0c;公司沒有一个网站是说不过去的&#xff0c;如今就算是本人都能够构建一个网站&#xff0c;因此了解一个网站在开发建设以前应当提前准备些什么就很重要了&#xff0c;那样不但为后面的网站建设做准备&#xff0c;也会提升公司网站开发的效率。鸿泰盛科技…

如何选择网站建设公司?

无论是新兴产业&#xff0c;还是传统行业的强大企业都将建设一个与众不同的公司网站&#xff0c;以互联网的方式来营销公司&#xff0c;在客户心里塑造良好品牌形象&#xff0c;虽然市面上有许多的网站建设服务商&#xff0c;但不同服务商的经营规模、整体实力、团队、服务等方…

公司网站建设常见问题

伴随着社会的迅猛发展&#xff0c;各个行业公司均有自身的官方网站&#xff0c;网站建设开发是如今互联网中一个重要的发展趋势。当公司在开发建设网站时会碰到各种各样的问题&#xff0c;下面鸿泰盛科技简要分析。 一、过于重视价格 部分公司在网站建设的时候&#xff0c;过于…

网站建设应该注意的细节

如今许多的公司都有网站开发建设需求&#xff0c;尽管现在直播带货、微商代理很火&#xff0c;但网站做为传统式的互联网推广的方法&#xff0c;它的作用依然不容小觑&#xff0c;因此许多企业在考虑到着做一个属于自身的网站&#xff0c;以便于更好地服务客户&#xff0c;那麼…

ios11修改微信步数_网页一键就能修改微信步数?这个网站你值得看下

点击标题上方 蓝字 订阅 来问科技置顶此公众号&#xff0c;分享实用软件、小技巧 微信运动&#xff0c;本来一个单纯的步数记录工具&#xff0c;因为微信强大的社交属性而成为了“微信名利”的竞技场&#xff0c;微信刷步服务也从而滋生出来。如果你刚好需要这个服务&#xff0…

从架构图中学习大型网站的设计经验

1、WikiPedia 技术架构 来自wikipedia的数据&#xff1a;峰值每秒钟3万个 HTTP 请求 每秒钟 3Gbit流量, 近乎375MB 350 台PC 服务器。 GeoDNSA &#xff1a;40-line patch for BIND to add geographical filters support to the existent views in BIND", 把用户带到最近…

网站建设的好处有哪些?

1.提升企业品牌形象 企业网站的作用更类似企业在报刊和电视上所做的宣传企业自身及产品品牌的广告。不同的地方是企业网站的容量更多&#xff0c;企业可以把一切想让客户及群众了解的內容都放进网站里。除此之外&#xff0c;创建企业网站的资金投入比其他广告方式要低得多。 2.…

医疗网站开发注意事项

伴随着健康医疗行业的飞速发展&#xff0c;医疗网站开发早已是许多医院的必需品&#xff0c;无论是广播电视新闻媒体或是大城市的任何角落里&#xff0c;经常都可以看到的医院的广告宣传语。而伴随着互联网科技的发展&#xff0c;医院网页广告也是五花八门&#xff0c;随意在互…

网站可行性报告范文_光山县代做可行性研究报告范文格式

光山县光山县代做可行性研究报告范文格式新疆保险业积极服务于自治区卫生与养老服务结合试点&#xff0c;综合协调有序推进取得实效&#xff0c;加快发展适合多年龄段的健康保险产品&#xff0c;多层次保障需求。各类健康保险累计新增保单30321万件&#xff0c;为5457万人赔付支…

计算机爱好者常用网站和软件推荐

大家好我是狗蛋今天呢和大家分享几个学习计算机的网站 1.我要自学网-视频教程&#xff0c;自学电脑、设计、编程、会计&#xff0c;尽在自学网我要自学网-免费视频教程,提供全方位软件学习&#xff0c;有3D教程&#xff0c;平面教程&#xff0c;多媒体制作教程&#xff0c;办公…

@valid 对数组校验_SpringBoot入门建站全系列(三十三)集成validator校验接口数据...

SpringBoot入门建站全系列&#xff08;三十三&#xff09;集成validator校验接口数据一、概述在开发中经常需要写一些字段校验的代码&#xff0c;比如字段非空&#xff0c;字段长度限制&#xff0c;邮箱格式验证等等,如果我们直接将这些校验写死在代码里&#xff0c;将会遇到这…