C#.NET快速开发平台三层体系架构详解

Wesley13
• 阅读 751

本文作者:C/S框架网, *** 原创文档 *** 转载请注明出处!
适用版本:CSFramework 高级版3.x、企业版4.x、旗舰版5.x

C#.NET快速开发平台三层体系架构详解

C#.NET快速开发平台三层体系架构详解  三层逻辑架构 (3-Tier Logic Architecture)

C/S系统快速开发平台采用三层逻辑架构(3-Tier Architecture),由界面层(UI-User Interface Layer)、业务逻辑层(BLL-Business Logic Layer),数据访问层(DAL-Data Access Layer)三层组成。在软件体系架构设计中,分层次是最常见也是最重要的一种设计思路,目的是实现“高内聚,低耦合”设计思想。 

C#.NET快速开发平台三层体系架构详解 以下是三层逻辑架构图: 

C#.NET快速开发平台三层体系架构详解  

所谓三层逻辑架构,是在客户端与数据库之间加入一个“中间层”,介于界面层与数据层中间部分的逻辑处理。通常用于处理界面的数据,如数据采集、数据合法性检验、基本数据运算,或界面组件生成、组件状态管理等。基于处理过程封装而成的中间层称为业务逻辑层(BLL - Business Logic Layer),业务逻辑层没有严格定义和规范,采用三层结构设计符合高内聚,低耦合设计理念,也是研发软件产品最常见的设计方式一。 

三层逻辑架构不是指物理上的三层,比如三台联网的机器不是三层逻辑结构或三层体系架构,或者支持B/S应用的才是三层体系结构,所以定义和概念要区分清楚。三层是指逻辑上的三层,即把这三个逻辑层封装在一个软件项目内,是一个整体,缺一不可。三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层处理,通常情况下,客户端不直接与数据库进行交互,而是通过中间层与数据库进行交互。 

C#.NET快速开发平台三层体系架构详解  C/S系统开发框架基于三层架构的扩展应用

C#.NET快速开发平台三层体系架构详解  

C/S系统开发框架基于标准三层架构扩展连接策略层(后台连接策略)共四层逻辑,支持以下两种连接模式: 

C#.NET快速开发平台三层体系架构详解 1.直连模式(ADO-Direct) 

直连模式是指标准三层架构的数据传递方式,业务逻辑层与数据访问层封装在同一个软件架构内,具有高内聚,低耦合的设计特征,数据流向:UI->BLL->DAL->Database,通常适用于局域网或直接访问数据库的软件系统。 

C#.NET快速开发平台三层体系架构详解 2.WCF连接模式 

WCF连接模式是指客户端跨地区、分布式远程访问WCF服务器,业务逻辑层通过调用远程WCF服务器提供的接口间接调用数据访问层,数据流向: UI->BLL->WCF->DAL->Database。介于业务逻辑层与数据访问层的“中间层“称为WCF层。 采用WCF连接模式的软件系统是真正意义的C/S系统,分为客户端-Client与服务端-Server,客户端封装界面层以及业务逻辑层,服务端封装WCF层以及数据访问层。可通过配套的SQLConnector.exe工具配置两种连接模式。 

C#.NET快速开发平台三层体系架构详解  C/S系统快速开发框架体系架构图

C#.NET快速开发平台三层体系架构详解  

C/S系统快速开发框架继承标准三层架构设计理念与核心设计思想,集成大量的通用开发包以及工具实用类,并提供丰富的例子,借助技术文档、网站资源、演示源码以及在线技术指导,用户能快速投入研发软件项目,配套的代码生成器作为快速开发核心工具,内置向导功能快速生成界面、业务层、数据层、模型以及报表等源代码,为快速开发能力提供可靠保障。经过十年的产品迭代升级,开发框架技术成熟、性能稳定、产出效率高,先后为2000多位用户提供技术指导及培训服务。

下面针对C/S系统快速开发框架体系架构进行详细阐述: 

C#.NET快速开发平台三层体系架构详解   用户请求:用户操作界面的功能执行具体的动作,如点击【查询】按钮发起查询请求。 

C#.NET快速开发平台三层体系架构详解   界面层:C/S结构的系统是以WINFORM方式表示,B/S结构是以WEB方式表示,如aspx页面。若业务逻辑层提供强大的扩展性,无论界面层如何定义和更改,业务逻辑层都能够提供相应的服务。 

C#.NET快速开发平台三层体系架构详解   业务逻辑层: 主要是针对具体业务操作和数据的处理,如果说数据层是积木,那业务层就是对这些积木要搭建何种效果,要制定哪些过程和方法,在搭建过程相应的数据处理。业务逻辑层作为三层结构的“中间层”,通常用于处理界面的数据,如数据采集、数据合法性检验、基本数据运算等,或界面组件生成、组件状态管理,或制定处理业务需求流程和方法等。 

C#.NET快速开发平台三层体系架构详解   数据访问层: 主要是针对数据库的操作,或者针对用于数据存储的文件操作,而不是处理数据本身。数据访问层为业务逻辑层或界面层提供数据服务。 

C#.NET快速开发平台三层体系架构详解   WCF层(服务端连接策略): C/S系统开发框架支持两种连接访问后台数据的方式: ADO-Direct直连模式以及WCF连接模式。 这两种方式分别是两种行为不同的算法,通过策略模式(Strategy Pattern)实现多个不同的行为或算法。 策略模式的定义:一个类的行为或其算法可以在运行时更改,这种类型的设计模式属于行为型模式。策略模式定义了算法家族,分别封装起来,让它们之间可以互相替换,算法的变化不会影响到使用算法的用户。 

C#.NET快速开发平台三层体系架构详解 策略模式UML图。 

C#.NET快速开发平台三层体系架构详解  

C#.NET快速开发平台三层体系架构详解 C/S系统开发框架策略模式应用-客户管理。 

C#.NET快速开发平台三层体系架构详解  

C#.NET快速开发平台三层体系架构详解 实现原理: 客户管理的业务逻辑层BLL(bllCustomer) 定义了策略接口IBridge_Customer的变量_MyBridge。 在实例化BLL时,同时根据用户配置的参数选择实例化一个策略接口_MyBridge。假设用户发起查询请求,界面层调用BLL.SearchBy方法,而BLL.SearchBy方法调用策略接口_MyBridge.SearchBy方法,因此业务逻辑层并不关心具体的算法与实现,而是与策略接口形成高内聚协作方式,通过策略接口设计模式有效将应用场景与具体算法解耦,这种机制使程序框架设计更灵活更具有扩展性。 

C#.NET快速开发平台三层体系架构详解 直连模式: 直连模式是指标准三层架构,通常适用于局域网或直接访问数据库的软件系统,详情参考上文,不再赘述。 

C#.NET快速开发平台三层体系架构详解 WCF层: WCF层包含两个逻辑层:分别是【WCF客户端透明代理】以及【WCF服务器】。 

C#.NET快速开发平台三层体系架构详解  

**C#.NET快速开发平台三层体系架构详解 **WCF架构通信流程图 (WCF Communication Flow) 

C#.NET快速开发平台三层体系架构详解  

C#.NET快速开发平台三层体系架构详解  ORM模型

ORM,既对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R Mapping),是一种编程技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。ORM相当于中继数据,具体到产品上,例如ADO.NET Entity Framework。DLINQ中实体类的属性(Table)就算是一种中继数据。 C/S系统快速开发平台的ORM表现方式是将数据表结构映射为静态类或实体类,主要作用是给SQL命令生成器自动生成三种DbCommand组件,分别是InsertCommand,UpdateCommand,DeleteCommand。 

C#.NET快速开发平台三层体系架构详解  SQL命令生成器(数据自动更新模型)

C#.NET快速开发平台三层体系架构详解

SQL命令生成器主要职责是构建三个DbCommand组件,用于实现后台数据自动更新。 实现原理:使用.NET反射机制,分析ORM类的属性定义的特性(Attribute),读取属性名称(字段名称)、属性类型、长度等信息,自动组合成SQL脚本并创建DbCommand组件,最后交给DbDataAdapter适配器更新数据,总体而言,C/S系统快速开发平台是借助ADO.NET强大的数据库组件实现后台数据自动更新的。 

C#.NET快速开发平台三层体系架构详解  多数据库底层驱动

C#.NET快速开发平台三层体系架构详解  

开发框架为用户提供多种数据库支持,目前已封装三种底层数据驱动,支持SqlServer、Oracle、MySql三种常用数据库。Multi-DB架构采用策略模式设计,定义IDatabase通用接口,并实现DatabaseMSSQL, DatabaseMySql,DatabaseOracle三个数据库操作类。引用的类库名称:CSframework.DB.dll。 

C#.NET快速开发平台三层体系架构详解  Windows 服务承载的WCF服务器

C#.NET快速开发平台三层体系架构详解

C#.NET快速开发平台三层体系架构详解  

WCF服务器通过Windows服务承载,是目前部署WCF服务最为流行的承载方式之一,具有容易部署,易于维护等特点。注册成为Windows服务的WCF服务是承载在应用程序域中,服务进程的生命周期由 Windows服务控制管理器 (SCM) 控制。此类型的宿主环境要求应用程序编写某些宿主代码,实现方式是从ServiceBase 类以及从 WCF 服务协定接口继承,实现成为 Windows 服务和 WCF 服务,然后创建 ServiceHost服务宿主,重写 OnStart() 方法启动WCF服务,重写的 OnStop() 方法关闭WCF服务。 最后实现从 Installer 继承的安装程序类,该安装程序允许 Installutil.exe 工具将程序安装为 Windows 服务。由Windows 服务宿主托管WCF方案是承载于 IIS 之外、长时间运行的 WCF 服务非常可靠的方案, 服务的生存期由操作系统控制, 运行过程中进程和AppDomain不会被回收,除非用户手动关闭服务。 

C#.NET快速开发平台三层体系架构详解 Windows服务宿主承载WCF具有以下优点: 

(1)、承载在IIS外、长时间运行的WCF服务
(2)、所有Windows版本支持
(3)、由操作系统控制服务进程的生存周期

C#.NET快速开发平台三层体系架构详解 Windows服务支持的传输协议:

(1)、HTTP
(2)、net.tcp
(3)、net.pipe
(4)、net.msmq

C#.NET快速开发平台三层体系架构详解  IIS服务器宿主承载WCF服务

C#.NET快速开发平台三层体系架构详解  

在 IIS 上的 Web 服务开发长期以来一直是 ASP.NET 的领地。ASP.NET 1.0 发布后,Web 服务框架成为它的一部分。Microsoft 利用 ASP.NET HTTP 管道使 Web 服务在 Windows 平台上成为现实。遗憾的是,ASP.NET 和 Web 服务之间的这种紧密耦合在面向服务的世界中产生了几个限制,对 HTTP 的依赖性是主要原因。在不同宿主上运行 ASP.NET HTTP 管道很困难,因此很少采用这种方案。 WCF 服务采用了完全不同的途径来实现面向服务。WCF 的统一编程模型基于严格分层的模型,以分解面向 Web 的范例,并使服务模型和通道层与受支持的传输方式断开连接。此模型允许 WCF 支持几个不同的宿主,其中 IIS 是最重要的。 

C#.NET快速开发平台三层体系架构详解  WebApi服务器

WebApi服务器是服务端软件快速开发框架,借助ASP.NET WebAPI底层架构的强大编程能力,封装成为可复用的以及可定制开发的服务端软件模板,提供通用的软件功能,为用户快速轻松构建基于HTTP协议以及支持多种客户端的服务端程序,如:APP、B/S、C/S、各种跨平台移动终端等。 C/S系统开发开发框架基于后台连接策略的可扩展性,通过BLL层连接WebApi服务器,该机制规范数据交互格式以字符串形式传输,如JOSN, XML或标准字符串等。实现思路是前端或后端统一数据格式标准,若采用JSON格式,在调用WebApi接口前,首先将请求数据转换成为JSON格式,后端接受到请求,将JSON数据还原,最后提交到数据库。 

C#.NET快速开发平台三层体系架构详解 参考:  WebApi开发框架C/S Framework WebApi V1.0 (标准版) 

C#.NET快速开发平台三层体系架构详解  代码生成器

代码生成器作为C/S系统开发框架核心配套工具,该系统可以自动生成基于开发框架项目的三层架构代码和工程模块,生成器根据事先定义的物理表字段信息自动生成对应的组件,如:文本输入框、数据表格及界面,自动实现了数据操作的基础功能,如:添加、修改、删除、查询、数据合法性检查、ORM、BLL、DAL、Form等源码。将源码集成到解决方案,调试编译后即可运行。代码生成器使程序员避免大量机械式编程工作和重复劳动,将主要精力集中在核心业务逻辑开发。 

C#.NET快速开发平台三层体系架构详解 参考:  C/S系统开发框架-旗舰版代码生成器 

C#.NET快速开发平台三层体系架构详解  数据库连接工具 (SQLConnector.exe)

C#.NET快速开发平台三层体系架构详解  

作为C/S系统快速开发平台配套工具之一,用于建立系统的初始连接以及配置后台连接模式。该工具支持SqlServer/Oracle/MySql三种数据库类型。用户使用开发框架之前,首先要配置连接CSFrameworkXX_System系统数据库,目的是建立初始连接,读取业务账套数据库的配置信息(tb_DataSet表),方便用户在系统登陆界面选择登陆账套。 

C#.NET快速开发平台三层体系架构详解  版本自动升级程序 (AutoUpgrader.exe)

C/S 系统版本自动升级软件V1.0 作为C/S系统快速开发平台配套工具之一,用于客户端自动升级程序版本。升级程序能够独立运行,也可以通过主程序调用。当用户启动升级程序,系统自动匹配客户端版本信息与服务器上的版本信息,通过比较版本号码,若服务器的版本高于客户端,则提示用户更新软件。 

C#.NET快速开发平台三层体系架构详解 产品特点: 

1.以升级包方式自动升级,
2.可发布执行命令或独立程序的升级包,
3.升级包管理和维护,
4.升级程序独立部署。 

C#.NET快速开发平台三层体系架构详解  C/S系统快速开发平台采用ADO-Direct模式模拟数据提交流程

C#.NET快速开发平台三层体系架构详解

1. 用户请求:用户点击【保存】按钮发起请求。
2. 完成数据采集、数据验证等逻辑处理, 调用业务逻辑层的Update方法。
3. BLL层通过三层直连模式直接调用数据访问层的Update方法。
4. 在DAL层,数据自动更新程序分析ORM模型,通过SQLGenerator命令生成器构建三种DbCommand对象, 分别是Command, UpdateCommand以及DeleteCommand。
5. 将3个DbCommand对象分配给DbDataAdapter适配器,最后调用适配器的Update方法提交数据。
6. 返回True/False信息。 

C#.NET快速开发平台三层体系架构详解  C/S系统快速开发平台采用WCF模式模拟完整请求的流程:

C#.NET快速开发平台三层体系架构详解

1. 用户请求:用户点击【保存】按钮发起请求。 
2. 完成数据采集、数据验证等逻辑处理, 调用业务逻辑层的Update方法。 
3. BLL层构造器实例化策略接口(WCF客户端代理类,如WCF_XXX),调用_MyBridge接口的Update方法。 
4. 通过WCF客户端代理类创建WCF透明代理实例,调用代理实例的Update方法,将请求转发到后台服务器。 
5. WCF服务器接受到请求,完成安全相关验证,调用数据访问层的Update方法正式提交数据。 
6. 在DAL层,数据自动更新程序分析ORM模型,通过SQLGenerator命令生成器构建三种DbCommand对象, 分别是SelectCommand, UpdateCommand以及DeleteCommand。 
7. 将3个DbCommand对象分配给DbDataAdapter适配器,最后调用适配器的Update方法提交数据。 
8. 返回True/False信息。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
3年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这