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

news/2024/5/19 4:23:03/文章来源:https://blog.csdn.net/weixin_30667649/article/details/96986456

业务逻辑层在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下载源文件。

转载于:https://www.cnblogs.com/mzwhj/p/5197028.html

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

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

相关文章

一次网站迁移故障及分析

公司运营项目迁移&#xff0c;这个项目最重要的就是充值和让玩家能玩游戏&#xff0c;还有后台统计&#xff0c;就是类似支付宝这样的第三方平台的支付工具&#xff0c;由于涉及的到钱&#xff0c;所以上个月就做好迁移的准备&#xff0c;将代码和数据库都已转移完毕&#xff0…

网站应用微信登录功能接口开发指南

2019独角兽企业重金招聘Python工程师标准>>> 准备工作 网站应用 微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。 在进行微信OAuth2.在进行微信OAuth2.0授权登录接入之前&#xff0c;在微信开放平台注册开发者帐号&#xff0c;并拥有一个已审核通…

第一次担任项目经理从零开始架构自己的网站(二) 需求文档定稿,开始建表,建库(转)...

今天上午的半天时间&#xff0c;我们开发部一直都在和产品部门开会&#xff0c;扯皮。吐槽。最终砍掉了几个功能。产品的小姑娘对我说&#xff0c;你们第一期就做一个挂号支付的功能&#xff0c;后台就10几个页面&#xff0c;大多数是增删该查&#xff0c;还说22天不够用&#…

网站日志中的UserAgent分析

2019独角兽企业重金招聘Python工程师标准>>> 浏览器访问网站时&#xff0c;会提交UserAgent信息&#xff0c;里面包含操作系统/浏览器类型/渲染引擎&#xff0c;可以据此大致评估网站的客户端分布。特别是移动设备会在UserAgent中包含设备型号信息&#xff0c;所以有…

Azure Stack PaaS-网站(WebApp)背后是什么原理?

欢迎加入QQ群(423730487)&#xff01;4月9日在上海有一场线下活动&#xff0c;盆盆还有微软Azure Stack产品组专家会和大家一起分享技术&#xff0c;届时会在QQ群里直播哈。添加盆盆的微信(markpah)&#xff0c;我会把您拉到微信群。为什么要学习Azure Stack&#xff1f;因为这…

微网站|手机端html弹窗、弹层、提示框、加载条

layer mobile是为移动设备&#xff08;手机、平板等webkit内核浏览器/webview&#xff09;量身定做的弹层支撑&#xff0c;采用Native JavaScript编写&#xff0c;完全独立于PC版的layer&#xff0c;您需要按照场景选择使用。GitHub 官网&#xff1a;http://layer.layui.com/mo…

大型网站架构系列:负载均衡详解(3)

原文:大型网站架构系列&#xff1a;负载均衡详解&#xff08;3&#xff09;软件负载均衡概述Ngnix负载均衡Lvs负载均衡Haproxy负载均衡本次分享总结一、软件负载均衡概述 硬件负载均衡性能优越&#xff0c;功能全面&#xff0c;但是价格昂贵&#xff0c;一般适合初期或者土豪级…

网站安装打包 修改app.config[六]

在winform的安装工具中&#xff0c;少不免有一些配置文件要放到app.config去&#xff0c;于是修改也是成了一种需求&#xff01; 无论是修改web.config还是app.config&#xff0c;普遍方式都有两种&#xff0c;用net自带封装的类&#xff0c;或是自定义xml操作。 可参考之前的一…

大型网站系统架构演化之路

一个成熟的大型网站&#xff08;如淘宝、天猫、腾讯等&#xff09;的系统架构并不是一开始设计时就具备完整的高性能、高可用、高伸缩等特性的&#xff0c;它是随着用户量的增加&#xff0c;业务功能的扩展逐渐演变完善的&#xff0c;在这个过程中&#xff0c;开发模式、技术架…

推荐 | 非常不错的编程学习网站

阅读文本大概需要 3.5 分钟。这周末真的精彩&#xff0c;前有科技圈闹得沸腾的差评&#xff0c;各种吃瓜群众。后有 NBA 历史绝无仅有&#xff0c;东西双抢 7 大战。骑士勒布朗詹姆斯&#xff0c;逆天改命&#xff0c;全场 46 分。勇士克雷-汤普森&#xff0c;佛祖保佑&#xf…

分享一个爬取网站的小技巧

阅读文本大概需要 2 分钟。有时候&#xff0c;我们很想爬取一个网站的数据。如果 PC 端的网页的反爬机制太强&#xff0c;我们可以换个思路。现在很多网站为了满足手机浏览器能正常访问的需求&#xff0c;都会推出手机版的网页。PC 端抓取数据有难度&#xff0c;我们可以从手机…

js通过iframe访问跨域网站,获取不到内部标签?

1.页面iframe访问跨域网站baidu html <iframe id"iframe" src"http://www.baidu.com" frameborder"0"></iframe>javascript let iframe document.getElementById(iframe)2.打印访问内容 1.查看是否可以访问document console.log…

爬虫给力技巧:robots.txt 快速抓取网站

阅读文本大概需要 5 分钟。在我抓取网站遇到瓶颈&#xff0c;想剑走偏锋去解决时&#xff0c;常常会先去看下该网站的robots.txt文件&#xff0c;有时会给你打开另一扇抓取之门。写爬虫有很多苦恼的事情&#xff0c;比如&#xff1a;1.访问频次太高被限制&#xff1b;2.如何大量…

我顺藤摸瓜端了色情网站的老窝,并劝他从良

感谢凌云给我的启发大家好&#xff0c;我是九歌前几天无意发现了一个色情网站&#xff0c;本着除暴安良的心态&#xff0c;直接开始对这个网站开始了调查这个网站的域名是.cn结尾的 【.cn是国内域名,无法隐藏注册人的信息】我去站长之家里面对这个网站进行Whois查询按照惯例这种…

hexo搭建个人博客_GitHubPage和Hexo搭建个人博客网站

title: GithubPage和Hexo搭建个人博客网站 date: 2020-02-09 12:24:45 tags: - github - Hexo categories: GithubPage前言github支持githubPage静态界面来搭建我们的个人博客&#xff0c;自己配置。创建github仓库创建http://username.github.io仓库&#xff0c;同时setting中…

vs打开sln加载失败_你的网站打开速度慢,罪魁祸首居然是它?

相信许多人都不知道&#xff0c;在营销型网站建设当中&#xff0c;著名的黄金8秒原则&#xff0c;意思就是用户点击网站后&#xff0c;大部分都只会愿意等待大约8秒的时间。如果网站不能在这个时间内打开&#xff0c;那么用户就会离开&#xff0c;故而这个时间就成为黄金8秒。而…

CentOS7基础建站指南(笔记)

由于前段时间腾讯云打折&#xff0c;所以买了一台小服务器&#xff0c;想着以后写几个小网站&#xff0c;博客什么的&#xff0c;但是一开始就遇到了难题&#xff0c;大概就是Linux服务器的配置问题&#xff0c;比如如何假设服务器&#xff0c;配置非root用户&#xff0c;配置服…

CentOS8 配置apache 搭建静态网站 踩坑向

apache服务器安装与配置apache简介apache安装挂载光盘设备系统镜像创建yum仓库配置文件安装apache服务下载使用阿里云CentOS-8.repo软件仓库修改 CentOS-Base.repo文件安装成功启动httpd同时设置为开机自启效果图踩坑经验配置服务文件参数虚拟主机功能基于IP地址部署多个网站创…

通过阿里镜像网站制作iso文件安装CentOS6.9

基于网络安装 创建kickstart文件的方式&#xff1a;   1.复制模板/root/anaconda-ks.cfg&#xff0c;而后使用vim编辑配置   2.使用system-config-kickstart来生成&#xff0c;建议使用/root/anaconda-ks.cfg 模板生成 ksvalidator&#xff1a;检查kiskstart文件的配置是否…

256模板官网站点SEO优化分析记录

一直在做SEO网站优化工作&#xff0c;网站搭建好后也没没有做过官网优化的记录&#xff0c;今天有空余时间查询一下记录网站现在的状况。通过站长工具进行分析&#xff0c;织梦模板的关键字一致很稳定&#xff0c;也没有上升的趋势&#xff0c;看来是要进行分析做一下该站点的排…