欧美人与禽2O2O性论交,秋霞免费视频,国产美女视频免费观看网址,国产成人亚洲综合网色欲网

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

Web后臺(tái)快速開(kāi)發(fā)框架使用說(shuō)明書(shū)

Coldairarrow

目錄

簡(jiǎn)介

本框架旨在為.NET開(kāi)發(fā)人員提供一個(gè)Web后臺(tái)快速開(kāi)發(fā)框架,采用本框架,能夠極大的提高項(xiàng)目開(kāi)發(fā)效率。

整個(gè)框架包括三個(gè)版本:

.NET新版,采用.NET452,GitHub地址為:https://github.com/Coldairarrow/Coldairarrow.Fx.Net.Easyui.GitHub

.NET40版,采用.NET40,GitHub地址為:https://github.com/Coldairarrow/Coldairarrow.Fx.Net40.Easyui.GitHub

.NET Core版,采用.NET Core2.1, GitHub地址為:https://github.com/Coldairarrow/Coldairarrow.Fx.Core.Easyui.GitHub

以上三個(gè)版本中,.NET新版,主要支持最新的技術(shù)方案,作為主要生產(chǎn)版本;.NET40版是為了兼容Windows 2003服務(wù)器而降級(jí)的版本,功能正常。.NET Core 版本是未來(lái)的發(fā)展方向,能夠跨平臺(tái),并且涉及Linux、Docker、Nginx、微服務(wù)等概念,已完成移植。

基礎(chǔ)準(zhǔn)備

開(kāi)發(fā)環(huán)境要求

操作系統(tǒng):Windows 10

開(kāi)發(fā)工具:Visual Studio 2017

SDK:安裝.NET4.52及以上

數(shù)據(jù)庫(kù):SQLServer2008 R2及以上

基礎(chǔ)數(shù)據(jù)庫(kù)構(gòu)建

使用本框架需要構(gòu)建基礎(chǔ)數(shù)據(jù)庫(kù),具體步驟如下:

創(chuàng)建基礎(chǔ)數(shù)據(jù)庫(kù)的Sql腳本文件在:/docs/初始化文件/db.sql,在數(shù)據(jù)庫(kù)中運(yùn)行db.SQL腳本即可創(chuàng)建數(shù)據(jù)庫(kù):Coldairarrow.Fx.Net.Easyui.Git

若Sql運(yùn)行出錯(cuò),請(qǐng)直接使用同目錄下的Coldairarrow.Fx.Net.Easyui.GitHub.bak還原數(shù)據(jù)庫(kù)

打開(kāi)src目錄下Coldairarrow.Fx.Net.Easyui.Git.sln的解決方案,如下圖

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

如下圖所示依次展開(kāi)05.Coldairarrow.Web=>Config=>database.config,配置數(shù)據(jù)庫(kù)連接字符串,name不用修改,connectionString改為上述創(chuàng)建的數(shù)據(jù)庫(kù)(若不清楚數(shù)據(jù)庫(kù)連接字符串請(qǐng)自行百度搜索教程)

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

自此基礎(chǔ)數(shù)據(jù)庫(kù)配置完成。

運(yùn)行

請(qǐng)先還原Nuget包

然后將05.Coldairarrow.Web設(shè)為啟動(dòng)項(xiàng)目,成功運(yùn)行即可進(jìn)入以下頁(yè)面

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

詳細(xì)教程

代碼架構(gòu)

總體架構(gòu)

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

框架組成結(jié)構(gòu)一共分為5層,如上圖所示,分別如下:

基礎(chǔ)設(shè)施層:此層為最底層,可以為其余所有層服務(wù)。主要提供了項(xiàng)目開(kāi)發(fā)所需的各種幫助類:數(shù)據(jù)庫(kù)訪問(wèn)幫助類、文件操作幫助類、二維碼生成幫助類、分揀壓縮幫助類等等其余幫助類;拓展類:字符串拓展類、集合操作拓展類、表達(dá)式樹(shù)拓展類等等其余拓展類;還集成了個(gè)人編寫的Socket通訊框架,WCF拓展使用框架,Windows服務(wù)容器。這些豐富的類庫(kù)都是為開(kāi)發(fā)人員提供了開(kāi)發(fā)中常用的功能,為快速開(kāi)發(fā)提供強(qiáng)有力的保障。

數(shù)據(jù)倉(cāng)儲(chǔ)層:這層主要為對(duì)數(shù)據(jù)庫(kù)操作CRUD的簡(jiǎn)單封裝,以EntityFramework為核心,采用簡(jiǎn)單工廠、抽象工廠、工廠方法、三個(gè)工廠設(shè)計(jì)模式,使開(kāi)發(fā)人員進(jìn)行CRUD只需要極為簡(jiǎn)單的代碼即可完成。本層還提供了數(shù)據(jù)庫(kù)事務(wù)的支持,更是提供了分布式事務(wù)支持,為數(shù)據(jù)庫(kù)操作提供必備的保障。使用本層提供的接口,無(wú)需關(guān)心具體的數(shù)據(jù)庫(kù)類型,比如是采用SQLServer數(shù)據(jù)庫(kù)或者M(jìn)ySQL數(shù)據(jù)庫(kù),開(kāi)發(fā)人員只需要關(guān)心具體的業(yè)務(wù)邏輯實(shí)現(xiàn),哪怕更換數(shù)據(jù)庫(kù),也無(wú)需更改業(yè)務(wù)邏輯代碼,只需要更改簡(jiǎn)單的數(shù)據(jù)庫(kù)配置即可。總之,本層為開(kāi)發(fā)人員對(duì)數(shù)據(jù)庫(kù)的操作提供了簡(jiǎn)單高效的操作接口,可以極大的提高開(kāi)發(fā)效率。

實(shí)體層:這層主要為ORM框架數(shù)據(jù)庫(kù)表對(duì)應(yīng)的實(shí)體類,為業(yè)務(wù)邏輯層和應(yīng)用層服務(wù)。

業(yè)務(wù)邏輯層:本層是開(kāi)發(fā)人員主要編寫層,通過(guò)調(diào)用數(shù)據(jù)倉(cāng)儲(chǔ)層操作數(shù)據(jù)庫(kù),并為應(yīng)用層提供所需的接口,處理具體操作的業(yè)務(wù)邏輯,可以說(shuō)是最為復(fù)雜的一層。

應(yīng)用層:本層在本框架中表現(xiàn)形式為ASP.NET MVC網(wǎng)站,其實(shí)也可以泛指其余的表現(xiàn)形式:控制臺(tái)程序、Windows服務(wù)程序、WinForm程序、WPF程序等等。本層為具體的應(yīng)用,負(fù)責(zé)系統(tǒng)功能的實(shí)現(xiàn)。

基礎(chǔ)設(shè)施層

此層為最底層,可以為其余所有層服務(wù)。主要提供了項(xiàng)目開(kāi)發(fā)所需的各種類庫(kù),主要為以下幾種類庫(kù):

  1. 拓展幫助類

利用C#的語(yǔ)法糖(是由英國(guó)計(jì)算機(jī)科學(xué)家彼得·約翰·蘭達(dá)(Peter J. Landin)發(fā)明的一個(gè)術(shù)語(yǔ),指計(jì)算機(jī)語(yǔ)言中添加的某種語(yǔ)法,這種語(yǔ)法對(duì)語(yǔ)言的功能并沒(méi)有影響,但是更方便程序員使用),可以在類上拓展自定義方法,這樣開(kāi)發(fā)人員在使用的時(shí)候就可以十分的方便,既能減少重復(fù)的代碼又能加快開(kāi)發(fā)效率。具體包含但不限于以下類:

Object拓展:Object是所有類的基類。現(xiàn)在前后端數(shù)據(jù)交互中,采用JSON是選擇,因此對(duì)象JSON序列化與反序列化的使用就十分的頻繁,通過(guò)給Object拓展ToJson方法,就可以將數(shù)據(jù)對(duì)象直接轉(zhuǎn)為對(duì)應(yīng)的JSON字符串,能夠極大的簡(jiǎn)化JSON序列化所需要的代碼。

Byte拓展:Byte,即字節(jié),一個(gè)字節(jié)是8個(gè)比特位,十進(jìn)制數(shù)值范圍在0-255。由于Byte與二進(jìn)制是直接對(duì)應(yīng)的,而計(jì)算機(jī)中一切數(shù)據(jù)都是二進(jìn)制,所以關(guān)于Byte與其他數(shù)據(jù)類型之間的轉(zhuǎn)換就顯得尤為重要,編寫B(tài)yte相關(guān)的拓展方法能夠方便Byte的使用。例如,拓展將Byte數(shù)組轉(zhuǎn)為16進(jìn)制字符串的方法,能夠?qū)⒆止?jié)數(shù)組直接轉(zhuǎn)為對(duì)應(yīng)的16進(jìn)制字符串,現(xiàn)在物聯(lián)網(wǎng)的發(fā)展也十分的迅速,在物聯(lián)網(wǎng)開(kāi)發(fā)中,關(guān)鍵是建立與硬件之間的通信,但是由于硬件的配置一般都不高,因此與硬件之間的通信大多以字節(jié)為單位,這種情況下,使用該拓展方法就可以提高開(kāi)發(fā)效率。

Expression拓展:Expression,即表達(dá)式樹(shù),在LINQ查詢中經(jīng)常使用。在日常使用中,Where篩選估計(jì)是用得最多的,但是大多數(shù)開(kāi)發(fā)人員都是使用最原始的Where篩選,當(dāng)篩選條件增多,篩選條件變復(fù)雜的時(shí)候,原始的Where雖然也可以勝任,但是就會(huì)導(dǎo)致代碼重復(fù),不夠簡(jiǎn)潔雅觀,此時(shí)可以為Expression<Func<T, bool>>類拓展And與Or方法,其中And是“與”操作,Or是“或”操作,這樣就可以將多個(gè)篩選條件拼接在一起,十分的實(shí)用。

IQueryable<T>拓展:IQueryable<T>是提供針對(duì)特定數(shù)據(jù)源(其中數(shù)據(jù)類型未未知)評(píng)估查詢的功能接口,其在EntityFramework中發(fā)揮著重要的作用。例如,在后臺(tái)管理系統(tǒng)中,數(shù)據(jù)表格的使用最為普遍,前端向后臺(tái)請(qǐng)求表格數(shù)據(jù)時(shí),不外乎需要以下幾個(gè)參數(shù):當(dāng)前請(qǐng)求頁(yè)碼、每頁(yè)記錄數(shù)、排序列與排序類型,這些參數(shù)在每個(gè)請(qǐng)求表格數(shù)據(jù)請(qǐng)求中都需要處理,這時(shí),通過(guò)給IQueryable<T>拓展GetPagination<T>方法,只需要傳入分頁(yè)參數(shù),就可以獲取所需的數(shù)據(jù)表格數(shù)據(jù),十分的方便高效。

  1. 工具幫助類

主要提供了常用的一些幫助類,包含但不限于:

Office辦公文檔導(dǎo)入導(dǎo)出幫助類:當(dāng)今,隨著人們環(huán)保意識(shí)的增強(qiáng),以及各行業(yè)對(duì)辦公模式需求的不斷升級(jí),現(xiàn)代化、信息化建設(shè)步伐的加快,無(wú)紙化辦公已經(jīng)由概念逐漸應(yīng)用到多個(gè)行業(yè)領(lǐng)域中,辦公中,各種辦公文件,尤其是Excel文件與Word文件經(jīng)常需要導(dǎo)入與導(dǎo)出,但是C#操作Excel與Word文件并不簡(jiǎn)單,經(jīng)常困擾著開(kāi)發(fā)者,由此,本框架提供了Office文檔操作幫助類,封裝簡(jiǎn)化了對(duì)辦公文檔的常用操作,能夠降低開(kāi)發(fā)難度,提高開(kāi)發(fā)效率。

HTTP請(qǐng)求模擬幫助類:在傳統(tǒng)網(wǎng)站開(kāi)發(fā)中,一般都是前端瀏覽器向后臺(tái)發(fā)起請(qǐng)求,但是,現(xiàn)在的系統(tǒng)與系統(tǒng)之間的合作越來(lái)越緊密,經(jīng)常需要后端向后端發(fā)起請(qǐng)求,即需要后端模擬HTTP請(qǐng)求,但編寫一個(gè)完整的HTTP請(qǐng)求并不是那么容易,因此本框架提供HTTP請(qǐng)求幫助類,開(kāi)發(fā)人員只需要傳入需要請(qǐng)求的URL地址與參數(shù)即可完成HTTP請(qǐng)求操作,使用起來(lái)簡(jiǎn)單高效,能夠極大的提高開(kāi)發(fā)效率。

  1. 緩存操作幫助類

在現(xiàn)代化系統(tǒng)開(kāi)發(fā)中,隨著業(yè)務(wù)量的增大,系統(tǒng)性能就難以滿足要求,要達(dá)到性能要求,一方面可以采用更好的硬件,但是成本較高,而另一方面就是使用緩存,有效使用緩存能夠提高吞吐量與并發(fā)量,所需成本較低,是絕大多數(shù)用戶的首選。

.NET Framework框架提供了系統(tǒng)緩存,雖然使用簡(jiǎn)單方便,但是不支持分布式,因此大多選擇諸如Redis和Memcached緩存,但是不同的緩存為開(kāi)發(fā)者提供的接口不一樣,當(dāng)使用不同的緩存時(shí)開(kāi)發(fā)人員又需要去學(xué)習(xí)別的緩存操作接口,十分的麻煩,為解決這個(gè)問(wèn)題,本框架提供了緩存操作幫助類。緩存操作幫助類將緩存核心操作抽象定義成操作接口:添加緩存、刪除緩存、設(shè)置緩存過(guò)期時(shí)間,然后再用Redis與系統(tǒng)緩存實(shí)現(xiàn)抽象接口,當(dāng)使用緩存時(shí)可以使用同樣的操作接口操作不同的緩存,能夠降低開(kāi)發(fā)人員學(xué)習(xí)成本,提高開(kāi)發(fā)效率。

  1. 數(shù)據(jù)庫(kù)操作幫助類

無(wú)論什么網(wǎng)站,只要需要對(duì)數(shù)據(jù)進(jìn)行操作,那么大多離不開(kāi)數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)目前使用最多的就是三大關(guān)系型數(shù)據(jù)庫(kù):SQLServer、MySQL與Oracle,訪問(wèn)數(shù)據(jù)庫(kù)需要一系列的程序:首先需要?jiǎng)?chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象,緊接著打開(kāi)數(shù)據(jù)庫(kù),其次傳入數(shù)據(jù)庫(kù)操作命令,然后執(zhí)行命令,最后得到數(shù)據(jù)結(jié)果,若每次訪問(wèn)數(shù)據(jù)庫(kù)都要寫一遍這些流程,那么將會(huì)極大的阻礙開(kāi)發(fā)效率,因此,本框架提供了數(shù)據(jù)庫(kù)操作幫助類,將數(shù)據(jù)庫(kù)操作所需要的流程封裝,開(kāi)發(fā)人員只需要關(guān)心具體的SQL語(yǔ)句的編寫即可,并且支持三大關(guān)系型數(shù)據(jù)庫(kù),適合不同的開(kāi)發(fā)人員使用。

數(shù)據(jù)倉(cāng)儲(chǔ)層

在后端開(kāi)發(fā)中,數(shù)據(jù)庫(kù)操作是最頻繁的,每一個(gè)后端開(kāi)發(fā)人員或多或少都會(huì)接觸,甚至不少開(kāi)發(fā)人員每天的工作就是與數(shù)據(jù)庫(kù)打交道,所以可見(jiàn)數(shù)據(jù)庫(kù)操作是多么的重要。在現(xiàn)在開(kāi)發(fā)的過(guò)程中,絕大多數(shù)開(kāi)發(fā)人員只是以編寫SQL語(yǔ)句的方式操作數(shù)據(jù)庫(kù),這種方式是操作數(shù)據(jù)庫(kù)最基本最原始的方式,簡(jiǎn)單高效,但是在編寫SQL語(yǔ)句的過(guò)程中,極容易因馬虎大意而編寫錯(cuò)誤,就會(huì)出現(xiàn)一個(gè)現(xiàn)象:開(kāi)發(fā)人員面對(duì)著一堆SQL語(yǔ)句在DEBUG,而且每次都需要開(kāi)發(fā)人員自己去手寫SQL語(yǔ)句,其開(kāi)發(fā)效率極低。哪怕開(kāi)發(fā)人員足夠出色,能夠保證編寫的SQL語(yǔ)句較低的出錯(cuò)率,但是,不同的數(shù)據(jù)庫(kù)所需要的SQL語(yǔ)句還是有差異的,這就需要開(kāi)發(fā)人員學(xué)習(xí)不同的數(shù)據(jù)庫(kù)SQL語(yǔ)法,添加學(xué)習(xí)成本。而且在項(xiàng)目開(kāi)發(fā)中難免會(huì)遇到更換數(shù)據(jù)庫(kù)的情況,這時(shí)還需要花費(fèi)大量的精力去進(jìn)行修改SQL語(yǔ)句。

在本框架的數(shù)據(jù)倉(cāng)儲(chǔ)層中,上述問(wèn)題即可迎刃而解。數(shù)據(jù)倉(cāng)儲(chǔ)層,不同于傳統(tǒng)三層架構(gòu)中的數(shù)據(jù)層,其核心繼承關(guān)系圖如下圖所示(圖6-1):

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

圖6-1 數(shù)據(jù)倉(cāng)儲(chǔ)類圖

如上圖所示,首先定義了數(shù)據(jù)操作接口IRepository,該接口包含了增、刪、改、查、事物控制等數(shù)據(jù)庫(kù)常用核心操作,能夠滿足對(duì)數(shù)據(jù)庫(kù)的常用操作,DbRepository類實(shí)現(xiàn)了IRepository接口,主要以O(shè)RM框架Entity Framework為基礎(chǔ),封裝實(shí)現(xiàn)了大部分IRepository所需的操作,SqlServerRepository、MySqlRepository和PostgreSqlRepository分別實(shí)現(xiàn)具體數(shù)據(jù)庫(kù)對(duì)應(yīng)的數(shù)據(jù)倉(cāng)儲(chǔ),而且繼承自同一個(gè)數(shù)據(jù)操作接口IRepository,因此在具體的使用上,可以實(shí)現(xiàn)以同一個(gè)操作方法訪問(wèn)不同的數(shù)據(jù)庫(kù),當(dāng)遇到需要更換數(shù)據(jù)庫(kù)的情況時(shí),采用本框架開(kāi)發(fā)的系統(tǒng)能夠不改代碼而正常運(yùn)行,這一點(diǎn)能夠極大的降低軟件開(kāi)發(fā)成本。并且以Entity Framework為核心,不需要編寫SQL語(yǔ)句就能夠完成絕大部分的數(shù)據(jù)庫(kù)操作,再加上簡(jiǎn)潔的LINQ配合,徹底將開(kāi)發(fā)人員從SQL語(yǔ)句中解放出來(lái),讓開(kāi)發(fā)人員能夠更加專注于業(yè)務(wù)邏輯的實(shí)現(xiàn),能夠極大的提高軟件開(kāi)發(fā)效率。

IRepository代碼如下:

using System;

using System.Collections.Generic;

using System.Data;

using System.Data.Common;

using System.Data.Entity;

using System.Linq;

using System.Linq.Expressions;

namespace Coldairarrow.DataRepository

{

public interface IRepository

{

#region 數(shù)據(jù)庫(kù)連接相關(guān)方法

DbContext GetDbContext();

#endregion

#region 事物提交

/// <summary>

/// 開(kāi)始單庫(kù)事物

/// 注意:若要使用跨庫(kù)事務(wù),請(qǐng)使用DistributedTransaction

/// </summary>

void BeginTransaction();

bool EndTransaction();

#endregion

#region 增加數(shù)據(jù)

void Insert<T>(T entity) where T : class, new();

void Insert<T>(List<T> entities) where T : class, new();

void BulkInsert<T>(List<T> entities) where T : class, new();

#endregion

#region 刪除數(shù)據(jù)

void DeleteAll<T>() where T : class, new();

void Delete<T>(string key) where T : class, new();

void Delete<T>(List<string> keys) where T : class, new();

void Delete<T>(T entity) where T : class, new();

void Delete<T>(List<T> entities) where T : class, new();

void Delete<T>(Expression<Func<T, bool>> condition) where T : class, new();

#endregion

#region 更新數(shù)據(jù)

void Update<T>(T entity) where T : class, new();

void Update<T>(List<T> entities) where T : class, new();

void UpdateAny<T>(T entity, List<string> properties) where T : class, new();

void UpdateAny<T>(List<T> entities, List<string> properties) where T : class, new();

#endregion

#region 查詢數(shù)據(jù)

T GetEntity<T>(object keyValue) where T : class, new();

List<T> GetList<T>() where T : class, new();

IQueryable<T> GetIQueryable<T>() where T : class, new();

DataTable GetDataTableWithSql(string sql);

DataTable GetDataTableWithSql(string sql, List<DbParameter> parameters);

List<T> GetListBySql<T>(string sqlStr) where T : class, new();

List<T> GetListBySql<T>(string sqlStr, List<DbParameter> parameters) where T : class, new();

#endregion

#region 執(zhí)行Sql語(yǔ)句

void ExecuteSql(string sql);

void ExecuteSql(string sql, List<DbParameter> parameters);

#endregion

}

}

數(shù)據(jù)實(shí)體層

由于框架主要采用了Entity Framework作為ORM框架,這其中數(shù)據(jù)庫(kù)實(shí)體映射必不可少,需要將數(shù)據(jù)庫(kù)中每張表映射到類中,并且一張表一個(gè)類。這些實(shí)體類即能夠作為數(shù)據(jù)庫(kù)操作中的實(shí)體,還能夠作為DTO(Data Transfer Object),將這些實(shí)體類劃分為獨(dú)立的一層,能夠方便對(duì)實(shí)體的管理,易于開(kāi)發(fā)與維護(hù)。

業(yè)務(wù)邏輯層

在整個(gè)后端開(kāi)發(fā)中,業(yè)務(wù)邏輯的處理是最復(fù)雜的,因?yàn)閺募夹g(shù)角度來(lái)講,很多技術(shù)都能夠?qū)崿F(xiàn)代碼復(fù)用,即無(wú)需重復(fù)造輪子(重造輪子是重復(fù)創(chuàng)造一個(gè)已經(jīng)存在的基本方法或者被其他人優(yōu)化),而且只要會(huì)使用了就能夠快速投入生產(chǎn)中,雖然技術(shù)可以從設(shè)計(jì)上實(shí)現(xiàn)代碼重用,降低學(xué)習(xí)成本,但是不同的系統(tǒng)其業(yè)務(wù)邏輯通常是不可復(fù)制的,因此開(kāi)發(fā)人員可以不關(guān)心具體數(shù)據(jù)倉(cāng)儲(chǔ)的實(shí)現(xiàn)技術(shù),但是不得不關(guān)心具體業(yè)務(wù)邏輯的實(shí)現(xiàn),既然業(yè)務(wù)邏輯無(wú)法避免又那么復(fù)雜,那么設(shè)計(jì)出合理的業(yè)務(wù)邏輯架構(gòu)來(lái)加快開(kāi)發(fā)效率就顯得尤為重要。

本框架將業(yè)務(wù)邏輯獨(dú)立一層,其核心繼承關(guān)系如下圖(圖6-2)所示:

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

圖6-2 業(yè)務(wù)邏層次圖

如上圖所示:首先定義了一個(gè)業(yè)務(wù)邏輯基類BaseBusiness<T>,該基類實(shí)現(xiàn)了所有調(diào)用數(shù)據(jù)倉(cāng)儲(chǔ)的方法,其余所有業(yè)務(wù)處理類都需要繼承自基類BaseBusiness<T>,其中泛型T為數(shù)據(jù)庫(kù)實(shí)體,一般默認(rèn)操作但張表,但在實(shí)際運(yùn)用中連表操作十分的普遍,因此在BaseBusiness中提供了Service屬性,該屬性為IRepository類型,因此可以操作泛型接口,傳入不同的實(shí)體類型即可對(duì)應(yīng)到所需表的操作,故而支持聯(lián)表操作,方便開(kāi)發(fā)人員操作數(shù)據(jù)庫(kù)?;愡€提供了通用業(yè)務(wù)邏輯返回?cái)?shù)據(jù),Success和Error分別對(duì)應(yīng)成功請(qǐng)求返回和失敗請(qǐng)求返回,統(tǒng)一數(shù)據(jù)格式,方便前后端開(kāi)發(fā)對(duì)接。

應(yīng)用展示層

這層也可以稱之為應(yīng)用層,其余的層表現(xiàn)形式都是類庫(kù),而這一層負(fù)責(zé)具體項(xiàng)目應(yīng)用的實(shí)施,比如可以使用控制臺(tái)程序、Windows服務(wù)程序、WinForm程序、WCF程序等等,在本項(xiàng)目中使用了ASP.NET MVC網(wǎng)站項(xiàng)目負(fù)責(zé)具體功能的實(shí)現(xiàn)。

AOP(Aspect Oriented Programming)使用:AOP,即面向切片編程,利用AOP能夠?qū)⑾到y(tǒng)各個(gè)部分進(jìn)行隔離,從而降低模塊之間的耦合度,提高程序可用性,同時(shí)提高開(kāi)發(fā)效率。本框架中主要使用了以下AOP:

管理員登錄校驗(yàn)CheckLoginAttribute:在后臺(tái)管理系統(tǒng)中,管理員只有登錄后才能夠進(jìn)行相關(guān)操作,一般通過(guò)Session來(lái)記錄管理員登錄信息,最簡(jiǎn)單直接就是在每一個(gè)請(qǐng)求中都需要判斷一遍管理員是否登錄,這無(wú)疑將會(huì)導(dǎo)致很多的重復(fù)代碼,此時(shí),通過(guò)將登陸校驗(yàn)作為一個(gè)特性,只需要在需要登錄的控制器或方法上添加該特性即可完成管理員登錄校驗(yàn),這樣就能夠減少大量的重復(fù)代碼,加快開(kāi)發(fā)效率。

簽名校驗(yàn)CheckSignAttribute:當(dāng)后端接口需要給外部系統(tǒng)調(diào)用時(shí),若不對(duì)接口訪問(wèn)進(jìn)行限制,那么就會(huì)面臨惡意請(qǐng)求攻擊的風(fēng)險(xiǎn),輕則影響系統(tǒng)性能,重則導(dǎo)致系統(tǒng)癱瘓,數(shù)據(jù)被惡意串改,此時(shí),保證接口的安全性就十分關(guān)鍵。保證接口的安全性,主要就是按照一定的簽名算法,對(duì)請(qǐng)求者傳入的參數(shù)進(jìn)行簽名校驗(yàn),只有通過(guò)才能夠正常訪問(wèn),原始做法就是在每個(gè)請(qǐng)求中去進(jìn)行簽名校驗(yàn),這同樣會(huì)導(dǎo)致大量的重復(fù)代碼,這時(shí)通過(guò)引入簽名校驗(yàn)特性,只需要在需要簽名校驗(yàn)的控制器或方法中加入特性即可,使用簡(jiǎn)單方便,開(kāi)發(fā)效率也高。

應(yīng)用層還在視圖中使用了通用布局模板,并統(tǒng)一了代碼規(guī)范,再集成了JQuery以及一些其它常用的JS類庫(kù),以Layui為主要前端UI框架,界面風(fēng)格統(tǒng)一,開(kāi)發(fā)效率高。

功能架構(gòu)

全局配置

在01.Coldairarrow.Util中的GlobalSwitch類中,設(shè)置了各個(gè)參數(shù),其中RunModel需要重點(diǎn)關(guān)注一下,若RunModel==RunModel.LocalTest,則系統(tǒng)會(huì)直接跳過(guò)登錄,默認(rèn)使用Admin超級(jí)管理員登錄,其它參數(shù)請(qǐng)看注釋。

快速開(kāi)發(fā)

使用此功能請(qǐng)確保GlobalSwitch.RunModel= RunModel.LocalTest

此功能為本框架的核心功能,能夠自動(dòng)生產(chǎn)完整的可運(yùn)行代碼,具體使用如下:

首選需要有數(shù)據(jù)庫(kù)源,因?yàn)榇a生成是根據(jù)數(shù)據(jù)庫(kù)表來(lái)生成的。

菜單:開(kāi)發(fā)=>快速開(kāi)發(fā)=>數(shù)據(jù)庫(kù)連接管理

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

若列表中沒(méi)有目標(biāo)數(shù)據(jù)源,則添加數(shù)據(jù)庫(kù)連接

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

數(shù)據(jù)連接名、連接字符串、數(shù)據(jù)庫(kù)類型(目前不支持Oracle,有空余時(shí)間再研究)即可。添加完成后即可看到連接字符串信息。

有了數(shù)據(jù)庫(kù)連接之后,即可進(jìn)行代碼生成。

菜單:開(kāi)發(fā)=>快速開(kāi)發(fā)=>代碼生成

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

選擇數(shù)據(jù)庫(kù),然后勾選需要生成代碼的數(shù)據(jù)庫(kù)表,點(diǎn)擊生成代碼會(huì)彈出生成選項(xiàng)(這里暫時(shí)只能勾選Dev_Project,其余表全是系統(tǒng)基礎(chǔ)表,不要勾選,否則會(huì)被覆蓋,導(dǎo)致異常,請(qǐng)勾選自己的業(yè)務(wù)表進(jìn)行生成):

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

生成選項(xiàng)中可以選擇需要生成的類型,可以默認(rèn)生成實(shí)體層、業(yè)務(wù)邏輯層、控制器和視圖。

生成區(qū)域?qū)?yīng)MVC中的Areas,請(qǐng)按需填入(必填)

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

這里示例填寫ProjectManage,點(diǎn)擊生成按鈕,即可完成代碼生成。生成后的代碼在項(xiàng)目解決方案中,將代碼文件包括進(jìn)入項(xiàng)目

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

默認(rèn)生成后的文件是隱藏的,需要點(diǎn)擊顯示所有文件按鈕,即可看到生成后的新文件

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

右鍵新的文件夾,包括在項(xiàng)目中

由于是新生成的代碼,所以才配置新的菜單

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

如上圖,在Web項(xiàng)目中的Config/SystemMenu.config中配置菜單,模仿原有菜單即可,其中Url是指頁(yè)面的路徑,Permission是指若需要訪問(wèn)此菜單需要的權(quán)限(對(duì)應(yīng)權(quán)限配置),若沒(méi)有此權(quán)限,則菜單也中不會(huì)顯示此菜單,修改完成后重新編譯生成(權(quán)限相關(guān)模塊進(jìn)行了緩存,重新生成會(huì)清緩存),重新運(yùn)行即可看到新的項(xiàng)目菜單如下:

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

整個(gè)代碼生成過(guò)程,無(wú)需編寫代碼即可完成一張表的CRUD,當(dāng)然需要根據(jù)具體業(yè)務(wù)中進(jìn)行相應(yīng)的修改,本次示例中字段比較少,但是當(dāng)一張表的字段很多時(shí),那么此功能能夠?qū)㈤_(kāi)發(fā)效率提高幾個(gè)檔次。

管理員登錄

若要使用登錄功能,請(qǐng)將GlobalSwitch中的RunModel改為RunModel.Publish

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

默認(rèn)超級(jí)管理員賬號(hào)為:Admin

密碼為:123456

系統(tǒng)用戶管理

管理系統(tǒng)登錄的用戶

菜單:系統(tǒng)=>系統(tǒng)管理=>用戶管理,如下頁(yè)面

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

點(diǎn)擊右側(cè)設(shè)置權(quán)限,可以設(shè)置用戶權(quán)限,詳情見(jiàn)<權(quán)限管理>模塊

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

具體權(quán)限相關(guān)配置見(jiàn)權(quán)限管理模塊

系統(tǒng)角色管理

管理系統(tǒng)角色,角色是權(quán)限的載體,合理分配角色有利于權(quán)限管理

菜單:系統(tǒng)=>系統(tǒng)管理=>角色管理

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

操作中可以設(shè)置角色的權(quán)限,詳情見(jiàn)<權(quán)限管理>模塊

權(quán)限管理

一般情況下,后臺(tái)管理系統(tǒng)多少會(huì)涉及權(quán)限管理,因此本框架提供了一個(gè)靈活、高效、簡(jiǎn)潔的權(quán)限管理系統(tǒng)。

首先,權(quán)限分為兩種,即操作權(quán)限和數(shù)據(jù)權(quán)限,其中操作權(quán)限報(bào)貨系統(tǒng)用戶權(quán)限和AppId權(quán)限,系統(tǒng)用戶權(quán)限就是指操作用戶具備哪些權(quán)限,而當(dāng)對(duì)外提供Api接口時(shí),為了保證接口的安全性(若不在意可忽略),通常會(huì)提供接口簽名算法,其中AppId和AppSecret是必備的,通過(guò)對(duì)AppId設(shè)置權(quán)限,即可控制接口的權(quán)限。數(shù)據(jù)權(quán)限比較復(fù)雜,若采用純SQL方式,那么會(huì)更加復(fù)雜,本框架全程采用EF作為ORM框架,通過(guò)對(duì)IQueryable<T>進(jìn)行過(guò)濾,即可完成數(shù)據(jù)權(quán)限控制。

用戶權(quán)限:若對(duì)每個(gè)用戶都設(shè)置對(duì)應(yīng)的權(quán)限,那么工作量無(wú)疑是十分巨大的,因此引入了角色的概念,角色是權(quán)限的集合載體,那么屬于此角色的用戶就繼承了角色的權(quán)限,當(dāng)然某些特殊用戶需要擁有自己的不屬于角色的特殊權(quán)限,因此最終用戶擁有的權(quán)限就是自己的權(quán)限和所屬角色權(quán)限的并集。

權(quán)限使用:

權(quán)限定義:

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

如上圖,在Permission.config中定義了各個(gè)權(quán)限

權(quán)限配置:

在系統(tǒng)用戶管理和系統(tǒng)角色管理中可以設(shè)置用戶和角色的權(quán)限,把需要的權(quán)限勾選即可。

權(quán)限使用:

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

如上圖所示,在需要控制權(quán)限的頁(yè)面中,調(diào)用方法:PermissionManage.OperatorHasPermissionValue(“sysuser.manage”)

這個(gè)方法是判斷操作者用戶是否含有sysuser.manage權(quán)限值,其中sysuser是指Permission.config中定義的module的value屬性,manage是指permission中的value屬性,用.連接即是最終權(quán)限值。

更詳細(xì)的使用方式,請(qǐng)參考源代碼。

接口秘鑰管理

菜單:系統(tǒng)=>系統(tǒng)管理=>接口秘鑰管理

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

系統(tǒng)日志

菜單:系統(tǒng)=>系統(tǒng)管理=>系統(tǒng)日志

Web后臺(tái)快速開(kāi)發(fā)框架(支持.NET Core2.1,.NET452,.NET40)(web開(kāi)發(fā)后端框架)

結(jié)語(yǔ)

歡迎使用本框架,若覺(jué)得不錯(cuò),請(qǐng)比心

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號(hào)
公眾號(hào)
在線咨詢
分享本頁(yè)
返回頂部