本系列我将主要通过图片和少许文字讲解通过个人自研的PowerDotNet进行快速开发平台化软件产品。

PowerDotNet不仅仅是包含像Newtonsoft.Json、Dapper、Quartz、Redis、ZooKeeper、ElasticSearch、ETCD、Autofac、JWT、MyBatis、EF、RabbitMQ、ObjectPool、Hessian、Thrift、gRPC、SuperSocket等流行的类库和组件,像ABP、SpringBoot之类的开发框架套件和工具,它还是一整套完善的前后端(支持传统BS和CS结构,也支持H5和APP)快速开发和简易运维解决方案。它的最大优势是深刻理解了一线平台开发和业务开发人员的核心诉求,在此基础上进行提取和抽象,并且实现了公共组件核心功能开发,提供了良好的操作UI界面,对开发和运维人员非常友好。

PowerDotNet致力于系统应用开发服务化、平台化、自动化和产品化,到目前为止已成功开发出服务治理、配置中心、任务调度、CRM、应用和系统管理、集群管理、服务器管理、域名管理、数据同步、日志管理、文件管理、消息管理、支付平台等公共服务产品,开箱即用。整个代码实现都朝着“简单高效”、“高内聚”、“低耦合”、“兼具功能和性能”、“优雅漂亮有品位”的方向努力,所有核心逻辑都有单元测试覆盖 ,不拘泥于语法糖和框架,务实不炫技,面向接口编程 ,可扩展性非常强。

PowerDotNet是我个人多年软件开发实践和架构设计经验的汇总,很多都经过生产环境的考验,我认为还是相当靠谱的,敝帚自珍,与同道中人分享,不亦乐乎。

第一篇从最简单的基础数据平台开始说起。

一、需求来源

现代软件基本离不开各种各样的基础数据。比如全局都可以使用的区域、证件类型、二字码、三字码、通用字典等数据;和业务有点关联的公司、组织、级别等数据;和业务紧密关联的业务基础数据,如商品主数据等。

对这些数据的管理,是非常费力不讨好的事情,因为很多人,主要就是各种高大上的管理人士,认为这些对提升业务没啥价值。

但是,设计和管理不好,后期又会造成开发难题。很多公司基础数据散布在各种子系统中,连保证数据的基本正确统一都做不到,所以必须重视这些基础但是看上去没啥技术含量的东西。

二、系统抽象

平台,可以理解为一个完备的业务系统,而系统由单个或多个应用(独立进程)构成。

本文不讨论系统和应用的关系,只按照自己的正常理解来开发业务系统。

具体到基础数据平台的开发,业务功能看上去比较简单,主要就是数据的CRUD而已。

按照正常需求理解,我们可以肯定至少需要开发两个应用:

1、带界面的管理后台

2、不带界面的对外开放的接口

不需要复杂冗余的架构设计,简易分层架构如下(截图只是冰山一角,实际项目比这复杂多了):

三、管理后台

具体CRUD实现就不看了,本文技术选型为Asp.Net MVC,看几个截图就好。

1、区域管理

区域管理支持大洲、国家或地区、省、市、区县、乡镇或街道、社区或居委会或村委会这几级,满足了大部分公司常见的区域功能需求。

2、IP地址

3、证件类型

4、通用字典

四、WebApi接口

接口也好说,简单定义几个查询接口,集成流行的Swagger。

有人可能会说,你这个WebApi接口命名很不讲究,不规范,应该多用名词少用动词,应该注意区分GET、POST、PUT、DELETE等方法,还要注意缓存blablabla。

本文不讲WebApi命名,后续文章将介绍服务治理,到时候你会发现WebApi起名真的不重要,服务治理平台彻底解决REST API命名难题,开发人员只需要关心业务逻辑实现就好。

WebApi还可以开发成使用OWIN或者其他非IIS形式的宿主,截图里WinService目录使用的是Windows服务实现webapi宿主。下面示例截图是WinForm宿主的WebApi:

注意,真正的基础数据平台功能比这个复杂太多太多了,单纯一个业务主数据就够喝一壶的,本文截图只做讲解用。

五、其他RPC协议接口

在.NET开发框架下,我们基本都会熟练写出基于HTTP协议的WebApi、WebService、WCF甚至上古时期的.NET Remoting接口,以及个人实现的RPC项目Power.Apix,咩哈哈。

随着.NET Core的大流行,很多其他RPC协议的接口被广泛使用,如Hessian、Thrift、gRPC等。

PowerDotNet自动集成了Hessian、Thrift、gRPC协议的接口解决方案,实现起来几个模板类就可以搞定。

PowerDotNet让不同协议的接口开发变得无比简单易用。配合后续要讲到的服务治理,你就知道PowerDotNet的优秀设计与实现是多么的富有创新,咩哈哈哈,有点过分自信了。

本文重点不是讲这些协议如何集成,后续有时间再说。

六、.NET Core实现

.Net Core已经越来越成为.Net开发者的首选开发平台,作为资深开发人员,当然更要积极拥抱.Net Core。虽然PowerDotNet积累的历史比较久远,但是在.Net Core1.0时代就有一个.NET Core实现计划PowerDotNetCore,目前主要实现是基于.NET Core2.0,正在开发完善当中。

实现WebApi接口或者管理后台页面非常轻松。

后续有机会再介绍PowerDotNetCore。

七、提取可复用功能

除了WebApi,我们还可以开发其他形式的API服务,比如WCF、WebService、.Net Remoting、Thrift、gRPC等。

开发不同形式的应用时,我们发现,还可以抽象出应用(进程)上公共的可复用的部分。比如,这些应用都需要连接数据库,都需要读取配置文件,都需要部署至测试、生产等环境,以及无处不在的日志记录等。

那么这些应用上公共可复用的部分是否能够抽象出来,供更多的应用开发复用?答案是显而易见的。

PowerDotNet在复用公共功能、可维护性、可扩展性上有更高级别的抽象。

下面几篇文章将介绍PowerDotNet实现的应用可高度复用的模块和组件,这些模块和组件将独立设计成为公共服务系统。

PowerDotNet平台化软件架构设计与实现系列(01):基础数据平台的更多相关文章

  1. PowerDotNet平台化软件架构设计与实现系列(08):缓存平台

    几乎所有后端应用都会或多或少用到缓存,尤其是分布式缓存服务,以及和本地缓存构造的二级缓存.根据我们一贯的节约代码的风格,为了复用的目标,抽象出缓存平台,进行缓存管理. 考虑到很多公司都会自己造或者直接 ...

  2. PowerDotNet平台化软件架构设计与实现系列(11):日志平台

    所有后端应用几乎都会记录日志,日志系统可以统一抽象出来提供服务. 最近被Log4j2的安全漏洞刷屏了,作为开发人员的我只能咩哈哈几次表示日志处理太难了,只有折腾过的人才知道这里面的艰辛啊. 在实现Po ...

  3. PowerDotNet平台化软件架构设计与实现系列(12):HCRM人员管理平台

    技术服务于业务,良好的技术设计和实现能够大幅提升业务质量和效率. PowerDotNet已经形成了自己的开发风格,很多项目已被应用于生产环境,可行性可用性可靠性都得到了生产环境验证. 编程是非常讲究动 ...

  4. PowerDotNet平台化软件架构设计与实现系列(09):消息平台

    消息队列已经几乎成为大中型高吞吐应用的标配,继续根据我们一贯的节约代码的风格,为了复用的目标,抽象出消息队列平台,进行消息队列管理. 环境准备 1.(必须).Net Framework4.5+ 2.( ...

  5. PowerDotNet平台化软件架构设计与实现系列(10):文件平台

    很多业务系统少不了需要进行文件管理,比如各种图片.excel.pdf.压缩包等等,为了高度可复用,我们抽象出文件平台,加强对文件进行管理. PowerDotNet文件平台目前支持阿里云OSS.Fast ...

  6. PowerDotNet平台化软件架构设计与实现系列(03):系统应用平台

    为了复用和解耦,快速开发更多的系统和应用,我们对自己经常说的"系统"和"应用"进行更高级的提取和抽象. 十多年前入行,辗转至今,写过很多很多应用,个人喜欢分门别 ...

  7. PowerDotNet平台化软件架构设计与实现系列(02):数据库管理平台

    为了DB复用和简化管理,我们对常见应用依赖的DB模块进行更高级的提取和抽象. 虽然一些ORM可以简化DB开发,但是我们还是需要进行改进和优化,否则应用越多,后期管理运维越混乱. 根据常见开发需要,数据 ...

  8. PowerDotNet平台化软件架构设计与实现系列(05):ETCD分布式键值存储平台

    ETCD目前在PowerDotNet已经被用于注册中心和配置管理(常见的配置中心在PowerDotNet中仅仅是一个小小的模块而已)中,作为基础设施的重要组成部分,ETCD的重要性不言而喻. 本文简单 ...

  9. PowerDotNet平台化软件架构设计与实现系列(13):应用监控平台

    本文再写一篇和具体业务逻辑几乎无关的公共服务应用监控平台.PowerDotNet自研的应用监控平台系统,是服务治理的重要拼图,和服务治理平台配合使用效果更好. 监控开源产品非常丰富,站在巨人的肩膀上, ...

随机推荐

  1. Python基础之tabview

    以前写过界面,但是没有记录下来,以至于现在得从头学习一次,论做好笔记的重要性. 现在学习的是怎么写一个tabview出来,也就是用tkinter做一个界面切换的效果.参考链接:https://blog ...

  2. 深入刨析tomcat 之---第4篇 tomcat4.0连接池 实现原理

    writedby 张艳涛

  3. vscode源代码管理(vscode报错 未找到Git,请安装Git,或在"git.path" 设置中配置)

    vscode源代码管理(vscode报错 未找到Git,请安装Git,或在"git.path" 设置中配置) 直接上图,电脑上已经安装git,由于vscode没有找到git,所以v ...

  4. 微信JSSDK的使用步骤

    步骤一:绑定域名 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名".(登录后可在"开发者中心" ...

  5. 小技巧 | Get 到一个 Web 自动化方案,绝了!

    1. 前言 大家好,我是安果! 无论是 Chrome,还是 Firefox 浏览器,它们的强大性在很大程度上都是依赖于海量的插件,让我们能高效办公 那我们是否可以编写一个插件,让浏览器自动化完成一些日 ...

  6. 终于彻底搞清楚了spin-lock 之一次CPU问题定位过程总结

    首先这个问题,我只是其中参与者之一.但这个问题很有参考意义,特记录下来. 还有我第一次用"彻底"这个词,不知道会不会有人喷?其实,还有一些问题,也不是特别清楚.比如说什么是CPU流 ...

  7. Mybatis学习笔记-分页

    为何要分页 减少数据处理量 便于前端展示数据 使用Limit分页 语法结构 SELECT * FROM user LIMIT startIndex,pageSize; SELECT * FROM us ...

  8. RHCSA_DAY12

    Linux软件包的分类 inghu 源码包 二进制包(RPM包) 源码包特点 源码包缺点:安装过程麻烦,需要用户手动编译,需要手动解决软件包的依赖关系 源码包优点:软件源代码开放,允许用户二次开发,安 ...

  9. 基于 Clusternet 与 OCM 打造新一代开放的多集群管理平台

    背景 随着 5G.物联网设备的爆炸性增长以及智能终端不断增强的计算能力,带来了前所未有的数据量,传统的中心集中式计算捉襟见肘."新基建"战略的实施,工业互联网.车联网/自动驾驶.智 ...

  10. Docker命令图

    attach #当前shell下 attach连接指定运行镜像 build #通过DockerFile 定制镜像 commit #提交当前容器为新的镜像 cp #从容器中拷贝指定文件或者目录到宿主机中 ...