本系列随笔的主旨在于让一个具有.NET程序编写基础的人通过使用平台提供的SOP中间件,快速、专业的搭建出属于自己的.NET企业级应用。我将会从EAS框架的构成和方案的建立开始,最终的目的是提供一个以分布式通信的方式连接数据库的解决方案构建思路,作为我对于博客园各位前辈的回报以及自己学习经历的总结和概括。
1、准备工作
首先,你当然需要下载一个最新的AgileEAS.NET的开发程序包,100m的样子很快就下好了,看一下里面的内容:
下面说明一下各个文件夹都是个啥东西:(最外面有李哥写的发布步骤,想直接看如何发布的请下载完毕后Alt+F4)
AgileLab.CN是一个使用AgileEAS开发web平台的案例,内容就是AgileEAS的官方网站,由于我这里重点说的是cs架构的winform解决方案,所以pass
AppServer,这个很重要,这将是你放在你服务端的唯一的也是最重要的内容,它配置的正确与否将会直接影响你是否能够正常的实现分布式通信以及SmartUpdate的自动更新功能,请各位主动把它放在一个稳妥的地方保存好备用。
Bin,和上面的一样,可以理解为这个文件夹将承载你的客户端,也可以说他是你项目调试、发布等功能实现的场所,内容构成是所有的依赖DLL文件以及SOP中间件(快速开发工具),同样,备份好,一会有用。
Data,EAS平台需要一坨坨的基础数据库来支撑他的正常工作,登录你的服务器,在你的数据库里执行相应的sql语句,建立好eas的基础数据库之后这里的东西没啥用(恢复不算。。。),数据库内容无非是一些账户啊角色啊权限啊菜单啊流程啊审批啊模块啊啥啥的,说道模块在这bytheway一下,EAS平台采用模块化的加载方式,也就是说,最终你所开发出来的所有winform页面(usercontrol)都将以模块(module)的形式被平台引用和加载,所以你的引用程序集需要集中在一个统一的位置,哪里呢?刚才不是有个Bin的备用文件夹么,就这里。
DLL,请无视
Documents里面是针对药店系统的案例所作的详细的说明,详细程度令人发指,对于希望采用DrugShop作为学习参考资料的同学请一定仔细研读,本文所采用的案例和技巧也有很多是通过DrugShop学习总结而来,如果你看不懂,那么恭喜你,回来继续这个吧。
Drugshop-src,药店系统的源码,参考价值100w,不得不看。
WF.Demo,连下面的都无视掉即可(我就这么做的)
2、建立一个项目
了解了程序包的内容,我们需要建立自己的案例了,首先,相信我,为了将来省心,请按照我下面的图示建立你的项目构成:
找个舒服的位置按照上述图形建立自己的解决方案吧,IronMES是我自己的项目,你们叫啥请自便,但是源码文件夹里得有东西啊对不?不然不是坑人么,接下来就是如何快速的建立一个简单的项目,方便起见,案例将以本人项目中的方案来进行说明,不是现场建立的,中间难免有跳步请见谅!
首先打开Bin文件夹——DotNet4.0(silverlight无视掉即可),找到这么一个东西这个叫做ORM设计器,功能是通过数据库(一般都用数据库)来创建一个用来承载所有对数据表CRUD操作的实体类库,你没看错,通过EAS,所有的CRUD操作都是可以从实体类直接获得,让你把更多的时间和精力放在复杂业务的构思和设计中去。
打开orm设计器,一上来啥都没有没关系,点击 工具——从数据库生成,
看到了么亲,这是多么的亲切啊,我们在vs里画报表建dataset的时候不就是他么?选择SQL2005(我自己用2008会报错),速度写上你的链接字符串,下一步吧
在这里选择自己需要的数据表(选择视图也是可以的,只是通过视图生产的实体类是无法进行增删改操作的),然后下一步,PS:由于为了照顾数据的通用性,EAS在处理Guid的时候使用的是String形式,所以在MSSql数据库中使用Uid的同学,请改成varchar(36)后在建立自己的orm类库!
往往数据表的建立是会随着你项目的进展而进行的,所以orm生成器保存的SDM文件,请对应存在刚才的SDMs文件夹中,方便管理,最后你的SDM应该是这样的
下面那个“模型”俩字请无视掉
我们打开一个实体类看一下都有些啥
其中的内容和我们在数据库建表时候看到的很类似,在代码,ddl和文档选项卡中对应的是这个数据表结构的对于项内容,你自己点开就明白了,其中文档很方便你写数据库说明书时候用,当然有细心的朋友可以在“标题”列改成对应字段的中文Desc,我这种比较懒的向来是不改的。。。改完了之后别忘了保存
接下来很关键,通过在“解决方案”节点上右键,来设定项目的基本参数,这个一定要和你自己的项目一致(没项目的话好办以这个为主即可),规范的命名空间可以省去你以后修改的时间
数据目录你们看到我吧所有的输出代码都放在Assets文件夹作为整理,这样需要时候比较好找
设置好后继续在“解决方案“节点上右键,生成代码,生成后的代码文件夹如图
然后复制这个Entities文件夹到一开始说的用来存放源码的文件夹里,新建一个空的解决方案或者其他解决方案把这个项目添加到方案里,形成这么一个效果
好吧。。。我承认我比较懒这个是现在项目的截图,你看红颜色圈圈的部分就是这个类库,这个解决方案的结构和DrugShop是一样的,这种结构是EAS项目构建的标准结构,既然说到这里就顺便讲一下这些项目的构成和作用好了(IronMES一下略),上面那些事服务端。。。。
BLL.Contract 这个是接口类库,分布式通信的时候详细说
BLL.Host 服务类库,继承接口,分布式通信详细说,个人认为不使用分布式通信的时候没有必要用ServiceContainer来实现数据库业务(关于ServiceContainer是什么以后详细说。。。)
Entities 这个是核心,EAS实体类库,通过这些和数据库同步的实体类库可以直接实现Insert(),Update(),Delete()方法
Entities.xxx 这个是我自己由于连不同数据库生成的不同实体类(方便管理)
AsposeExcelTools 这个是excel报表导出的操作类。。。aspose.cell这个东西很好用(题外话)
-------------------------------客户端的分界线------------------------------------------------------------
AppStart,这个是启动项,为什么呢?因为他的AppConfig文件里我会把数据库连接方式配置为数据库直连的方式,在调试的时候使用直连数据库的方式比较便于调试
Hellowang的是测试的请无视
Main,这个项目是客户端的启动项目,你在制作SetUp安装包的时候用这个来作为Desktop上的快捷方式,为啥呢?这个和appstart一样的,就是appconfig用的是分布式通信。。。不用分布式通信的可以删掉
Res,这个项目纯copy自drugshop,他存在的唯一意义(极其重要)就是替换AgileEAS里面的登录界面啊、图标啊、bottom条啊啥啥啥的。。。你肯定要换的。。。换法以后将,忘了提醒我下
WinUI,这里承载了所有的UI模块,界面业务,也是最重要的一部分,下面正好接着说如何制作我们的UI模块
wpf这个无视
-----------------------------废话---------------------------------------------------------
PS:重点,所有项目的OutPutPath必须都指向..\..\Bin\DotNet4.0\目录,对,也就是之前准备好的Bin文件夹(目的是所有的dll都在一个文件夹发布后直接可用),如图:
3、制作一个标准化的模块界面
接下来是关键的如何通过SDM文件快速的建立一个UI界面,如果对这里的描述不太明白,官方包里面的pdf也有详细的说明
列表里面代表的是表的数据查询主界面,也就是winform中的Usercontrol,窗体中的是对应每一条数据的明细信息窗口,对应的是winform中的window,在这里打开你的sdm文件(就是你刚才使用orm设计器保存好的那个),在“列表”的节点上点击右键——新建,这里面就是你添加到entities里面的所有数据表了,找到你要进行crud业务的数据表(只能选一个),点击下一步:
这个界面就是用来设计住要查询ui的了,通常字段都是要显示的,右键可以全选,后面的这个是否查询项是用来标识那些字段将作为Linq查询中的where条件出现滴,当然在界面上也会有对应的条件数据控件,PS:如果条件录入控件的类型不是textbox,你就需要在“空间类型”里面选择一下控件的类型,常用的有下拉框,时间日期(千万不要用年月日期不解释)。
添加之后的界面设计器如下
界面设计器和我们在vs中的界面设计器是一样的,使用方法当然也是一样的,这里除了必要的名字修噶和dataGird的字段修改,其他的建议都在把模块添加在VS中之后修改。
下面在“窗口”节点右键,新建,选择同样的数据表Entity,界面如下:
这里的技巧是不要把主键自增和记录时间,uid之类的不需要用户手动录入的信息展示出来(特殊需求除外),是否新增和是否显示同步即可,由于我们之前对于本smd文件的参数都有设置,所以不需要在创建页面的时候修改命名空间,保持每一个项目的不同模块的命名空间的一致性很重要。对于字段比较多的数据表,可以在多行多列出勾选,设置自己需要的列数,最终的window效果如下:
在设计了几个基础界面和表单界面之后,我们的这个sdm文件构成成了下面这个样子(list和editor不一定非要一一对应,你看你自己的需求,比如我有个视图查询界面的话就不需要对应编辑器了)
4、将代码导入解决方案
在UI设计器的项目根节点上右键,生成解决方案,看一下我们生产的方案结构
,Entities里面的是实体类库的项目,WinUI里面的是UI界面层的项目,将UI里面的cs文件拷贝到你项目对应的目录下,在项目中双击查看(vs会自动提示转成Usercontrol和window的):
Module中第二第三个属性分别是名称和描述,名称将会在EAS平台添加模块后显示在菜单中
这里对UI界面的代码修改做过多陈述,一些中间件生成时带的bug都很好改(类似多个=啊,DateTime写成Datetime之类的),关键前面在ui设计器里注意改好dateTimePiker的Name即可。。。(唠叨鬼)
这样即可形成了,一个查询界面对应一个明细单编辑界面的界面组合了,接下来是重头戏啊,你总要调试一下的
5、如何调试
首先,各位回头看一下我项目与的构成,中间有2个很关键的项目AppStart和Main,我将的是一样的东西仅仅是AppConfig不同对吧,那么,请你们可耻的,在DrugShop中把这个Copy到你的项目里吧。。。。(有需要的RES也一起copy了,不过这篇不会说道如何改RES),看下代码,把里面数据库直连的连接字符串改成你需要的:
设置appstart为启动项,调试。。。。
注释掉的那行看到么?你的项目叫啥写上即可直接进入调试模式,如果写成下面这个,就会启动平台的登录界面,登录平台了
6、模块的安装和菜单的设定
这个最没啥可说的,登录之后在系统管理——模块管理——安装,找到你Bin/DotNet4.0里面承载你模块的WinUI.dll文件,里面是不是出现你的模块了?如果真有不明白的在药店系统的说明文档中,他写的实在是很详细,看下就明白了,在这就不对这一项做赘述了
由于EAS平台已经将用户权限和角色的设定设计好了,我们只需要按照相应的权限对模块进行绑定即可实现权限管理,当真是很方便啊。。。。。
大概就这些。。。这些看起来多其实就是流水帐啊,打字打的我都有点惆怅了。。。。写的没啥章法,但是也应该大概指出了些问题,希望我以后的同志少走弯路吧,有啥问题跟贴或直接找我都可以,希望更多的人通过这样一个免费的平台开发出更多优秀的产品,这第一发就这样吧。。。仓促成文,毫无章法,各位见谅!
不出意外你会报错吧,貌似忘了说添加引用了,引用的添加很容易哈,还是在Bin/DotNet4.0里面,首先,所有跟EAS有关的项目都加上EAS.Data和MicroKernal这两个,这是基础啊,然后在界面层看你需要啥就加个啥即可,推荐你按照药店系统的案例进行添加,当然项目之间的引用也别忘了加,这个没啥可说的,UI要引用Entities之类的啊
不出意外的话这样你就应该可以顺利的搭建出一个简单的解决方案了,下一次会说一下如何修改Res定制自己的图标登录框和欢迎界面之类的,或者是分布式通信的内容
btw:由于官方的发出版本是5.0,此版本的linq不支持分组查询,初级用户或者对linq不感冒这可以无视,linq控可等下个版本出来(功能不断完善中),或者找下敏捷EAS平台开发团队寻求技术支持!