2007年大学毕业后,先后涉足(电信、电子商务、教育、医疗、工程建筑、项目管理、房产)等行业,目前有比较丰富的技术及行业经验,技术方面涉及(Java、Go、.NET、Python、设计模式、系统架构、PM管理流程、软件工程、敏捷开发、SOA、云计算、大数据、区块链等
一、开篇 上一篇《HRMS(人力资源管理系统)-从单机应用到SaaS应用-系统介绍》我们已经详细的分析了HRMS系统具备的功能,并且从HRMS系统的概念、系统功能、HR行业管理现状及痛点、发展趋势及行业前景、行业内的服务提供商情况、HRMS系统的建设意义及价值等方面进行了系统化的分析梳理。
上周发布的《2018,全新出发(全力推动实现住有所居)》文章,其中记录了个人在这5年过程中的成长和收获,有幸认识了不少博客园的朋友,大家一起学习交流,在这个过程当中好多朋友提出SaaS系统如何设计,架构方面如何下手,在这5年的过程中我参与规划设计了很多的SaaS系统其中有不少的坑和痛苦的经验,特别是在架构设计方案,所以想把自己的经验分享出来,我思来想去如何能够完整呈现设计的过程呢?后来思索来着,还是通过实例干货来讲解会更有效。
一、前言 大家好,接近一年的时间没有怎么书写博客了,一方面是工作上比较忙,同时生活上也步入正轨,事情比较繁多,目前总算是趋于稳定,可以有时间来完善以前没有写完的系列,也算是对自己这段时间工作和生活上总结,同时也加深下自己对架构和 设计方面的理解,由于本人的写作水平有限,所以在书写的深度和书写的格式上还有很多的缺点,还希望大家多多指出。
回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Prism框架来构建基础的应用框架,并且如何来设计项目的架构和模块,下面我们就来一步步开始吧。
回顾 上一篇,我们简单介绍了几个基本的控件,本节我们将讲解每个控件的样式的自定义和数据模板的自定义,我们会结合项目中的具体的要求和场景来分析,给出我们实现的方案和最终的运行效果。 本文大纲 1、控件模板及数据模板 2、ListBox深度定制模板。
开篇 AgileEAS.NET5.0平台,预计这个月的中旬就会发布,这次发布里面相比上次的AgileEAS.NET4.0的版本主要的变化是以下几块内容: 本文,主要是针对其中的工作流这块,进行讲述基本的说明,这个月的中旬,大家就可以使用了,当然由于是第一个版本,可能部分功能还不是很完善,当然欢 迎,大家提出意见和建议,本人表示郑重的感谢。
开篇 首先、非常感谢大家的支持和厚爱,才有了这个系列,WF4.0也是微软比较主推的技术之一,工作流未来必火,是未来企业信息化的发展方向和道路,所以对工 作流掌握,对我们来说,也就是必须掌握的一个技能之一,学好了工作流,才能更好的改进业务流程或者是企业内部的流程等。
开篇 上一篇《WorkFlow设计篇Step.3—异常处理-WF4.0》,我们讲述了工作流的异常处理活动用法,其实还有其他的方式,例如通过CodeActivity的引发等等,本篇我们主要是讲述ReThrow活动的使用,并且讲述 如何通过CodeActivity来引发异常。
开篇 上一篇《WorkFlow设计篇Step.2—传参的用法-订单金额的处理(续)-WF4.0》,我们讲述了工作流的传入与传出参数的用法,其实还有其他的方式,例如通过Cod eActivity的In与Out参数等等,后面我们会进行说明的,本篇我们就会开始讲述工作流中的异常处理活动的用法,如何在工作流中处理tryCatch异常。
开篇 之前的篇幅,我们主要是讲述了《WorkFlow入门篇》的一些内容,其实主要是基础的workflow的用法,我们并没有深入的说明,从本篇开始,就开始讲述一些设 计篇的内容,比如代码活动等等,更深入一些的内容,并且结合一些业务流程来说明WF的用法。
开篇 之前我们讲述了控制流与WF4.0的基础。下面我们来看看如何使用控制台的形式来使用WF4.0、比如我们有时候不能通过设计器来设计工作流时,如何通过代码 的方式,来构建WF4.0应用程序,可能这就会为我们自定义工作流设计器等方面提供帮助。
开篇 在之前发布的版本当中,一些热心的朋友也都对平台的一些功能和界面等方面提出了自己的意见和建议,也有不少的朋友询问是否开源,目前平台是不开源,但是永久免 费,不管是商业应用还是个人等方面都是不会有任何费用的问题。
开篇 之前的系列,都是从贴图,贴代码的形式来跟大家说明,本篇就是把开发药店系统的过程中的具体过程和细节,通过视频的形式来跟大家分享,当然 可能由于我的思路也是有点跳跃,如果大家有什么不明白的地方,还请大家指出,每个视频都是比较的简短,过程也是非常的简单。
开篇 在前面的章节中,我们说明了如何使用AgileEAS.NET敏捷开发平台俩开发药店系统,但是我们没有从总体上去说明AgileEAS.NET的一些功能,我们都是在细节上讲述了 一些该平台的相关特性,我们在药店系统的开发过程中,只是包含了该平台的大部分功能,还有一些功能,并没有使用到,可能我们后续会继续讲述这些功能。
开篇 有很多朋友问我,AgileEAS.NET平台的登陆页面的资源文件,包括平台的一些主要的资源文件是否可以替换呢?我的答案是肯定的,因为有很多的朋友,使用这个系统开 发的时候,如果不能替换,那么显示的还是平台的图片,可能你们就想,就算功能强大,也不使用这个平台来开发了,为啥呢?因为可能开发出来的东西给使用者的感觉是系 统的登陆或者图片与功能不符合,感觉挺奇怪的,所以本篇特别说明如何来替换现有的资源文件,来达到自己设计的效果,这样就可以完美替换。
开篇 上篇我们讲述了如何完成分布式访问服务及普通访问模式的切换,下面我们就来分析下如何实现远程的应用服务器部署,客户端实现智能的更新,我们的具体的实现思 路,可以通过如下的图形来展示: 下面我们就来分析下具体的配置过程,后续我们会分析智能客户端的具体实现过程和思路,本篇就不讲述了,后续的讲述AgileEAS.NET的每个模块的实现原理的时候, 会跟大家详细的说明。
开篇 前面我们已经将系统的配置及模块的配置配置完毕,并且可以正常的运行和访问了,下面我们来看看我们采用分布式部署的话,如何来做呢?因为可能我们的应用服务器 与数据库服务器不在一台计算机上,为了后期的一些扩展和应用服务器的扩容等,我们希望实现这样的负载均衡等方面的优化等等,所以提出分布式部署应用服务的方式,那 么我们本篇就是解决这方面配置的问题的,我们下面就来一步一步的讲述如何部署分布式应用服务的完整过程。
开篇 上篇我们讲述了模块注册的详细的步骤和过程,那么本篇我们来看看权限分配及权限设计的具体的思路,我们来整理下权限设计的简单思路,虽然说权限设计时没有考虑 数据权限的控制,但是功能权限方面来说,使用这样的配置方式很简单也较灵活,能够满足大多数功能权限的要求,平台本身提供的也是功能权限的配置和管理,置于具体的 数据权限模块,我这里是给出思路,置于具体的开发和实现,不同的企业应用程序的关注点不同,无法做出通用的数据权限组件。
开篇 大家都比较关心,当我们开发完毕后,如何发布应用程序和部署应用,本篇我们就来讲述下功能的发布,前面我们已经就如何开发系统及工具的使用,做了一些简单的描 述和说明,相信大家对其中的功能的使用,已经有了比较简单的了解,下面我们就将如何在我们开发完毕后,我们来使用资源管理平台来注册模块,并且配置模块的访问权限 和角色,来分配账户,不同的账户对指定的模块具有指定的访问权限,完成模块的权限控制。
开篇 有不少的朋友下载到该药店系统的数据库后,不会还原数据库,由于当时我备份的时候并没有把SQL2005的mdf与ldf文件直接放出下载,而是通过SQLServer2005的备份功 能导出的bak文件,下面我们就来说明下如何还原该数据库。
开篇 上篇我们讲述了报表开发的独立开发与基于平台的开发二种方式,相信大家已经对报表开发有了一定的了解,那么我们本篇将会巩固大家对报表开发的知识,我们这里提供一 个我们平时在项目中应用到的一些关于报表开发的模块,来尽可能的降低开发报表的成本和重复工作,尽量将重复的东西进行抽取,这样能够很方便的进行开发,下面我们来看看这 些报表开发的简单经验吧,当然可能我分享的经验不一定是最好的,当然如果你有更好的经验都可以分享出来,小弟谢过。
开篇 我们上篇讲述了如何基于平台的报表管理组件来进行报表的管理,我们并没有说明如何在项目中如何调用,我们设计好的报表。下面我们就来看看,我们如何来使用我们 设计好的报表,一种是直接使用平台原生支持的报表服务,还有一种是我们单独设计实现的报表服务,也就是所谓的脱离现有平台的限制,我们单独使用报表设计器来完成报 表开发工作。
开篇 前面我们讲述了药店系统的开发流程,并且也讲述了如何开发一个基础模块,下面我们来看看,如何开发一个报表, 因为我们在药店系统中最常用的功能之一就是打印功 能了,AgileEAS.NET平台本身已提供了报表服务,通过这些报表组件,我们就能很方便的设计报表和打印报表,并且很方便的进行报表的迁移和部署。
开篇 我们都知道开发一个软件必须要有开发的背景和特殊的需求等等,我们就来分析我们开发该系统的项目背景和开发该项目的目的。下面我们来分析下开发药店系统的目的 及可行性研究分析,对现有平台构建该项目的风险性等进行分析,可行性方案的分析。
开篇 上篇,我们分析了,功能需求和非功能性的需求,本篇我们就来看下,如何设计数据库,当然数据库的设计也是有一些技巧性而已,不过大家经常做数据库设计的朋友都 知道,如果我们的数据库设计完全符合数据库要求的第三范式的话,那么我们可能在通过ORM框架来使用这个数据库设计的时候,会有不方便的地方,因为ORM在多表关联 上的处理或者说是支持的并不好,所以我们常常在数据库设计的时候,会允许在表中存在冗余字段,这样我们能够在查询的过程中可以很方便的读取数据,而不用关联查询, 当然也有不错的方案去处理这方面的需求,比如通过视图等。
开篇 我们知道我们正常的开发流程是从需求-设计-开发-测试-部署等这样的瀑布型的模式或者是瀑布模式的变种等,但是不管是如何的开发模式,前提是必须把需求确定才能从 需求中分析出要开发的用户的功能性需求和非功能性需求,这样我们才能进行后续的开发工作。
开篇 上篇我们讲述了UI层的分析,那么本篇我们就讲述下我们在做CS应用程序的过程中的一些技巧性的东西,可能我这里总结的只是我再开发本药店系统中应用的到的一些小 技巧,并不代表全部,肯定还有很多的其他方面的技巧,大家都可以分享一下,我这里提出额也谈不上技巧,更多的是使用设计模式方面的总结吧。
介绍 上一篇我们给出了AgileEAS.NET的关于Bll层的实现原理和Bll层的写法,我们可以在实际的开发过程中更深入的了解和实践,本篇我们就来讲述下UI层的实现原理和相关的 技巧,可能会和之前讲述的环境配置部分内容会有小部分的冲突吧,不过应该本篇讲述的更具有原理方面的内容,本文会讲述资源管理平台如何通过插件+平台的思路来实现这 种资源化的管理平台的原理和技术内幕。
介绍 上篇我们分析了AgileEAS.NET平台的DAL层的设计与相关的使用说明分析,本篇我们来分析下业务逻辑层/服务层的设计与分析,并且分析下如何抽离单独的业务逻辑 层,分离出单独的分布式访问服务支持。
介绍 前面的大量的篇幅已经讲述了,关于系统的配置及如何使用平台提供的相关开发工具来进行应用功能模块的开发,本篇将会开始讲述数据访问层中的相关设计与如何使用 AgileEAS.NET代码生成器生成的DAL层基础之上,进行相关的开发及开发过程中的一些限制。
介绍 上一篇我们讲述了关于如何搭建一个业务逻辑层与UI层中应该注意的一些细节和过程,本篇将会将UI层中具体的应用程序功能实现部分的过程及代码放出,供大家参考, 当然可能由于本人水平邮箱或者表达能力较弱,大家如果有什么不明白的地方或者不是特别清楚的地方,还请指出。
介绍 上一篇我们讲述了《AgileEAS.NET平台开发实例-药店系统-准备开发环境(上)》将生成的解决方案进行相关配置。本篇我们将会开始讲述如下内容:如何基于现有的解决 方案来搭建一个可测试的运行环境,并且我们新建一个简单的例子,通过例子来说明我们如何来开发一个新的功能模块。
介绍 本篇将会讲述如何使用AgileEAS.NET敏捷开发平台来进行药店系统的开发,首先我们需要根据需求文档来设计出药店系统的系统架构,才能继续进行后续的开发工作,整 理好架构后,然后一步步的完成具体的详细设计,数据库建模等,这样的完整步骤后,就可以开展具体的编码工作了,我们首先来看看根据药店系统的一些功能性的需求和非 功能性的需求来决定系统的架构设计,并且分解AgileEAS.NET平台已提供的相关功能来结合分析。
开篇 上一篇我们主要是讲述了如何根据数据库原型设计器提供的相关功能来构建ORM提供的相关信息,例如根据数据库与实体对象之间通过数据原型来进行双向的映射。本篇 我们将会根据上篇《AgileEAS.NET平台开发实例-药店系统-数据库建模》生成的相关解决方案的基础上来进行开发。
介绍 为了方便大家查看和学习AgileEAS.NET敏捷开发平台相关的文章,特别整理一个索引,我会尽快的完善相应的系列,本系列将会已“药店系统”为 例,从需求-最后的部署全过程的使用说明,当然由于自身对平台还有不熟悉的地方,可能还存在部分理解有误或者理解不深刻的地方,还请大家批评指 出,当然如果您有更好的改进意见或建议,请提出来。
开篇 上面我们讲述了,关于AgileEAS.NET环境的搭建,环境搭建好了,我们就可以进行相关的数据库原型设计了,平台提供了相关的数据库模型设计器工具,根据模型来生成 数据库创建表的脚本与ORM映射部分中的实体的相关代码,从而让我们在开发的过程中代码能够保持一致,并且不会出现一些因为笔误或者其他主观原因影响的代码难维护 性。
介绍 AgileEAS.NET应用开发平台,简称EAS.NET,是基于敏捷并行开发思想以及.NET构件技术而开发的一个应用系统快速开发平台,用于帮助中小型软件企业建立 一条适合快速变化的开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的,AgileEAS.
一、开篇 在之前的篇幅中,我们讲述了ORM的step by Step来讲述ORM的实现方案,那么下面我们来讲述下ORM关于我们前面的设计方案的一些过程改进和 优化,包括我们在前面的ORM中,有很大的一部分内容,我们并没有考虑或者想到的内容。
开篇 很久没有写文章了,之前开了太多的系列,一方面是由于自己对于工作中的思考,另一方面是自己在业务时间中的对知识的总结,这里也是比较抱歉,因为之前开的系列,一直都是 开,完整写完的不多,这里实在是对不住大家了,我也是想等过年期间好好的整理下,这些系列和思路,将要写的内容,都梳理...
为了方便大家查看相应的文章,特别整理一个所以,我会尽快的完善相应的系列,希望大家多多提出宝贵意见和建议,我会一如既往! 1、Step by Step-构建自己的ORM系列-开篇 2、Step by Step-构建自己的ORM系列-数据访问层 ...
一、上篇回顾 自从上次《网站性能优化之应用程序缓存-中篇》得到不少园友的支持和鼓励,并且提出了不错的思路来实现我们中篇中提到的缓存策略,那么我将会结合.NET 本身内置 的AOP的方式来跟大伙讲述和共同分析下缓存策略的简单实现,那么我们通过配置文件或者自定义配置文件来完成缓存策略的配置。
一、上篇回顾 通过上篇的讲述,我们知道装饰模式,特别适合对某个类型的对象,动态的增加新的职责,应用程序就像使用原来的对象一样使用对象新增的装饰 后的功能,装 饰模式就好像是穿了一层层的外壳,这样的方式避免了通过继承来为类型添加新的职责的形式可取,通过继承的方式容易造成子类的膨 胀,但是当装饰类太多的时 候,也是个难以维护的问题,至少是在装饰对象的时候,我们可能需要多步操作来完成对象的装饰,这时候我们可以同上面 提出的改进的方案,来完成自动配置装饰 模式,记录操作模式的状态,可以进行有效的回滚操作,以完成撤销操作。
一、上篇回顾 通过上篇的简单描述,我们知道了桥接模式主要是为了解决,一个对象的多个维度的变化因素的变化太快,难以控制的问题,我们通过将每个维度 的变化因素进行抽象, 然后我们的对象只要依赖于抽象即可,具体的实现调用我们不关心,通过对象组合的方式,我们就能组合出我们想要的对象。
一、上篇回顾 上篇我们讲述了比较常用的适配器模式,并且分析了适配器的一般使用场景: 1、我们在使用第三方的类库,或者说第三方的API的时候,我们通过适配器转换来满足现有系统的使用需求。
一、上篇回顾 通过上篇的简单讲解,我们知道了,组合模式意图是通过整体与局部之间的关系,通过树形结构的形式进行组织复杂对象,屏蔽对象内部的细节,对 外展现统一的方式来操作对象,是我们处理更复杂对象的一个手段和方式。
一、开篇 距离上篇《Step by Step-构建自己的ORM系列-开篇》的时间间隔的太久了,很对不住大家啊,主要是因为有几个系列必须提前先写完,才能继续这个系列,当然我也在 写这几个系列的过程中,对ORM这个系列中的原来的实现的想法有了新的认识和改进,当然这些都不是说是很先进的思想或者认识,也可能是大家见过的思路吧,希望后面我能在 写设计模式系列的过程中,穿插讲解ORM系列,当然我的这个构建的系列,也只能说是很简易的,自己平时开发个小应用工具或者什么的,可能用他,因为是自己开发的嘛,毕竟 使用起来还是比较顺手的!符合自己的操作习惯嘛。
一、上篇回顾 我们上篇主要讲述了结构型模式中的外观模式,外观模式作为结构型模式中的一个简单又实用的模式,外观模式通过封装细节来提供大粒度的调用, 直接的好处就是,封装细节,提供了应用写程序的可维护性和易用性。
一、上篇回顾 上篇我们主要讲述了创建型模式中的最后一个模式-原型模式,我们主要讲述了原型模式的几类实现方案,和原型模式的应用的场景和特点,原型模式 适合在哪些场景下使用呢?我们先来回顾一下我们上篇讲述的3个常用的场景。
一、上篇回顾 上篇创建者模式中,我们主要讲述了创建者的几类实现方案,和创建者模式的应用的场景和特点,创建者模式适合创建复杂的对象,并且这些对象的每 个组成部分的详细创建步骤可以是动态的变化的,但是每个对象的组装的过程来说可能是相对固定的或者说是对象的创建的过程是固定的,那么通过创建者 模式可以很好的解决这类复杂对象的创建,而在我们的生活中或者是项目中可能会有这个方面的需求,那么使用创建者模式无疑是好的选择。
一、上篇回顾 上篇我们主要讲述了抽象工厂模式和工厂模式。并且分析了该模式的应用场景和一些优缺点,并且给出了一些实现的思路和方案,我们现在来回顾一下: 抽象工厂模式:一个工厂负责所有类型对象的创建,支持无缝的新增新的类型对象的创建。