本系列我将主要通过图片和少许文字讲解通过个人自研的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. 数据结构与算法-排序(二)选择排序(Selection Sort)

    摘要 选择排序的逻辑是先遍历比较出序列中最大的,然后把最大的放在最后位置. 遵循这个逻辑,用代码实现时,做到1.减少比较次数之外,这里引入一个新的指标 - 稳定性,2.保证排序过程中的稳定性也是一个优 ...

  2. 第一篇 -- Go环境的搭建以及Hello World程序编写

    VS Code的下载和安装 1. 下载链接(本人下载版本VSCodeUserSetup-x64-1.57.0.exe) https://code.visualstudio.com/download 友 ...

  3. python -- 负数平方根-虚数的使用

    负数的平方根是虚数. 不能使用sqrt,因为它只能处理浮点数,而虚数是完全不同的--这也是由另外一个叫做cmath(即 complex math, 复数)的模块来实现这些功能的原因. >> ...

  4. [Vue warn]: Invalid prop: type check failed for prop "percentage". Expected Number, got Null

    Vue组件报错 <ElProgress> at packages/progress/src/progress.vue 用了element组件 绑定数据时后端给我们传的参数为null,所以组 ...

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

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

  6. Sth about Educational DP Contest

    Contest Website : atcoder.jp/contests/dp \[\begin{array}{c|C|c|c} TaskNum & TaskName & Statu ...

  7. DevOps基础的认识与工具实践

    什么是DevOps DevOps 强调的是高效组织团队之间如何通过自动化的工具协作和沟通来完成软件的生命周期管理,从而更快.更频繁地交付更稳定的软件 Devops 包含了敏捷开发,测试,运维 DevO ...

  8. pwnable.kr之brainf*ck

    pwnable.kr之brainf*ck 今天又是被难倒的一天Orz,个人感觉pwnable.kr上的题都比较剑走偏锋,仔细做过去,一定会有很大的收获. 不多说了,今天看的是第二关的第一道题:brai ...

  9. Java数组04——多维数组

    多维数组  package array; ​ public class ArrayDemon06 {     public static void main(String[] args) {      ...

  10. C++ //深拷贝与浅拷贝 //浅拷贝 : 简单的赋值拷贝操作 //深拷贝: 在堆区重新申请空间 进行拷贝操作

    1 //深拷贝与浅拷贝 2 3 //浅拷贝 : 简单的赋值拷贝操作 4 //深拷贝: 在堆区重新申请空间 进行拷贝操作 5 6 7 #include <iostream> 8 using ...