首页 文章 精选 留言 我的

精选列表

搜索[dotnet],共602篇文章
优秀的个人博客,低调大师

基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET - 敏捷并行开发方法

首先声明,此并行开发非指并行计算,而是指实践软件工程所总结的一些心得和做法。 敏捷并行开发方法,是利用软件构件技术等技术,以及平台+插件化开发技术整合而出的一种快速开发模式;并行是指产品在生命周期内,项目管理过程、项目研发过程和机构支撑过程“并行”开展,项目研发过程中各个阶段有限度“并行”开展。 并行开发 在传统的瀑布开发模式下,同一软件的多个阶段是顺序地被开发出来的,也就是说第一阶段全部开发结束后才开始第二阶段的开发;同样,等第二阶段全部开发结束后第三阶段的开发工作才会启动。但这种串行开发模式在当今的市场环境下越来越行不通,因为所有的软件产品都面临越来越大的迅速上市的压力,唯一有效的解决方案就是引入并行开发机制。在并行开发模式下,同一软件的多个开发阶段会同时进行开,如第一阶段的工作尚未完成,往往就会启动第二阶段的工作,甚至会同时启动第三阶段的工作,从而有效缩短软件的上市周期。 相关技术 软件构件技术:所谓软件构件化,就是要让软件开发像机械制造工业一样,可以用各种标准和非标准的零件来进行组装。软件的构件化和集成技术的目标是:软件系统可以由不同厂商提供的,用不同语言开发的,在不同硬件平台上实现的软件构件,方便地、动态地集成。这些构件要求能互操作,它们可以放在本地的计算机上,也可以分布式地放置在网上异构环境下的不同结点上。 软件复用技术:软件复用就是将已有的软件成分用于构造新的软件系统。可以被复用的软件成分一般称作可复用构件,无论对可复用构件原封不动地使用还是作适当的修改后再使用,只要是用来构造新软件,则都可称作复用。 平台+插件开发方法: 插件的本质在于不修改程序主体(平台)的情况下对软件功能进行扩展与加强,当插件的接口公开后,任何公司或个人都可以制作自己的插件来解决一些操作上的不便或增加新的功能,也就是实现真正意义上的“即插即用”软件开发。平台+插件软件结构是将一个待开发的目标软件分为两部分,一部分为程序的主体或主框架,可定义为平台,另一部分为功能扩展或补充模块,可定义为插件。 小结 敏捷并行开发方法的基础是基于构件(插件)技术支持的并行,涉及软件开发的分析、设计、实现和测试等过程, 一个完善的开发方法不单单是一个简单的理论基础,还需要相应的基础平台、项目管理工具、开发辅助工具才能构成一个完整的方法体系。 敏捷并行开发方法以AgileEAS.NET做为构件技术运行、管理平台,应用开发人员根据应用需要及AgileEAS.NET平台构件契约进行分析需要、设计开发应用构件,使用EAS.NET构件管理工具对所开发的构件进行总装集成和管理。 QQ群:15118502 链接:AgileEAS.NET应用开发平台介绍 敏捷软件工程实验室 作者:魏琼东出处:http://www.cnblogs.com/eastjade关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。 本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/04/19/1715662.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 插件接口IModule扩展

前面的文章AgileEAS.NET之插件接口IModule和AgileEAS.NET之插件运行容器中对插件的基本契约宝义和运行容器做了一个介绍,但是在开发中并不是对每个模块都去实现这样的接口,我们在基于一些曲型的应用中提供了一些基础实现,应用开发者可以选择继续这个基础实现以实现特定的功能。 在WinForm应用中,默认提供了ModuleForm、ModuleControl两个IModule的实现,开发者在做应用开发时只需要重写GUID,ModuleName,Description属性及Run方法就可以了。 在WebForm应用中,同样提供了ModuleForm和ModuleControl这样的实现,具体请参考类库帮助。 下面来个例子: PayCalc2 除些之外,也提供了涉及ORM数据对象与界面的绑带一部分基础实现,这部分我将在后面文章详细说明。 下面的文章我将介绍基于属性标记的模块插件实现。 链接:AgileEAS.NET应用开发平台介绍 AgileEAS.NET之敏捷并行开发方法 敏捷软件工程实验室 作者:魏琼东出处:http://www.cnblogs.com/eastjade关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。 本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/06/30/1768522.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 智能部署与升级

我们都知道,在做管理信息系统应用产品的部署和升级是很让人头大的过程,上百个客户段节点的程序都得你去更新一遍,特别是在项目的上线调试阶段,频繁的更改引起的程序部署,可以把你累死,把项目方的系管也累的半死。 基于这样的需求,出现了各式各样的部署和升级方案,首次安装、以后自己升级的方案得到了广泛的应用,也就是应用的智能部署与升级。 AgileEAS.NET平台也提供了这样的一个部署与升级方案,被应用于ActiveXForm和SmartWin应用中,AgileEAS.NET提供基于WebService的插件运行时智能升级方案,这里有两个概念,第一个是基于WebService技术传输,第二个是插件运行时组件升级。 因为AgileEAS.NET平台是基于插件组装技术的,我们可以理解应用系统的升级也就是插件的升级,并且仅当在平台调用插件时才去进行判断和升级插件及其运行所必要的文件,也就是说升级不是一次性完成,还是在运行的环境完成智能升级。 ActiveXForm的部署与自动升级不需要客户段的设计,安装完ActiveXForm客户段核心引擎即OK了,SmartWin应用需要修改客户端的配置文件,指定升级服务的地址: <applicationSettings> <EAS.Explorer.SmartClient.Properties.Settings> <setting name="SmartService" serializeAs="String"> <value>http://vm2003/EAS/SmartUpdate/SmartAssemblyService.asmx</value> </setting> </EAS.Explorer.SmartClient.Properties.Settings> </applicationSettings> 服务端提供了一个小配置工作用于配置需要升级的程序集列表及其最后更新信息: 工作扫描指定目录中的程序集并生成程序集清单信息: <SmartAssembly Name="ActiveXForm.ClientAPI" Developer="agilelab.cn" Description="" Version="1.0.3820.33636" FileName="ActiveXForm.ClientAPI.dll" Time="2010-06-17T18:41:12.6193599+08:00"> <References> <AssemblyName Name="EAS.Distributed.Interface" /> <AssemblyName Name="ActiveXForm.ClientClasp" /> <AssemblyName Name="EAS.Explorer" /> <AssemblyName Name="EAS.Session" /> <AssemblyName Name="EAS.IOCContainer" /> <AssemblyName Name="EAS.Windows" /> </References> </SmartAssembly> 客户端通过自定义的类加载器在加载某个插件类型时自动检查程序集版本并判定是否下载程序集,程序集下载到本地后被加载和调用。 QQ群:15118502 链接:AgileEAS.NET应用开发平台介绍 AgileEAS.NET之敏捷并行开发方法 敏捷软件工程实验室 作者:魏琼东出处:http://www.cnblogs.com/eastjade关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。 本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/07/06/1772006.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 插件标记实现

前面的文章AgileEAS.NET之插件接口IModule对插件的基本契约宝义也就是接口做了一个介绍,本文将提供另一种模块插件的定义,采用属性标记插件。 我们定义了ModuleAttribute属性: ModuleAttribute 我们只需要在我们要公共的模块插件的类打上ModuleAttributes标记、在模块的入口调用方法上打上ModuleRunAttribute就可以了,以下为示例: Hello 在以上例子中,我们标记了一个模块插件,他的GUID属性为“CB58C5BB-5D15-4a17-802E-341F9F65F35C”,模块名称为Hello例子,入口方法为Start方法,特别声明一下,Start必须为一公共为参该当,Web模块不需要入口方法。 链接:AgileEAS.NET应用开发平台介绍 AgileEAS.NET之敏捷并行开发方法 敏捷软件工程实验室 作者:魏琼东出处:http://www.cnblogs.com/eastjade关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。 本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/06/30/1768558.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 发布ActiveXForm/SmartClient在线演...

距离上一次发布文章已经两月有余,本来是希望能坚持在短期内把AgileEAS.NET平台的技术文章写出来,以便让更多的同行了解,但无奈于生活,总是为了生活在奔波,5月份找了价工作敢了半个多月,上班心里总是不踏实,总觉得有必要把AgileEAS.NET整理下,所以最后又选择了辞了工作一天浑浑噩噩的过。 言归正传,在这段时间中,我把AgileEAS.NET进行了大量的删减,重新将模块插件体系进行了调整,并且增加了属性标记实现的方式,重新实现了AvtiveXForm。 准备在近斯陆续放出AgileEAS.NET的各部分内容,我也希望能有更多的朋友对这东西感兴趣,今天我将发布第一部分东西,之前只是在文章中介绍AgileEAS.NET,知道这是一个开放的插件平台,但也仅公停留在这么个影像中,今天我发布一个在线的演示,大家可以通过AvtiveXForm或者SmartClient模式感觉一下控件在容器中的运行。 AvtiveXForm在线演示地址:http://demo.smarteas.net/activexform/,使用前需要安装.NET2.0 和Activexform客户端,下载地址:http://www.agilelab.cn/downloads/eas/EAS.ActiveXForm.msi。 同时,大家也可以使用SmartClient体验,客户端下载地址:http://www.agilelab.cn/downloads/eas/EAS.SmartClient.msi,安装之后请修改配置文件EAS.Explorer.SmartClient.exe中的智能更新地址为:http://demo.smarteas.net/activexform/SmartUpdate/SmartAssemblyService.asmx。 不管是Activexform还是SmartClient模式运行,界面效果都是一样的,因为使用的是同样的业务插件模块,都会从服务器自动下载所需的程序集。 在线演示账户,大家可以使用demo1,demo2,demo3三个普通账户,也可以直接使用james管理员账户登录,所有账户密码均为demo。 关于ActiveXForm体验客户端安全设置问题请参考:AgileEAS.NET平台之ActiveXForm在线体验安全设置。 另外,我搞了一个AgileEAS.NET的QQ交流群,有兴趣的朋友请加:15118502。 链接:AgileEAS.NET应用开发平台介绍 敏捷软件工程实验室 作者:魏琼东出处:http://www.cnblogs.com/eastjade关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。 本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/06/26/1765793.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

如何使用DotNET构建大型分布式应用-山东省寿光市区域公共卫生平台

一、AgileEAS.NET平台简介 AgileEAS.NET平台是一套应用系统快速开发平台,用于帮助中小软件开发商快速构建自己的企业信息管理类开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的,AgileEAS.NET应用开发平台包含基础类库、资源管理平台、运行容器、开发辅助工具等四大部分,资源管理平台为敏捷并行开发提供了设计、实现、测试等开发过程的并行。 AgileEAS.NET平台基于软件过程改进以及构件化快速开发两方面达到这方面的目标,在软件过程改进实践方面,提出了独有的“敏捷并行开发方法”开发方法,其目的是在软件的管理之中提出符合国内中小软件企业实际情况并且可操作的软件工程实践、软件过程改进思想、及相配套的项目管理系统。 在快速开发方面,AgileEAS.NET平台平台提供了企业应用开发所需的诸如ORM、IOC、分布式通信、插件与平台基础结构以及一系统的快速生成工具,涵盖开发过程中的设计、编码、集成、部署、运维等各个环节。 二、寿光市区域公共卫生平台 寿光区域公共卫生平台全称为“寿光市区域卫生一体化信息平台”,是由寿光市卫生局负责建议的寿光医疗信息化重大工程,项目由山东中印环球软件公司承担研发,其旨在解决城乡居民的看病贵、看病难的问题,合理统筹医疗资料,建立基于居民健康档案为区域公共卫生平台,整合城乡居民健康档案管理、新农村合作医疗信息系统、医院管理信息系统、社区公共卫生服务系统、医疗卫生行政办公系统等。 参考相关新闻:寿光市区域卫生一体化信息平台投入试运行,中印环球软件公司助力寿光医疗卫生改革信息。 三、如何基于AgileEAS.NET平台构建 寿光区域公共卫生平台由山东中印环球软件公司承担研发,山东中印环球软件公司公司是一家中印合资的软件企业,其主要涉及政府、公安、消防、电子政务与办公自动化、企业ERP等相关的行业与应用研发、实施业务,对于医疗卫生行业有一定的陌生,其后与国内提供医疗信息化的很多企业各组织考虑合作,经过多方考察,最后确定与我所带领的敏捷软件工程实验室合作,合作思路和解决方案如下: 由我们提供AgileEAS.NET 敏捷软件开发平台以及配套的开发技术咨询服务、同时也向他们提供医疗行业信息化方面的行业咨询,由山东中印环球软件公司开发公共平台的相关软件的一部分(健康档案平台及新型农村合作医疗平台)、由我们提供一套基于AgileEAS.NET平台的医院信息系统、电子病历系统,最后由山东中印环球软件公司进行整合和实施。 下面是寿光区域公共卫生平台的网络结构图: 下面是寿光区域公共卫生平台的应用组成结构: 从上面两个图我们可以看出寿光区域公共卫生平台是一个非常复杂的、涉及多个业务系统、多个机构的行业应用系统,其中包含关键的三个系统:健康档案管理系统、新型农村合作医疗、医院信息系统/社区公共卫生服务系统,以及这三个系统之间无缝集成将会是一个很麻烦的问题。 四、项目研发过程及进展、现状 我们山东中印环球软件公司的合作始于2010年12月底,在此之前,山东中印环球软件公司已经组织了一个需求调研小组也做了一部分需要调研工作,合作开始之后我们一边对开发人员进行技术培训(半个月),即基于AgileEAS.NET平台的企业应用开发技术演练,另一方面与整个开小组进行业务分析与架构设计。 得益于AgileEAS.NET平台良好的架构及其提供的大量开发辅助工作以及依赖于山东中印环球软件公司为项目配置了优秀而尽职的开发人员,在正式开发一个半月之后,就拿出了公卫平台中的第一部分:城先居民健康档案管理系统,并于4月初正式上线运行,项目开始2个月之后,完成了公卫平台平台的第二部分:新型农村合作医疗系统,之后我们向开发小组移交了医院信息系统系统电子病历系统,开始了健康档案、新型农村合作医疗、医院信息系统三大系统之间的整合。 可以说,整个寿光公共卫生平台在差不多半年时间之内,从无到有就诞生了,项目截至目前,公共卫生平台的三大系统:健康档案、新家合、医院信息系统都已经上线运行,整合和实施正在进行中,下面给大家给几个应用截图: 健康档案管理系统: 新型农村合作医疗系统: 医院管理信息系统: 五、寿光区卫的感想 寿光区域公共卫生平台这个项目可以说是非常成功的,对于本次合作的多方也都是非常的满意,本项目中应用了AgileEAS.NET平台所提供的诸多思想、技术与工具,也更加印证了AgileEAS.NET是非常可靠的用于构建企业级应用的快速开发中间件,通过本项目,也使山东中印环球软件公司在构建大型分布式企业应用的经验有长足的提高。 六、平台相关下载 有关于平台最新版本的最新发布版本的程序集、类库手册、相关资料,请大家从AgileEAS.NET平台的官网http://www.smarteas.net/进行下载,官网设有独立的下载页面,从这里下载:官网下载。 CallHot写过一个系列的基于AgileEAS.NET平台的开发案例,请大家通过AgileEAS.NET平台开发Step By Step系列-药店系统-索引及AgileEAS.NET敏捷开发平台及案例下载(持续更新)-索引、AgileEAS.NET平台开发实例-药店系统-视频教程系列-索引一系列文章进行下载。 七、如何联系 如果您在使用AgileEAS.NET开发平台中有什么问题,请使用如下几种联系方式或者沟通方式。 1、官方网站: AgileEAS.NET平台:http://www.smarteas.net/ 敏捷软件工程实验室:http://www.agilelab.cn/ 2、AgileEAS.NET平台交流群: AgileEAS.NET平台交流群:120661978(超级群)[新建] AgileEAS.NET平台交流群:125643764(高级群)[新建] AgileEAS.NET平台交流群:147168308(高级群)[新建] 3、系统架构交流群: 系统架构交流群:9105332(高级群)(已满) 系统架构交流群1:124825459(高级群)(已满) 系统架构交流群2:49124441(高级群)(已满) 系统架构交流群3:47025564(高级群)(已满) 链接 AgileEAS.NET平台开发指南-文章索引 AgileEAS.NET应用开发平台介绍-文章索引 AgileEAS.NET平台应用开发教程-案例计划 AgileEAS.NET平台开发Step By Step系列-药店系统-索引 作者:魏琼东出处:http://www.cnblogs.com/eastjade关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。 本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2011/07/01/2095390.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 统一数据访问

统一数据访问(Uniform Data Access,简写为UDA)用于隔离系统和数据平台,使系统可以在各种数据库平台上自由移植。该数据库访问接口要求通过该接口对数据库进行访问的模块要提交标准的SQL语句,而不仅仅是对当前数据库有效的语句。 统一数据访问与数据层分离是相互相成的两个概念和实践、统一数据访问为数据层分离提供数据库访问环境及接口的独立、接口驱动及数据层体系结构的一致性提供保证。 统一数据访问内部自动包装ADO.NET,具体使用何种数据库则在外部由系统管理员定义在配置文件中。统一数据访问接口内部提供对数据库连接对象、数据命令对象、事务对象等的管理,因此客户端不需要自己管理这些对象,只需要提交数据库命令即可。 在UDA中主要的数据结构为“结果数据”。结果数据是数据库操作的结果的包装。如果是一个查询命令,则可能返回一个IDataReader对象、一个DataSet对象、一个DataTable对象、一个IDictionary对象、一个IList对象、一个数据对象(在数据对象管理中定义的数据结构)或者一个单纯的结果等,当然用户可以要求以XML的格式返回数据。 AgileEAS.NET提供了IDataAccessor和IDataConntion两个接口: IDataAccessor提供了对数据的操作:查询结果和执行SQL语句两种基本操作,同时提供了SQL批处理、代理查询和事务委托操作,而IDataConnetion相当于为IDataAccessor提供了一个数据库执行环境。 下面详细的看一下两个接口: IDataAccessor: IDataAccessor IDataConnetion: IDataConnection 数据访问器(IDataAccessor)是统一数据访问中进行数据存取的接口,他生存于数据库环境IDataAccessor之中,客户端只需通过该访问器提供的方法并为这些方法提供适当的参数进行数据库操作。访问器内部自动在当前数据库连接上创建数据库命令,并包装返回的结果。 目前访问器在传回查询结果时,加入了一步装箱操作,返回统一类型的数据(object),使用者需求使用拆箱,然后得到具体的数据结果。 因为在访问数据库时定了一个原则:IDataAccessor不得随意变更IDataConnetion的状态,我们知道在访问数据库时需要打开和关闭数据库操作,所以在IDataAccessor执行SQL命令过程上,首先判读IDataConnetion是否打开,如果未打开则执行IDataConnetion.Open()并在执行SQL完毕进行IDataConnetion.Close()。 bool open = this.Connection.IsOpen; if(!open) this.Connection.Open(); try { //执行SQL } finally { if(!open) this.Connection.Close(); } 而在执行查询命令时有一种返回结果IDataReader,这种状态需要数据库一直保持打开状态,所以我们增加了一个委托方法DelegateQuery,委托DataReaderHandler定义如下: /// <summary> /// 定义以DataReader作为结果返回时的数据访问委托。 /// </summary> /// <remarks> /// 该委托的实例可以由Accessor.DelegateQuery方法在内部调用,这样委托实例就不需要考虑关闭DataReader的问题。 /// </remarks> public delegate void DataReaderHandler(System.Data.IDataReader dataReader); 在数据库事务这一块,提供了除正常的开启事务、关闭事务之后,我更推荐一种事务委托和方式去执行,IDataAccessor提供了TransactionExecute方法,其委托TransactionHandler定义: /// <summary> /// 定义数据库操作的事务处理委托。该委托将代表客户执行数据库事务,这样使用者不需要考虑事务的开始和结束。 /// </summary> public delegate int TransactionHandler(IDataAccessor Accessor); 目前实现了SQL数据库(SQLServerConnection、SQLServerAccessor)、OleDb数据库(OleDbConnection、OleDbAccessor)、ODBC数据库(ODBCConnection、ODBCAccessor),ORACLE数据库由单独的数据库访问服务程序集实现。 具体的数据访问例程我将在后面展示: 下面来说一下AgileEAS.NET中的ORM。 QQ群:15118502 链接:AgileEAS.NET应用开发平台介绍 AgileEAS.NET之敏捷并行开发方法 敏捷软件工程实验室 作者:魏琼东出处:http://www.cnblogs.com/eastjade关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。 本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/07/01/1768813.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET平台开发指南 - 开发流程

过程介绍 AgileEAS.NET平台基于敏捷并行开发的一种实践,采用优秀先进的Microsoft .Net构件技术的插件式开发,AgileEAS.NET平台及其提供的一系列工具涉及产品设计、编码实现、测试运维等环境。 因为AgileEAS.NET采用了基于插件技术的增量开发模式,也就是说一个大的应用我们可以分解为不同若干个系统或者增量,对子系统进行优先级和依赖级别划分,根据子系统的依赖特别、优点级决定优先实现那些子系统;当然,若开发力量充足或者采用开发外包的方式可以分别实现相应的子系统。 而对于不同的子系统开发,我们可以参考瀑布或者其他的开发模型进行开发,在各子系统的实现中,平台提供的相应辅助工具介入开发,其开流程如下: 模块设计 本阶段需要把需分析结果中所要求的业务模块参考平台加插件的这种开发模式进行分解,把应用系统或者子系统的业务需求逐步分解为不可再分解的原子模块即插件;并描述其他元数据其各模块的业务相关性、依赖关系,形成系统模块定义说明书。 数据定义 在完成应用系统或字系统需求进入设计阶段之后,AgileEAS.NET提供了数据对象设计工具两步完成数据库设计、数据对象定义;使用数据设计定义工具之类,项目设计阶段就不再需要独立的数据库设计步骤,数据对象定义工具输出数据定义语言DDL和数据库设计文档。 使用数据对象定义工具集成了数据表结构、ORM实体以及ORM实现和数据表关系的定义: 当定义好模型之后,可以直接生存数据库设计文档: ORM设计器是跨越设计、实现两个阶段的工具,在设计阶段定义好的数据模型次在编码过程中用于代码生成。 编码扩展 本阶段需要程序员实现设计阶段划定义的业务功能模块(插件)及其业务逻辑,对于WinForm、WebForm两类不同的应用插件,AgileEAS.NET提供了一部分基础实现,程序员可以选择继承这些基础实现也可以选择使用属性标记或者直接实现IModule接口。 AgileEAS.NET平台提供了一组称为GUI模板的基础组件实现,他集成了一组信息系统中常用的基础数据存取类的UI实现,程序员可以选择在这些GUI模板的基础上实现自己的业务逻辑,以加快开发速度;GUI模板部分在开发包发布时以源代码形式发布。 AgileEAS.NET平台ORM设计器生成的基于接口驱动的分层代码实现了据的读取、新增、修改、删除等基本查询,但是对于复杂的业务逻辑,需要开发人员去实现和扩展,代码生成器生成的源代码基于分部类结构,保证了程序员的修改不被生成的代码所覆盖。 程序员在编码实现过程中,AgileEAS.NET也提供了插件的调试(Debug)环境,其运行效果和最终运行效果一样。 组装配置 开发好的业务模块被AgileEAS.NET平台的模块管理系统安装、部署在平台中,并依据业务相关性对其进行组织,配置在程序组中: 并依据系统运行期需求对模块权限管理进行,AgileEAS.NET平台中采用基于模块和角色、账户相关系的访问控制列表,有关权限的详细内容请参考AgileEAS.NET之权限管理。 链接 AgileEAS.NET平台开发指南-系列目录 AgileEAS.NET应用开发平台介绍-文章索引 AgileEAS.NET官方网站 敏捷软件工程实验室 QQ群:116773358 作者:魏琼东出处:http://www.cnblogs.com/eastjade关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。 本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/09/12/1824428.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

随笔 - 142 文章 - 0 评论 - 2294 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - ...

前面我们在AgileEAS.NET之插件接口IModule和AgileEAS.NET之插件运行容器中对模块插件和运行容器都做了介绍,我们知道,在运行容器中,我们要基于模块插件并结合账户/角色进行权限判定,在系统账户登录之后,导航动态加载账户所具有执行权限的模块。 AgileEAS.NET平台的权限系统参考了Windows系统的权限管理系统ACL(访问控制列表),AgileEAS.NET平台建立了基于模块插件与账户/角色组合的访问控制列表,对模块访问权限进行统一的管理和验证。 AgileEAS.NET提供了一供业务模块权限机制,这组功能包含在AgileEAS.NET之模块插件集成一文中所指的模块管理插件中,本文对其做一个补充和对鉴权验证做一个说明,下面说授权机制: 模块属性的安全选项卡列出了拥有特定模块某种访问权限组合的账户和角色列表,上图中所包含的是两组角色,及其所具有的详细权限,我们可以通过添加和删除来增加和删除账户和角色对所授权的权限,添加权限会打开账户/角色选择窗口: 我们可以进行多项选择,然后确定返回如下界面: 我们对刚新增加的账户选择权限并确定保存权限,删除某个角色/账户的访问权只需要选种角色/账户,点删除即可,接下来,我说一下不同容器的鉴权验证过程。 对于基于WinForm技术的运行容器,权限登录账户动态加载具有执行权限的模块,对于WebFrom运行容器,我们在动态加载导航的基础上增加模块在调后时的检查,对于ws类的服务插件,我们提供基于运行期的安全检查。 链接:AgileEAS.NET应用开发平台介绍 敏捷软件工程实验室 作者:魏琼东出处:http://www.cnblogs.com/eastjade关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。 本文转自魏琼东博客园博客,原文链接:https://mail.qq.com/cgi-bin/frame_html?sid=fbJhIRhI41g48Gw2&r=ccf2b5b190226e47a331bdf6f4cc8353,如需转载请自行联系原作者

优秀的个人博客,低调大师

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 应用在线演示/例子

在前几天我发布了基于ActiveXForm/SmartClient的在线演示,在ActiveXForm和/SmartWin在演示中,我们用两种表现试展示了AgileEAS.NET在WinForm开发技术上的东西,今天我发布一个基于AgilEAS.NET平台基于WebForm技术的在线演示。 说明一下,这个在线演示是我的一个客户基于AgileEAS.NET的一个项目,在他的同意的前提下我拿来展示一下,因为他这个东西开发时项目时间紧张(1个开发人员不到两周时间,而且之前没做过WEB开发),所以界面做做的很一般,还忘大家凉解。 发布这个演示的不在于展示平台在Web开发用的什么高新技术,只是战示基于AgileEAS.NET这个平台这种模式的Web开发的一个小小的例子,大家可以在看的过程中重点看Web方式中插件和运行状态,而不是关注这个例子的业务,对于这个例子的业务,我也不熟悉。 在线演示地址:http://ows.smarteas.net/,体验账户,大家可以使用wjy,caixp,miyl三个普通账户,也可以直接使用james管理员账户登录,所有账户密码均为demo。 因为是纯WEB应用,这个演示不用像ActiveXForm那样麻烦,需要安装客户端,配置IE安全性,请大家放心体验,有兴趣的朋友加QQ群:15118502。 ^_^ 链接:AgileEAS.NET4.0发布ActiveXForm/SmartClient在线演示 AgileEAS.NET应用开发平台介绍 AgileEAS.NET之敏捷并行开发方法 敏捷软件工程实验室 作者:魏琼东出处:http://www.cnblogs.com/eastjade关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。 本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/06/28/1766570.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET平台开发指南 - 实现业务

业务分层 依据行业经验来看,分层是解决复杂问题的简单方法,通过分层,可以把一个复杂问题分解为不同层次应用的小问题,解决各层小问题的难度小于总的问题难度;分层最成功能莫过于计算机网络通信协议,ISO/OSI、TCP/IP。 在信息系统开发中,我们也对一个应用按逻辑上划分为三层:数据层、业务层、界面层,其业务逻辑如下图所示: 大家通俗的对这样的结构称之为三层结构,或者演变为N次结构(对其中的某一层进行分解),两层结构(合并界面与业务为一个层,或者合并业务层与数据访问层)或者一层结果(所有的都在UI层)。 分层的架构设计或者实践在于应用开发的需求以及开发人中技术相制约,只有选择合适的分层模型,没有最优的分层模型。 AgileEAS.NET平台的分层 AgileEAS.NET平台应用开发提供了2-3/N的分层实现支持,开发人员可以根据应用系统的规模选择不同的分层模型,下面我就从2层结构开发说起: 这种2层的结构在程序部署有两个程序集支持一个应用;一个是UI部,另一个是数据访问层部分,UI和数据访问层共同完成了业务层的功能,UI偏重于业务的输入验证,DAL层则偏重于业务的数据处理。 在AgileEAS.NET平台中,数据访问层是基于接口驱动的数据访问层,也就是说把数据访问层分解为数据访问接口层与访问实现层,如下图所示: 在上图所示的架构中,对数据访问层按照接口驱动的思想分解为数据访问层接口组件和不同的数据库访问层实现,UI只依赖于数据访问层接口,不与具体的数据库实现相关,也就是业务只依赖于声明,而不依赖于实现,这样就有一个好处,当数据访问层实现做了修改之后不会影响到界面层(UI)。 在上图结构的基础上,在UI层和DAL层加入独立的业务逻辑层就得到如下图所标的结构: 在这种结构中,系统界面层访问业务逻辑层,而业务逻辑层依赖于DAL接口层,并在运行期决定是否加载那一个DAL实现,这中结构是AgileEAS.NET平台推荐的应用分层模式,平台的数据对象生成器已经生成了基于接口驱动的数据访问层代码,在界面层开发中,AgileEAS.NET平台提供了一系统的UI与ORM对象数据绑定的实践。 AgileEAS.NET平台开发的信息系统可以运行在基于.NET WebServices、.NET Remoting技术的分布式环境中,这样我们就引伸出别一个分层结构: 这种新的分层结果增加了业务代理层和通信/传输服务(层),最初这种结构被应用于分布式应用中,在系统界面层、业务代理层、业务逻辑层各层之间数据以ORM对象形式传递。 对于涉及到的通信/传输服务,或者说通信/传输服务层,在分布式应用中,她是一个事实存在的通道,客户端部署着界面层、业务代理层,应用程序服务器刚部署着业务逻辑层和数据访问层;但是在非分布式应用中,比如客户端联想着所有组件,那么就通信/传输服务,为了统一这种分层架构,我在AgileEAS.NET平台中,对于访问本地业务组件的这种服务搞了一个虚拟的通信/传输服务。 借助于这样和分层架构,AgileEAS.NET平台所开发的应用,可以在不修改任务程序的情况下,只修改配置文件即可实现本地程序与分布式应用程序的自由切换。 关于业务逻辑层 AgileEAS.NET平台采用ORM技术来构建数据访问层代码,因为ORM已经对数据库的读取、增加、删除、和修改;从理论上来讲,数据访问层已经实现了数据的增加、删除和、修改操作,业务层只需要调用这些操作,也可以是界面层直接调用数据层的这些基础操作,这样就形成了一个弱化的业务逻辑层。 如果严格的去追究业务逻辑层可以划分独立的业务逻辑和与数据处理相关的业务层,在AgileEAS.NET平台的数据对象设计器中生成的代码是基于分部类实现的,也就是说,生成器所生成的代码中预备了一半的代码文件由程序员写与业务逻辑相关的复杂数据处理代码,而业务逻辑层接受界面层的请求调用数据访问层的数据处理方法以及完成如事务处理等。 而业务逻辑代理层组件根据业务层组件生成相应的业务代理代码,完成系统界面层请求向真实的业务逻辑层转移的功能。 UI开发 界面层开发是应用开发中非常重要的部分,软件所提供的应用都需要通过界面展示给系统最终使用人员,友好的人机交互可以让操作人心赏心悦目;而如何设计出友好、美观的人机交互界面是开发人员及美工人员功底的体现。 在AgileEAS.NET平台中,系统界面层也是应用开发中插件的一个环节,系统界面层中的某些UI需要实现AgileEAS.NET平台的插件契约,直接或间接的实现IModule接口或者使用Module属性标记模块。 AgileEAS.NET平台中提供了一系统的UI基础模板及输入验证、UI数据交互管理的辅助开发组件,以方便快速的完成UI的编码。 链接 AgileEAS.NET平台开发指南-系列目录 AgileEAS.NET应用开发平台介绍-文章索引 AgileEAS.NET官方网站 敏捷软件工程实验室 QQ群:116773358,群一已满 作者:魏琼东出处:http://www.cnblogs.com/eastjade关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。 本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/09/14/1825633.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

DotNET企业架构应用实践 - 用服务定位器(SL)完成服务的多种实现的统一调用

前面的文章服务定位器(SL)与AgileEAS.NET中的实现介绍了服务定位器的一些概念、应用场景与AgileEAS.NET平台中SL的实现,本文是这骗文件的一个例子与Demo,详细的演示SL在应用开发中的使用。 下面我说开始例子,假设有这么一个应用场景,我们需求一个Hello服务,并且需要在XML WebService、.NET Remoting和本地同进程中三种不同环境的应用,也就是说,这个服务可能会有三中实现,具体使用那一个,在应用过程中决定,我先贴个简单的类图: 现在我们来开始干活,一步一步实现这个应用,首先定义服务接口,建一个名称为Hello.Interface的类库项目,定义一个IHello接口: public interface IHello { string SayHello(string name); } 接着我们做WebService实现,添加一个Hello.WebService的ASP.NET Web服务应用程序并引用Hello.Interface,添加一个HelloService的WebService: [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ToolboxItem(false)] public class HelloWebService : System.Web.Services.WebService,Hello.Interface.IHello { [WebMethod] public string SayHello(string name) { return "hello," + name; } } 实现.NET Remoting和LocalComponent,添加一个名称为Hello.Service类库项目,添加一个类Hello: public string SayHello(string name) { return "hello," + name; } 实现一个简单的.NET Remoting的运行环境,建一个名称为Hello.ServiceConsole的控制台项目: class Program { static void Main(string[] args) { TcpChannel channel = new TcpChannel(9001); ChannelServices.RegisterChannel(channel, false); RemotingConfiguration.RegisterWellKnownServiceType(typeof(Hello.Service.HelloService), "Hello", WellKnownObjectMode.Singleton); System.Console.ReadLine(); } } 最后完成我们的调用客户端,建一控制台项目Hello.Client,引用Hello.Interface项目和EAS.IOCContainer.dll、EAS.ServiceLocator.dll程序组,定义服务消费者HelloClient: class HelloClient { IHello hello = null; public HelloClient() { this.hello = ServiceFactory.GetService("HelloService", typeof(IHello)) as IHello; } public IHello Hello { get { return this.hello; } } } 控制台程序入口Program : class Program { static void Main(string[] args) { System.Console.WriteLine(new HelloClient().Hello.SayHello("james")); System.Console.ReadLine(); } } 定义配置文件App.config : <configuration> <configSections> <section name="EAS.Services" type="EAS.ServiceLocators.ServiceConfigHandler,EAS.ServiceLocator" /> <section name="EAS.Objects" type="EAS.Objects.ConfigHandler,EAS.IOCContainer"/> </configSections> <EAS.Objects> <object name="HelloObject" LifestyleType="Thread" type="Hello.Service.HelloService,Hello.Service" /> </EAS.Objects> <EAS.Services> <Services> <Service name="HelloService" service-type="DotNetRemoting" Singleton=" true" url="tcp://localhost:9001/Hello"/> <!--<Service name="HelloService" service-type="LocalComponent" component="HelloObject" />--> <!--<Service name="HelloService" service-type="WebService" Singleton=" true" url="http://localhost:56824/HelloWebService.asmx"/>--> </Services> </EAS.Services> </configuration> 运行客户段,可以看到如下的输入截图: 是不是很简单,在实际应用中,对于这种服务运行环境的未知性,我们可以通过这种简单的方法进行处理,服务消费者只需求知道接口,而无需知道具体的实现,开发人员可以根据客户的不同应用场景而做出不同的实现,上例中的服务定义配置项中,我注释了DotNetRemoting和LocalComponent两种方式的Hello服务,大家可以释放放开其中的一个而注释另外两个用于配置运行。 这个例子的源代码我已上传,请下载 Hello.Example.rar。 QQ群:15118502 链接:AgileEAS.NET应用开发平台介绍 AgileEAS.NET之敏捷并行开发方法 敏捷软件工程实验室 作者:魏琼东出处:http://www.cnblogs.com/eastjade关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。 本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/08/06/1793703.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET平台开发指南 - 系列目录

AgileEAS.NET平台的开发指南系列文章,说是一个系列,实际上是我之前写好的一个文档,文档比较长,我就按章节分解着发上来,本系统主要讲述应用AgileEAS.NET平台进行开发的过程,以及各个开发过程的一些作法。 开发指南系列 AgileEAS.NET平台开发指南-开发流程 AgileEAS.NET平台开发指南-实现插件 AgileEAS.NET平台开发指南-数据访问 AgileEAS.NET平台开发指南-数据层开发 AgileEAS.NET平台开发指南-实现业务 AgileEAS.NET平台开发指南-处理报表 AgileEAS.NET平台开发指南-分布式应用 AgileEAS.NET平台开发指南-配置文件 AgileEAS.NET平台开发指南-应用部署 链接 AgileEAS.NET应用开发平台介绍-文章索引 AgileEAS.NET官方网站 敏捷软件工程实验室 QQ群:116773358 作者:魏琼东出处:http://www.cnblogs.com/eastjade关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。 本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/09/12/1824405.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

DotNET企业架构应用实践-数据库表记录的唯一性设计的设计兼议主键设定原则

简要介绍 在我们进行数据库设计的时候,大家都会考虑到数据表主键的设计,而可能没有人去关注记录唯一性字段设计,或者说,很多开发人员把这两种混合在一起处理,即就是表记录的唯一性与主键相结合的技术,因为从本质上讲,表主键的值是必须唯一的,他即能确保表记录的唯一性。 我在本文提出的思路是分离表记录的唯一性与主表键的设计,也可以理解为是双主键的设计思路,即唯一性设计可以与表业务无关,而表主键的设计必须与业务相关联,一个主键记录一定能具有一定的业务意义。 主键设计的争议 关于数据库主键设计的一些原则与所采用的技术,园子中有大量的文章讨论,我选择两片具体代码性的文章,听棠.NET的数据库主键设计之思考和zhenyulu的小议数据库主键选取策略(原创)两篇文章。 关于数据库主键设计的一些原则与所采用的技术,园子中有大量的文章讨论,我选择两片具体代码性的文章,数据库主键设计之思考与小议数据库主键选取策略(原创)两篇文章。 在数据库主键设计之思考一文中,作者把数据库主键设计讲的很透彻,他也提出了主键设计与具体业务无关的论点: “我强调主键不应该具有实际的意义,这可能对于一些朋友来说不太认同,比如订单表吧,会有“订单编号”字段,而这个字段呢在业务实际中本身就是应该具有唯一性,具有唯一标识记录的功能,但我是不推荐采用订单编号字段作为主键的,因为具有实际意义的字段,具有“意义更改”的可能性,比如订单编号在刚开始的时候我们一切顺利,后来客户说“订单可以作废,并重新生成订单,而且订单号要保持原订单号一致”,这样原来的主键就面临危险了。因此,具有唯一性的实际字段也代表可以作为主键。因此,我推荐是新设一个字段专门用为主键,此主键本身在业务逻辑上不体现,不具有实际意义。而这种主键在一定程序增加了复杂度,所以要视实际系统的规模大小而定,对于小项目,以后扩展不会很大的话,也查允许用实际唯一的字段作主键的。” 从个人的经历和技术角度来讲,我不同意这个主键与业务无意义的观点,我的观点是主键必须与业务相关,即一个表主键字段或者表主键字段组合必须具体一定的业务意义,并且增加一个与业务无关而有能确保记录唯一性的字段,即表的唯一性字段: 我列举一个例子,在商品进销存业务中的入库记录中记录个如下信息: Ødbo.PIN(产品入库表) 表名 PIN 所有者 dbo 列名 数据类型 空 说明 IDN INT Y ID BillCode VARCHAR(16) Y 单根号 Code VARCHAR(16) Y 产品编码 Name VARCHAR(128) Y 产品名称 Spec VARCHAR(64) N 规格 Unit VARCHAR(32) N 单位 Price DECIMAL(18,4) Y 价格 Number INT Y 数量 Operator VARCHAR(64) Y 入库员 InTime DATETIME N 和库时间 业务要求同一入单可以包含1-N条产品库入库信息,同一入库单不得包含两条或条件以上的同一编码的商品记录,由此我们可以知道,入库单据号BillCode及产品编码Code即可以确定一笔交流,其组合是符合主键设立原则的,同时我们在主中增加了一个字段IDN,用于确保记录的唯一性。 相关的技术 表记录唯一性设计的技术我在本文不做详细的介绍,在数据库主键设计之思考与小议数据库主键选取策略(原创)两篇文章文章之中都有非常详细的论述,请大家去这两篇文章参考,他们建议这些技术使用于主键,而我更主张用于记录的唯一性确认上。 我推荐的选择 他多种唯一性确立技术之中,我比较喜欢“手动增长型字段”的设计,即在系统中增加一个表包含至少两个字段,Key和Value,如下所示: Øeas.IDENTITYVALUES(唯一值记录) 表名 IDENTITYVALUES 所有者 eas 列名 数据类型 空 说明 GUID UNIQUEIDENTIFIER N Guid ITEMKEY NVARCHAR(128) Y 关键字 ITEMVALUE INT N 当前值 DESCRIPTION NVARCHAR(256) N 说明 同时,数据库中提供以下存储过程: CREATE procedure eas.GetIdentityValue @itemKey char(128) AS BEGIN TRANSACTION update eas.IDENTITYVALUES Set ITEMVALUE = ITEMVALUE + 1 where ITEMKEY = @itemKey select ITEMVALUE from eas.IDENTITYVALUES where ITEMKEY = @itemKey COMMIT TRANSACTION GO 值可以采用整性或者长整性进行存储,在具体应用的过程之中,在应用表中增加一个字段,插入数据时取这个过程的返回值,如: exec eas.GetIdentityValue @itemKey =“dbo.PIN” 数据分区的扩展 记录唯一性设计除了确保数据表记录的唯一性之外,还能为数据分区提供支持,不过这有一点要求,即唯一性设计必须采用整性或者并且一定连续意义的值才能处理,而如GUID这样的没有办法在将来支持扩展分区的设计。 本文先到此为止,在后面的文章中将会应用到这种技术并进行详细的讲解。 文未我加点广告,谢谢! 链接 一步一步教你使用AgileEAS.NET基础类库进行应用开发-系列目录 AgileEAS.NET平台开发指南-系列目录 AgileEAS.NET应用开发平台介绍-文章索引 AgileEAS.NET平台应用开发教程-案例计划 AgileEAS.NET官方网站 敏捷软件工程实验室 QQ群:116773358(AgileEAS.NET平台) 本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/10/15/1851880.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - Linq 2 EAS.NET,Orm支持Linq

前面的文章AgileEAS.NET 4.0重构裁剪,新的ORM、支持Linq,正式支持WPF,开放更多的接口简单的介绍了一下AgileEAS.NET平台在2011年初的一些重大改进措施,其他涉及到有关于Orm体系的改进以及对linq的支持,AgileEAS.NET 快速平台之ORM体系的改进与ORM的新成员一文中对Orm的改进做了介绍,本文将详细的给大家介绍这AgileEAS.NET平台中Orm对Linq技术的支持。 Linq介绍: LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性。已成为编程语言的一个组成部分,在编写程序时可以得到很好的编译时语法检查,丰富的元数据,智能感知、静态类型等强类型语言的好处。并且它同时还使得查询可以方便地对内存中的信息进行查询而不仅仅只是外部数据源。 LINQ定义了一组标准查询操作符用于在所有基于.NET平台的编程语言中更加直接地声明跨越、过滤和投射操作的统一方式,标准查询操作符允许查询作用于所有基于IEnumerable<T>接口的源,并且它还允许适合于目标域或技术的第三方特定域操作符来扩大标准查询操作符集,更重要的是,第三方操作符可以用它们自己的提供附加服务的实现来自由地替换标准查询操作符,根据LINQ模式的习俗,这些查询喜欢采用与标准查询操作符相同的语言集成和工具支持。 我们来总体看看LINQ结构: 需要说明一点的是,Linq是从.NET3.5开始支持的,.NET3.5 Framework 中提供了 LINQ to Objects、LINQ to DataSets、LINQ to SQL、LINQ to Entities、LINQ to XML等默认支持。 以上内容是摘抄自互联网的相关内容,简单的说明了一下Linq及Linq的应用,如果说单纯的那么Linq是一种语言中的特性的话LINQ to Objects、Linq to SQL就是这种语言特性在对象查询、SQL查询中的具体应用。 Linq to EAS.NET: Linq to EAS.NET 同LINQ to Objects、Linq to SQL 一样,是应用了Linq这种语言特殊在AgileEAS.NET平台的Orm体系的应用,类似于Linq to SQL、Linq to Entities,应用Linq语言特殊实现AgileEAS.NET平台Orm对象的查询,让使用AgileEAS.NET平台进行开发变得更加简单和方便。 下面我们来进行一个简单的Linq to EAS.NET 应用吧: 第一步:打开对象设计器,建设一个实体对象(Product),并生成代码: 第二步:打开AgileEAS.NET平台对象设计器生成的代码,增加一个Asp.NET Web应用程序LinqDemo.WebUI,并且在Default.aspx页面中拖放一个GridView并且设定绑定信息如下: 第三步:使用linq编写数据查询代码并绑定到GridView: 第四步:修改Web.Config文件,增加以下配置信息: <EAS.Objects> <!--访问器。--> <object name="DataConnection" assembly="EAS.Data" type="EAS.Data.Access.SqlClientConnection" LifestyleType="Singleton"> <property name="ConnectionString" type="string" value="Data Source=.;Initial Catalog=demo;User ID=sa;Password=sa1234;"/> </object> <object name="DataAccessor" assembly="EAS.Data" type="EAS.Data.Access.SqlClientAccessor" LifestyleType="Singleton"> <property name="Connection" type="object" value="DataConnection"/> </object> <object name="OrmAccessor" assembly="EAS.Data" type="EAS.Data.ORM.OrmAccessor" LifestyleType="Singleton"> <property name="DataAccessor" type="object" value="DataAccessor"/> <property name="PageProvider" type="object" value="PageProvider"/> </object> <object name="PageProvider" assembly="EAS.Data" type="EAS.Data.ORM.OraclePageProvider" LifestyleType="Thread"/> <object name="ServiceBridger" assembly="EAS.MicroKernel" type=" EAS.Services.LocalServiceBridger" LifestyleType="Singleton"/> <object name="Logger" assembly="EAS.MicroKernel" type="EAS.Services.TextLogger" LifestyleType="Singleton"/> </EAS.Objects> 最后:编译运行,看看结果: OK,通过以上简单的过程,基于Linq to EAS.NET实现了一个简单的like查询,相信大家已经看到了这个编程的便宜性,接下来我将会在把有关于Linq to EAS.NET所实现的表达式做一些简单的说明。 支持那些表达式: Linq所支持的表达式非常的多,AgileEAS.NET平台只是实现了使用最频繁的那些表达式,对表没有实现的表达式在开发中或者要采用其他进行处理,下面我详细的向大家介绍AgileEAS.NET所实现的那些表达式: 条件表达式 Linq to EAS.NET中实现了“=”、“>”、“<”、“>=”、“<=”、“!=”、“like ”匹配、In 查询、Between 、以及And、Or组合。 排序表达式 Linq to EAS.NET中实现了Order by ,Order by Desc排序。 统计及分页 Linq to EAS.NET也实现了First、Last、FirstOrDefault、LastOrDefault表达式。 Select New {} Linq to EAS.NET也实现了select new {}表达式,这将能大大提高编程的方便性和更高的查询性能,如下写法: 其他表达式 Linq to EAS.NET实现了 Count统计以及基于统计的分页支持Top、Take及Skip表达式。 下一步的计划: 在接下来的Linq to EAS.NET版本中我们将陆续支持更表的表达式,在近期将会支持Sum、Average、Max、Min表达式,在下一步Orm支持关系之后将进一步支持join 、left join、right join表达式。 对于Group by 、Having表达式暂时还没有考虑到支持。 如何实现Linq的: Linq to EAS.NET的实现思想非常的简单,即解析Linq表达式并转换为AgileEAS.NET的查询表达式树并由AgileEAS.NET平台的Orm执行并返回结果。 在AgileEAS.NET平台的Orm技术中,我们实现了一个LINQ Provider,即EAS.Data.Linq.DataEntityQuery<T>,在执行任务linq任务之前,并且显式的定义EAS.Data.Linq.DataEntityQuery<T>实例,由他在解析并势力Linq语法,在此要感谢李会军的两篇文章:打造自己的LINQ Provider(上):Expression Tree揭秘和打造自己的LINQ Provider(中):IQueryable和IQueryProvider,遗憾的是,他并没有写出下篇,感兴趣的朋友去看看吧。 AgileEAS.NET平台ActiveXForm运行容器的客户端工作插件。 本文中的小例子及其相关的对象定义文件、建表及数据创建脚本、源代码文件,请大家从这里下载。 下载说明 有关于平台最新版本的最新发布版本的程序集、类库手册、相关资料,请大家从AgileEAS.NET平台的官网http://www.smarteas.net/进行下载,官网设有独立的下载页面,从这里下载:官网下载。 CallHot写过一个系列的基于AgileEAS.NET平台的开发案例,请大家通过AgileEAS.NET平台开发Step By Step系列-药店系统-索引及AgileEAS.NET敏捷开发平台及案例下载(持续更新)-索引、AgileEAS.NET平台开发实例-药店系统-视频教程系列-索引一系列文章进行下载。 如何联系 如果您在使用AgileEAS.NET开发平台中有什么问题,请使用如下几种联系方式或者沟通方式。 1、官方网站: AgileEAS.NET平台:http://www.smarteas.net/ 敏捷软件工程实验室:http://www.agilelab.cn/ 2、AgileEAS.NET平台交流群: AgileEAS.NET平台交流群:120661978(超级群)[新建] AgileEAS.NET平台交流群:125643764(高级群)[新建] AgileEAS.NET平台交流群:147168308(高级群)[新建] 3、系统架构交流群: 系统架构交流群:9105332(高级群)(已满) 系统架构交流群1:124825459(高级群)(已满) 系统架构交流群2:49124441(高级群)(已满) 系统架构交流群3:47025564(高级群)(已满) 链接 AgileEAS.NET平台开发指南-文章索引 AgileEAS.NET应用开发平台介绍-文章索引 AgileEAS.NET平台应用开发教程-案例计划 作者:魏琼东出处:http://www.cnblogs.com/eastjade关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。 本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2011/05/11/2043219.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - ORM体系的改进与ORM的新成员

闲话不说了,接着前面的文章继续向大家汇报AgileEAS.NET 4.0本次重构的内容,AgileEAS.NET ORM体系的完善:本次重构调整了原有ORM的技术体系,并增加了新的Orm设计,同步兼容和支持原有Orm体系,原有的程序代码不经任务改变即可运行在新的平台之上。 有关于AgileEAS.NET原有的Orm体系请参考AgileEAS.NET之数据关系映射ORM与AgileEAS.NET之ORM访问器两篇文章。 本次Orm技术的更新最大的地方是增加了新的Orm对象定义方案,原有的Orm是采用的基于类型于表格====>对象的数据及无数据存储方案: 即原有Orm体系对某一对象的定义需要两个类来完成Table和Entity, Table用于定义实体的元数据及复杂查询业务,Entity用于实现O-R记录的转换,对于具体实体的数据存储在Entity之中,即Entity不存储O-R映射的元数据定义,用于提高性能。 本次重构增加了一个新的ORM对象定义DataEntity,我们姑且称他为数据实现吧,新的Orm围绕DataEntity进行展开,数据及定义如下表所示: 新的ORM对象定义代码如下: 1: /// <summary> 2: /// 实体对象NRCMItem(新农合药品/诊疗目录)。 3: /// </summary> 4: [Serializable()] 5: [Table("dbo.NRCMITEM")] 6: partial class NRCMItem: DataEntity<NRCMItem> 7: { 8: public NRCMItem() 9: { 10: } 11: 12: protected NRCMItem(SerializationInfo info, StreamingContext context) 13: : base(info, context) 14: { 15: } 16: 17: /// <summary> 18: /// 药品内码。 19: /// </summary> 20: [Column("Code","药品内码"),PrimaryKey] 21: public string Code 22: { 23: get; 24: set; 25: } 26: 27: /// <summary> 28: /// 药品分类 。 29: /// </summary> 30: [Column("Item","药品分类"),PrimaryKey] 31: public string Item 32: { 33: get; 34: set; 35: } 36: 37: /// <summary> 38: /// Name 。 39: /// </summary> 40: [Column("Name","Name")] 41: public string Name 42: { 43: get; 44: set; 45: } 46: 47: /// <summary> 48: /// 规格。 49: /// </summary> 50: [Column("Spec","规格")] 51: public string Spec 52: { 53: get; 54: set; 55: } 56: 57: /// <summary> 58: /// 单位 。 59: /// </summary> 60: [Column("Unit","单位")] 61: public string Unit 62: { 63: get; 64: set; 65: } 66: 67: /// <summary> 68: /// 单价。 69: /// </summary> 70: [Column("Price","单¥价?")] 71: public decimal Price 72: { 73: get; 74: set; 75: } 76: 77: /// <summary> 78: /// 报销比例。 79: /// </summary> 80: [Column("Rate","报销比例")] 81: public decimal Rate 82: { 83: get; 84: set; 85: } 86: 87: /// <summary> 88: /// 保内外。 89: /// </summary> 90: [Column("Cate","保内外")] 91: public string Cate 92: { 93: get; 94: set; 95: } 96: 97: /// <summary> 98: /// 甲乙分类。 99: /// </summary> 100: [Column("PClass","甲乙分类")] 101: public string PClass 102: { 103: get; 104: set; 105: } 106: 107: /// <summary> 108: /// 助记码。 109: /// </summary> 110: [Column("InputCode","助记码")] 111: public string InputCode 112: { 113: get; 114: set; 115: } 116: } 117: 新的Orm使用属性定义方式处理O-R的映射定义在运行,为了提高元数据的处理性能,在Orm运行时使用了元数据缓存以提高数据处理效率,同时,新的Orm也吸引了原有Orm技术中的数据索引器技术,以获取更高的数据张载性能,代码如下: 1: /// <summary> 2: /// 实μ体?对?象ó GbCode(国ú标ê码?)。£ 3: /// </summary> 4: [Serializable()] 5: [Table("im.GBCODE"),Index] 6: partial class GbCode: DataEntity<GbCode> 7: { 8: public GbCode() 9: { 10: } 11: 12: protected GbCode(SerializationInfo info, StreamingContext context) 13: : base(info, context) 14: { 15: } 16: 17: /// <summary> 18: /// 目录。 19: /// </summary> 20: [Column("CATEGORY","目?录?"),PrimaryKey] 21: public int Category 22: { 23: get 24: { 25: return this.GetValue<int> ("CATEGORY"); 26: } 27: set 28: { 29: this["CATEGORY"] = value; 30: } 31: } 32: 33: /// <summary> 34: /// 编码。 35: /// </summary> 36: [Column("CODE","编码"),PrimaryKey] 37: public int Code 38: { 39: get 40: { 41: return this.GetValue<int> ("CODE"); 42: } 43: set 44: { 45: this["CODE"] = value; 46: } 47: } 48: 49: /// <summary> 50: /// 名称。 51: /// </summary> 52: [Column("NAME","名称")] 53: public string Name 54: { 55: get 56: { 57: return this.GetValue<string> ("NAME"); 58: } 59: set 60: { 61: this["NAME"] = value; 62: } 63: } 64: 65: /// <summary> 66: /// 排序码 。 67: /// </summary> 68: [Column("SORTCODE","排序码")] 69: public int SortCode 70: { 71: get 72: { 73: return this.GetValue<int> ("SORTCODE"); 74: } 75: set 76: { 77: this["SORTCODE"] = value; 78: } 79: } 80: 81: /// <summary> 82: /// 标准码。 83: /// </summary> 84: [Column("STANDARDCODE","标准码")] 85: public string StandardCode 86: { 87: get 88: { 89: return this.GetValue<string> ("STANDARDCODE"); 90: } 91: set 92: { 93: this["STANDARDCODE"] = value; 94: } 95: } 96: 97: /// <summary> 98: /// 符号。 99: /// </summary> 100: [Column("SYMBOL","符号")] 101: public string Symbol 102: { 103: get 104: { 105: return this.GetValue<string> ("SYMBOL"); 106: } 107: set 108: { 109: this["SYMBOL"] = value; 110: } 111: } 112: 113: /// <summary> 114: /// 输入码。 115: /// </summary> 116: [Column("INPUTCODE1","输入码")] 117: public string InputCode1 118: { 119: get 120: { 121: return this.GetValue<string> ("INPUTCODE1"); 122: } 123: set 124: { 125: this["INPUTCODE1"] = value; 126: } 127: } 128: 129: /// <summary> 130: /// 输入码 。 131: /// </summary> 132: [Column("INPUTCODE2","输入码")] 133: public string InputCode2 134: { 135: get 136: { 137: return this.GetValue<string> ("INPUTCODE2"); 138: } 139: set 140: { 141: this["INPUTCODE2"] = value; 142: } 143: } 144: } 145: 以上以不同风格的代码生成方式,在新的对象设计器中都提供了支持,通过生成器解决方案选择选项之中进行不同的选择: 新的Orm中采用属性标记的方式定义O-R元数据,供提供如下属性: Column属性 标记的实体属性之上,用于定义实体属性与数据库字段的关联关系。 PrimaryKey属性 标记的实体属性之上,用于定义特定的某个列是否为数据库表的主键。 Identity属性 标记的实体属性之上,用于定义特定的某个列是否为自动增长列。 DefaultValue属性: 标记的实体属性之上,用于定义特定的某个列的默认值。 DataSize属性 标记的实体属性之上,用于定义特定的某个列的的数据范围,包含长度及小数位数。 新的ORM对象DataEntity的CRUD操作和原有Orm实例Entity类似,即采用IOrmAccessor的CRUD操作方法: 1: /// <summary> 2: /// 读数据实体。 3: /// </summary> 4: /// <typeparam name="T">实体类型。</typeparam> 5: /// <param name="dataEntity">数据实体。</param> 6: /// <returns>从数据库读出的数据对象。</returns> 7: T Read<T>(DataEntity<T> dataEntity) where T : IDataEntity; 8: 9: /// <summary> 10: /// 插入数据实体。 11: /// </summary> 12: /// <param name="dataEntity">数据实体。</param> 13: void Insert<T>(DataEntity<T> dataEntity) where T : IDataEntity; 14: 15: /// <summary> 16: /// 修改数据实体?。 17: /// </summary> 18: /// <param name="dataEntity">数据实体。</param> 19: void Update<T>(DataEntity<T> dataEntity) where T : IDataEntity; 20: 21: /// <summary> 22: /// 删除数据实体?。 23: /// </summary> 24: /// <param name="dataEntity">数据实体?。</param> 25: void Delete<T>(DataEntity<T> dataEntity) where T : IDataEntity; 26: 以及实体基类DataEntity<T>所提供的CRUD方法: 1: /// <summary> 2: /// 刷新当前数据对象ó。 3: /// </summary> 5: void Refresh(); 6: 7: /// <summary> 8: /// 刷新当前数据对象。 9: /// </summary> 11: void Read(); 12: 13: /// <summary> 14: /// 保存当前数据对象。 15: /// </summary> 17: void Save(); 18: 19: /// <summary> 20: /// 插入当前数据对象。 21: /// </summary> 23: void Insert(); 24: 25: /// <summary> 26: /// 更新当前数据对象。 27: /// </summary> 29: void Update(); 30: 31: /// <summary> 32: /// 从数据库中删除当前数据对象ó。 33: /// </summary> 35: void Delete(); 36: Orm之中的除CRUD之后的很大一部业务是数据的查询服务,AgileEAS.NET平台中对于新的Orm对象DataEntity提供了两种数据查询实现,第一种查询实现方法是采用原有Orm技术中的查询思想,采用动态组合生成的查询条件树进行数据查询,DataEntity<T>之中定义了如下数据选择操作: 1: /// <summary> 2: /// 实体查询。 3: /// </summary> 4: /// <param name="condition">数据查询条件。</param> 5: /// <returns>数据实体集合。</returns> 6: public static IList<T> Select(Condition condition); 同时在新的Orm技术之增加了对Linq技术的实现,大大的方便了数据查询的操作,有关于这部分内容,我将会在下一篇文章中给大家详细的介绍。 下载说明 有关于平台最新版本的最新发布版本的程序集、类库手册、相关资料,请大家从AgileEAS.NET平台的官网http://www.smarteas.net/进行下载,官网设有独立的下载页面,从这里下载:官网下载。 CallHot写过一个系列的基于AgileEAS.NET平台的开发案例,请大家通过AgileEAS.NET平台开发Step By Step系列-药店系统-索引及AgileEAS.NET敏捷开发平台及案例下载(持续更新)-索引、AgileEAS.NET平台开发实例-药店系统-视频教程系列-索引一系列文章进行下载。 如何联系 如果您在使用AgileEAS.NET开发平台中有什么问题,请使用如下几种联系方式或者沟通方式。 1、官方网站: AgileEAS.NET平台:http://www.smarteas.net/ 敏捷软件工程实验室:http://www.agilelab.cn/ 2、AgileEAS.NET平台交流群: AgileEAS.NET平台交流群:120661978(超级群)[新建] AgileEAS.NET平台交流群:125643764(高级群)[新建] AgileEAS.NET平台交流群:147168308(高级群)[新建] 3、系统架构交流群: 系统架构交流群:9105332(高级群)(已满) 系统架构交流群1:124825459(高级群)(已满) 系统架构交流群2:49124441(高级群)(已满) 系统架构交流群3:47025564(高级群)(已满) 链接 AgileEAS.NET平台开发指南-文章索引 AgileEAS.NET应用开发平台介绍-文章索引 AgileEAS.NET平台应用开发教程-案例计划 作者:魏琼东出处:http://www.cnblogs.com/eastjade关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。 本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2011/05/06/2038618.html,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册