软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲
作者:csframework|C/S框架网  发布日期:2022/01/17 20:14:50

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

软件开发框架培训内容大全 - CSFrameworkV5.1旗舰版

目录

01 - 后台连接策略(采用策略模式)

开发平台支持以下连接方式:

  • 1. ADO直连(标准3层逻辑架构), 最快速,最高效开发方案
  • 2. WCF连接,采用IIS服务器。
  • 3. WebApi (基于JSON数据格式,优势:跨平台,支持多种移动端)
  • 4. .NET Remoting
  • 5. Tcp/IP,定制数据包,写自己的协议。基于Socket套接字。

关于Tcp/IP技术

Socket Server (Listing Port)服务器:建议采用Windows服务方式启动。

Socket Client:客户端。

02 - 自动升级程序

基于独立升级包方式进行自动升级,升级包上传到数据库的 sys_PackageTable 表。每个升级包有唯一标识,版本号。

升级程序数据库:AutoUpgrader

升级程序启动方式

主程序升级程序

Main.exe → AutoUpgrader程序

参考:https://www.cscode.net/archive/autoupgrader/1634572645.html

03 - 系统消息

系统消息是指开发框架提供的内部消息机制,采用心跳机制,每分钟定时从数据库获取当前用户的最新消息,心跳时间可配置。

实现:在frmMain主窗体,通过timer主动抓取服务器的消息,消息表:CSFrameworkV5_System.dbo.sys_Messages,系统数据库:CSFrameworkV5_System

04 - 数据窗体分类

1. 基础资料窗体

既:数据字典窗体,主要用于管理与维护单表基础资料,继承 frmBaseDataDict 基类。

2. 业务单据窗体

主从表结构,或主从子表三层结构, 继承 frmBaseBusiness 基类。

05 - 开发框架窗体基类 - frmBase

frmBase继承DevExpress的XtraForm

  • 支持换皮肤
  • 设置多语言
  • 窗体其他通用特性

06 - DevExpress组件

注意

VS2017→不支持DevExpress15.x或以下的版本

VS2019→不支持DevExpress17.x或以下的版本

请选择安装合适的版本。

DevExpress组件下载:

https://www.cscode.net/archive/newdoc/1634037196.html

DevExpress官网

07 - 开发框架模块介绍

开发框架模块是什么?

开发框架模块是指类库(Class Library)或 VS工程项目(VS Project),编译生成DLL程序文件。

模块主窗体

模块主窗体继承 frmBaseModule 基类,以 frmMainXXX, frmXXXXXMain开头的窗体文件。

开发模块主窗体注意事项

开发模块主窗体必须注意几点:

1. 定义菜单, 2. 定义按钮 3. 实现菜单和按钮对应的Click事件, 4. 给菜单指定权限值。

08 - 数据窗体的表格支持导出Excel/PDF文件

GridControl:表格组件。

GridView:表格视图

GridView的列头可右键弹出菜单,可以导出Excel,PDF等文件。

09 - 权限实现原理

1. 界面权限

界面权限是指控制界面的功能按钮。

每个按钮有特殊的编号,为二进制数据(2^n次方表示),如:0,1,2,4,8,16,32,64…..

权限值>0值的功能按钮可以分配权限。

参考:tb_MyActions表。

2.数据权限

数据权限控制支持以下两种方式:

横向控制:基于制单人过滤记录数据,SQL脚本使用 “Where 制单人=当前用户“ 筛选数据。

纵向控制:控制界面的组件是否显示,表格的列控制,或文本输入框控制。

举例:若当前用户没有【采购单价】的数据权限,则:设列.Visible=false, 文本框.Enable=false; 或文本框.Text=0, 隐藏采购价格。

数据权限界面实现 :

通过【角色】自由扩展权限,在界面进行逻辑判断:

C# 全选
bool v= bllPermission.IsUserBelongRole (当前用户编号,"角色编号");
if (v) //有权限
{
//处理逻辑
}
else //没权限
{
//处理逻辑
}

基础资料、业务单据的权限值定义

基础资料窗体默认分配的权限值:

AuthorityCategory.MASTER_ACTION=111

业务单据窗体默认分配的权限值:

AuthorityCategory.BUSINESS_ACTION_VALUE=32895

10 - 如何扩展按钮

http://www.csframework.com/archive/5/arc-5-20110510-1465.htm

AuthorityCategory.MASTER_ACTION+ButtonAuthority.EX_01

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

11 - 系统设置

系统设置:作为系统默认的参数,用户不可更改。表名:sys_SystemSettings。

用户设置:用户个性化设置、我的设置,用户可更改。表名:sys_SystemSettingsByUser。

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

12 - 并发控制

开发框架的并发控制是指防脏写。

1. 什么是脏写?

一个事务修改了 另外一个事务未提交的修改过的数据。

简单的讲,A和B两个人同时打开及修改一条数据,A保存后,B再保存,此时B会覆盖A的数据。

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

2. 如何避免脏写?

综上所述,系统要避免覆盖A的数据,该怎么处理呢?

通过时间戳(TimeStamp)字段(TS)控制。

时间戳:TimeStamp。

标准的更新数据SQL:

UPDATE XXX SET XX WHERE PK=@PK

若加入TS, 组合复合条件,复合主键:

UPDATE XXX SET XX WHERE TS=@TS AND PK=@PK

3. 使用时间戳避免脏写原理

举例:a,b,c,d 四个人打开一张单据,单据号码:doc20210008,当前记录的TS值:2011111601234283

B最先提交数据(第1个人能保存成功),保存后TS字段的值自动更新为当前时间:如:2011111602254289

B,C,D任何一人保存数据,此时WHERE 条件不成立了,组合的SQL如下:

UPDATE XXX SET XX WHERE TS=2011111601234283 AND PK=doc20210008

提示:更新影响0条记录。

这是ADO.NET底层抛出的并发异常,因为原记录被其他用户修改,不存在了!

13 - 项目开发

CSFrameworkV5.ClientFoundation 开发架构

基于 CSFrameworkV5.ClientFoundation 基础架构开发新项目。

CSFramework.Rename VS改名工具

基础架构VS解决方案改名,使用CSFramework.Rename工具

CSFramework.AutoUpgrader 商业版自动升级程序

https://www.cscode.net/archive/autoupgrader/1630589770.html

CSFrameworkV5.CodeGenerator.exe 代码生成器工具

https://www.cscode.net/archive/codegenerator/1630583660.html

CSFrameworkV5.SQLConnector.exe

https://www.cscode.net/archive/csframework-sqlconnector/1631288677.html

更换图片及图标

更换图片,CSFramework开发框架更换图片,参考:

按钮图标素材库

https://www.easyicon.net

https://www.iconfont.cn/home/index

14 - WCF三种承载方式

WCF应用服务器,三种承载(Hosting、宿主)方式:

1. IIS承载,适用HTTPS协议的接口。针对微信APP开发友好。

2. WinServer承载,既Windows服务,调试比较困难,也可以调试,采用:IP地址+端口,http://122.11.53.23:18885/api/do

3. Self Hosting自承载,开发环境,调试模式,CSFrameworkV5.TesterHosting设为启动模式。

建议采用双屏开发模式,提升开发效率。

特别是Client/Server双模式调试,使用双屏有非常好的用户体验。

15 - ORM模型

模型(Model),表结构映射,将数据库表结构 转换为对应的C#类。

ORM_TableAttribute

Model类的特性,定义表名、主键、是否主表3个参数。

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

ORM_FieldAttribute

字段的特性(Attribute)

isAddorUpdate: 是否用于更新的字段, 用于组合SQL脚本。

isPrimaryKey:是否主键

isForeginKey:是否外键

isDocFieldName:是否单据号码,流水序号。

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

C/S开发框架的ORM模型基于Nhibernate架构改装的,ORM Model / 模型主要用于系统自动生成SQL脚本。

关于Nhibernate

C/S框架的ORM模型基于Nhibernate架构改装的,Nhibernate作为ORM模型提交数据鼻祖。

在2005年,我们使用Nhibernate架构提交数据,开发了一套大型ERP系统。

演变:XML→C# Model,最后被Entity Framework 替换了。

16 - SQLGenerator:SQL命令生成器

基本原理

根据C#的Model模型,通过.NET反射类的全部属性, 获取 ORM_FieldAttribute 特殊各个参数的值,自动组合三种SQL脚本。

假设C#类,模型定义:

C# 全选
public class 表
{
public string PK {get;set;}//主键
public string F1 {get;set;}
public string F2 {get;set;}
public string Fn {get;set;}
}

自动生成三种脚本

SQL 全选
INSERT 表(F1,F2,Fn)values (@F1,@F2,@Fn)

UPDATE 表 SET F1=@F1 WHERE PK=@PK 

DELETE 表 WHERE PK=@PK

TIP: 针对需要保存的表,生成对应的Model。

17 - CreateSqlGenerator 创建SQL命令生成器实例

DAL层的CreateSqlGenerator方法:根据当前提交的表(DataTable)的表名,实例化SQL命令生成器对象。

当前DAL层提交多少张表,要定义对应的关系。

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

18 - 前端界面数据采集、保存逻辑

1. 数据采集实现逻辑

将当前操作界面修改的数据组合一个DataSet内,作为临时数据,然后提交到数据库。

调用DataTable.GetChanges()返回一个新的DataTable实例,然后把DataTable实例放到DataSet里面。

若界面为主从表,主从子表结构,需要采集多张表的数据,放到DataSet里面。

2. 保存数据逻辑

数据采集完成后,调用业务逻辑层的保存方法:BLL.Update(DataSet) --> DAL.Update(DataSet)。

循环DataSet.Tables,逐张表提交, 参考dal基类的两个方法:

  • dalBaseDataDict.Update()
  • dalBaseDataDict.UpdateEx(DataSet)
  • dalBaseBusiness.Update()

19 - 开发框架使用的设计模式(GOF 23)

常用设计模式

策略模式(Strategy),工厂模式(Factory),单例模式(Singleton),命令模式(Command),模板(Template),Façade(界面模式),桥接模式(Bridge),组合模式(Composite),访问者模式(Visitor)

State Machine(状态机) 电梯,等等。

更多设计模式文档:https://www.cscode.net/Search/Q?id=设计模式

20 - OOP面向对象编程

OOP语言,纯面向对象,万物皆对象!

OOP语言: 类、实体、实例、继承、接口、重写、抽象。

面向结构编程,结构化程序设计(Structured Programming),面向结构编程语言有:c,pascal,basic,主要是方法+函数+变量+常量编程方式。

程序员基础条件

1.OOP,设计模式,不是必须的。

2.而数据结构:必须的!

21 - 为什么要用设计模式?

单列模式特点:类里面必须定义自己的实例,并且只运行实例化一次。

举例:获取一组常用数据,如【产品资料】,因为【产品资料】需要在多个界面使用的。

若不使用设计模式,你必须在各个界面重复定义查询产品资料数据。

22 - 数据结构

二进制

二进制运算逻辑(AND, OR, NOT)。

数组(Array)

(1维,2维,3维)、Array

列表(List)

List / ArrayList 实现IList接口, 有枚举器 IEnumetor。

数据类型(DataTypes)

了解常用数据类型,如:string,int,money,float,double,boolean,datetime等。

指针(Point)

内存地址,比如:日期类型的8位,数字4位。

枚举 Enumeration

for rech(循环)使用。

排序算法(Sorting)

比如冒泡排序算法, asc / desc,升序,降序。

队列(Queue)

如:先进先出、先进后出、后进先出、后进后出。

树(Tree)

树干+叶子,二叉树。

堆(Heap):先进后出结构。

栈(Stack):先进先出结构。

Hash表(散列表)

Hashtable, Dictionary字典。

链(Link)

链条(类似单车链条),主要用于Command命令模式,命令传递链:A→BC

23 - CSFramework.DB.dll 多数据库支持底层

提供:MsSQL, Oracle, MySQL三种常用数据库接口。

核心接口:IDatabase

CSFramework.DB 软件简介:

https://www.cscode.net/archive/csframework.db/1630589248.html

24 - 团队开发

项目(Project DLL) 分离。

源码管理器:GIT、SVN、TFS。

必须有详细的开发文档,如:《详细设计说明书》

参考:

https://www.cscode.net/archive/newdoc/cs-210903193552570-84.html

软件系统详细设计说明书-自动目录模板docx文档下载:

https://www.cscode.net/archive/newdoc/cs-210903193606514-31.html

25 - Loginer.Current

Loginer.Current,当前登录用户全局对象,重要属性:User账号,账套编号,IP,登录时间。

26 - DAL层的构造器

如:dalPN(Loginer), 用于获取账套编码,建立对应账套的数据库连接。

27 - tb_DataSet 账套配置表

System库的 tb_Dataset 表。

28 - 数据字典与业务单据命名规范

xxxxDataDict:数据字典,DataDict,单表数据。

xxxBusiness:业务单据,Business,主从表结构的单据。

29 - 手动事务处理

需要重写DAL层的Update方法,Demo源码例子:dalPO.cs

30 - 加密算法

MD5算法

主要用于APP移动端,比如手机号登录的密码。

对称加密算法

如:DES, AES, RSA, Rijndael,开发框架默认使用Rijndael加解密,加密后字符串:3H0hVJsk1255KgahWKTyGA==

31 - frmMain主窗体

命名控件:CSFrameworkV5.Library.Entry.frmMain

frmMain.cs 主窗体重要方法:

InitUserInterface 系统初始化

_ModuleManager.LoadModules 动态加载dll模块

32 - WCF介绍

WCF是WebService迭代升级版本,开发框架高级版V3.0、企业版V4.0、旗舰版V5.0全部使用WCF。最前期的版本使用WebService。

ICommunication 通信接口

WCF真正的通信底层接口是:ICommunication 通信接口。

ICommunication 接口几个重要方法:

C# 全选
ICommunication.Open();
ICommunication.Close();

//创建通信通道
ICommunication cs= ChannelFactory.Create();
cs.Open();

//强制转换为具体的接口,获取数据
ICommonService svc=( IcommonService) cs;
Svc.GetData()

33 - WCF透明代理工厂的应用

C# 全选
Svc=WCFFactory.Create<CSFrameworkV5.WCFContract.ISystemSecurityService>(); 
Svc.GetData()

对比WebService,再也不需要手动添加Web服务引用了!您只需要引用WCF的接口,使用透明代理工厂实例化接口即可!

WebService需要手动添加引用服务,VS自动生成一堆WebService代理类。

34 - 代码生成器

CSFramework代码生成器基于数据库的表结构生成源码,先建表,再生成代码。

生成模块(Project)

生成业务模块后,必须在Assembly.cs里面改 AssemblyModuleEntry 特性。

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

生成单表界面,举例:dt_Doc表。

生成代码注意以下2点

1. 生成的DAL层源码命名空间:

CSFrameworkV5.Server.DataAccess→改为:CSFrameworkV5.DataAccess

2. 生成的BLL层

删除无效的using:using CSFrameworkV5.WebRef.DataDictModule;

代码生成器3个核心视频

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

点击下载:生成项目工程模块(Project), 密码: jzqo 分辨率:1600x900

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

点击下载:生成数据字典窗体(DataDict Form), 密码: kic0

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

点击下载:生成业务单据窗体(Business Form), 密码: erus

下载地址:

https://www.csframework.com/cs-code-generator.htm

35 - 数据窗体界面重要成员变量、属性和方法

_buttons成员变量

当前界面按钮对象集合。

获取按钮对象:

C# 全选
IButtonInfo btn=_buttons.GetButtonByName(“btnAdd”);
btn.Enable=false; // 禁用按钮

ButtonStateChanged

当按钮状态发生变化的时候触发该事件,主要对当前界面的组件状态做控制,比如修改组件的 Enable, ReadOnly属性, 改字体颜色等操作。

増、删、改、查、保存、取消等操作会触发ButtonStateChanged事件。

警告&建议

ButtonStateChanged事件会频繁调用:不要在ButtonStateChanged事件中处理数据逻辑、或查询数据。

OnEmbeddedNavigatorButtonClick

明细表格按钮的事件

CreateOneDetail

创建一条明细表记录。

数据操作窗体(单表、主从表窗体)按钮事件

http://www.csframework.com/archive/1/arc-1-20201110-2925.htm

自动下拉弹框表格过滤数据组件ucMyLookUpEdit

http://www.csframework.com/archive/1/arc-1-20200328-2819.htm

36 - WCF服务端

WCF服务器VS解决方案

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

WCF客户端代理类接口实现

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

透明代理:创建WCF实例

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

如何在客户端创建WCF对象实例?

C# 全选
private void TestCommonService()
        {
            string uri = "net.tcp://localhost:8585/CommonService";

            //创建透明代理
            ICommonService svc = WCFInvokeContext.CreateWCFService<ICommonService>(uri, BindingType.NetTcpBinding);
            try
            {
                (svc as ICommunicationObject).Open();//打开WCF通道

                //模拟用户登陆信息
                byte[] loginTicket = new byte[] { 22, 141, 34, 123, 55, 2, 23, 73, 22 };

                //调用WCF接口
                byte[] bs = svc.GetAttachedFiles(loginTicket, "PO201805130002");

                //将byte数组转换为DataSet
                DataSet ds = ZipTools.DecompressionDataSet(bs);
            }
            finally
            {
                (svc as ICommunicationObject).Close();//关闭通道
            }
        }

WCF参考文档

1. WCF服务,使用Win服务承载WCF

http://www.csframework.com/archive/1/arc-1-20170913-2325.htm

2. C# ASP.NET WebApi服务器搭建详解 - Win服务承载(Windows Service Hosting宿主)

http://www.csframework.com/archive/1/arc-1-20200217-2723.htm

3. 使用批处理文件安装或卸载WCF服务(Windows服务)

http://www.csframework.com/archive/1/arc-1-20170305-2294.htm

软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲

C/S框架网|原创精神.创造价值.打造精品


扫一扫加作者微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务
上一篇 下一篇