如何基于Winform开发框架或混合框架基础上进行项目的快速开发

在开发项目的时候,我们为了提高速度和质量,往往不是白手起家,需要基于一定的基础上进行项目的快速开发,这样可以利用整个框架的生态基础模块,以及成熟统一的开发方式,可以极大提高我们开发的效率。本篇随笔就是介绍基于Winform开发框架或混合框架基础上进行项目的快速开发,这个主题在之前的一些随笔有一定的介绍,但是觉得都不是很全面、完整,因此本篇随笔通过一些简单的例子以及一个具体的项目案例来进行全流程的开发出来,希望读者对基于我们开发框架的开发模式有一个更深入的了解。

1、基于框架开发简单界面的过程

由于我们框架提供了很多基础的模块来给我们新业务开发提供便利,如公用类库、分页控件、字典管理、权限管理系统、自动升级、附件管理、人员管理、工作流管理等可以反复重用的模块。

image

有了这些模块的加持,我们开发项目很多基础的处理就不用所有的东西都从头来过。

对于一个新建的业务表,我们需要开发的需要底层的实现和界面层的展示,这些工作量也是非常巨大的,如果基于控件细粒度的处理,也是非常繁琐的工作,因此基于这些开发过程的考虑,我们引入了提高效率开发的代码生成工具Database2Sharp,专门为我们基于开发框架基础上的框架实现代码开发,和业务界面展示的快速开发。

image

代码生成工具,不仅能够让它生成我们常规开发的界面层以下的实现代码(包括BLL、DAL、Entity、IDAL等层,以及混合框架的WCF、Web API的实现层和调用封装层),以及界面层的调用代码。

有了这些的处理,我们可极大减轻工作量。

我们开发新业务表的处理没有发生变化,需要设计好自己的业务表,然后利用代码生成工具生成对应代码,最后合并到项目里面并调整界面为合适的展示方式。

我在之前的随笔《循序渐进开发WinForm项目(3)--Winform界面层的项目设计》里面简单的介绍了一般简单界面的处理过程。

我们首先需要使用PowerDesigner或者同类工具进行表的建模,如下所示。

image

然后使用代码生成工具生成框架代码,如Winform框架生成下面项目框架代码。

这个分层,在Web项目或者WInform项目(包括WPF项目)这些分层都是可以重用的,这样我们就不用重复处理界面一下的逻辑,针对性的开发我们需要的界面层即可。

DAL层根据不同的需要,扩展支持不同的数据库类型,每个数据库类型,对应一个数据库访问实现层即可,它们实现IDAL层的接口,称之为数据库访问接口实现层。

image

然后接着在代码生成工具中单击“Windows界面代码生成”后,生成的窗体界面文件如下所示,分为了两个部分,一个是列表界面,一个是数据编辑界面。

image

然后把相关的界面内容复制到刚才创建的空项目工程上,最后界面层的项目截图如下所示。

image

生成的界面打开就具有了常规的列表和数据编辑展示的界面,如下所示。

列表界面包括了查询、新建、导入、导出,以及分页控件的整合处理,分页控件里面整合支持了各种右键操作,包括增加、编辑、删除,以及各种调整设置功能。

image

搞定列表界面,下面我们再来看看数据的编辑界面部分,数据编辑界面生成的效果如下所示(由于版面的原因,我把它进行了一定的缩小)。

image

我们看到,里面的字段说明,控件的名称等内容,都已经合理安排好了,基本上设计数据库的时候,指定的字段备注就能正确生成出来了。

这里演示的表字段比较少,因此可能排版布局方面没有很好的演示效果,不过我们知道DevExpress本身的LayoutControl布局很强大,我们可以随意调整里面控件的位置。

对于控件的类型,也可以进行不同类型的转换,如可以吧文本类型,转换为数值类型的输入控件等等。

image

如果对于复杂的界面,我们需要进行一定的合并拖动处理,以实现我们所需要的界面效果,如下所示。

image

对于界面层大量的处理操作,我们后台的代码基本上不需要调整,从而减少我们出错和降低效率的问题。

以上就是我们在做一个简单界面的过程中,一些开发思路过程。

2、实际的项目开发过程

以上介绍过程中,基本上设计到了核心的开发流程了,而我们实际的项目开发过程中,可能还需要涉及到更细节的一些过程。

1)基础项目的生成

首先我们可能需要很多字段在一个表里面,需要设计到很多业务表,那么也就是工作量的问题,和前面不会有本质的差异。

image

不管我们业务中涉及有多少个表,只要我们定义好表和它的备注信息,一切后面处理起来都会是那么的惬意的了。

image

生成的项目中,我们已经有了对应框架支持的实现层了。

image

而界面层,我们可以考虑使用框架基于插件模式的动态加载配置菜单的启动模块项目,如下所示。

image

对于Winform的界面项目,我们一般建议将我们的业务独立一个整体的项目,并包含所需要的引用文件,这个在利用代码生成工具生成代码的时候,就会有一个空白的UI项目可供使用的。

如对于普通的WInform项目,可以看到它的项目效果大概如下所示。

image

我们这里实际的项目使用混合框架进行处理的,因此界面的内容比这个复杂一点,不过也是一个独立的界面项目。

image

我们看到整个UI的界面部分是放在了Client目录下面,我在下面进行了分门别类的放置一些目录,区分不同的界面部分,方便寻找和处理的。

其他的Core层则是使用引用现有文件路径的方式进行包含文件,目的是减少DLL的依赖。

对于混合框架部分,我们这里需要多阐述一些项目,包括Web API的项目(或者WCF的项目),以及对Web API的调用封装处理。

Web API项目我们可以从框架案例中把基础的Web API项目拷贝过来使用,然后增加自己业务的Web API控制器就可以了。

对于新增业务表的Web API控制器代码,也可以利用代码生成工具进行生成。

image

生成后的控制器代码,我们整合到主体的Web API项目中就可以使用了(对于WCF项目,一样的方式,不在赘述)。

image

控制器里面,基本上就是封装对常规BLL层的调用,不过Web API的接口都需要token参数,或者一些特殊的接口需要签名信息(如登陆的接口等)

关于Web API的封装调用介绍,这里不准备详细进行介绍,有兴趣可以了解下我的其他随笔《Web API应用架构在Winform混合框架中的应用(3)--Winfrom界面调用WebAPI的过程分解》、《Web API应用架构在Winform混合框架中的应用(4)--利用代码生成工具快速开发整套应用》、《Web API应用架构设计分析(1)》、《Web API应用架构设计分析(2)》、《Web API接口设计经验总结》、《Winform混合式开发框架访问Web API接口的处理》、《Web API项目中使用Area对业务进行分类管理》,还是蛮多的,呵呵。

原则上,我们有了启动界面项目WHC.Framework.StarterDx2,有了基于插件模块界面项目的WHC.HospitalDeptMis.ClientDx,以及一些框架的支持模块,那么我们就基本上可以跑起来了。

如果编译没问题,顺利的话,我们登陆后可以看到界面如下所示。

image

我们没有看到任何业务的菜单,那些在顶端的系统管理菜单是固定的菜单项,我们应该如何才能显示我们需要的菜单项呢?

2)菜单配置

我们根据我们实际的需要,创建业务界面的菜单,我们在权限管理系统的菜单管理界面里面,新建我们的菜单信息。

image
image

上面的WInform窗体类型,就是用于定位我们的窗体对象类的,前面部分为类的全名,后者为DLL的文件名称,中间用逗号分隔。

一般菜单最好分为三层,便于区分展示,如下界面所示

image

定义好菜单后,我们需要为对应的角色分配对应的菜单资源,这样用户登录系统后才能看到对应的菜单,如下是角色分配菜单的界面。

image

登录系统界面,可以看到菜单信息的展示了。

image

** 3)权限的配置**

前面介绍了菜单的创建和配置,其中角色包含菜单资源也可以看做是菜单权限的配置,不过我们知道,系统还是有很多功能操作需要进行控制的,如新增、编辑、删除,导出、导入等,这些是如何实现权限的控制的呢?

这些依然是在权限系统里面进行控制管理的,首先我们需要定义需要控制的功能点,如下界面所示,可以批量录入某个业务的相关处理操作。

image

最后我们可以看到展开的功能点

image

定义好这些功能点后,我们可以为对应的角色分配对应的功能点权限,和前面的菜单权限分配类似。

image

做完这些,剩下最后一步就是需要在界面中绑定权限控制逻辑,我们来看看列表界面和详细界面如何进行控制的。

列表界面的权限控制处理如下:

image

编辑详细界面权限控制处理如下所示。

image

有了界面模块的权限通用处理,以及权限管理系统的信息配置,那么整个系统跑起来就能够实现我们对菜单的控制,以及对系列度的功能点进行控制处理的了。

这个是在实际开发过程中,我们需要注意的处理步骤。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容