PowerDotNet平台化软件架构设计与实现系列(01):基础数据平台
本系列我将主要通过图片和少许文字讲解通过个人自研的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):基础数据平台的更多相关文章
- PowerDotNet平台化软件架构设计与实现系列(08):缓存平台
几乎所有后端应用都会或多或少用到缓存,尤其是分布式缓存服务,以及和本地缓存构造的二级缓存.根据我们一贯的节约代码的风格,为了复用的目标,抽象出缓存平台,进行缓存管理. 考虑到很多公司都会自己造或者直接 ...
- PowerDotNet平台化软件架构设计与实现系列(11):日志平台
所有后端应用几乎都会记录日志,日志系统可以统一抽象出来提供服务. 最近被Log4j2的安全漏洞刷屏了,作为开发人员的我只能咩哈哈几次表示日志处理太难了,只有折腾过的人才知道这里面的艰辛啊. 在实现Po ...
- PowerDotNet平台化软件架构设计与实现系列(12):HCRM人员管理平台
技术服务于业务,良好的技术设计和实现能够大幅提升业务质量和效率. PowerDotNet已经形成了自己的开发风格,很多项目已被应用于生产环境,可行性可用性可靠性都得到了生产环境验证. 编程是非常讲究动 ...
- PowerDotNet平台化软件架构设计与实现系列(09):消息平台
消息队列已经几乎成为大中型高吞吐应用的标配,继续根据我们一贯的节约代码的风格,为了复用的目标,抽象出消息队列平台,进行消息队列管理. 环境准备 1.(必须).Net Framework4.5+ 2.( ...
- PowerDotNet平台化软件架构设计与实现系列(10):文件平台
很多业务系统少不了需要进行文件管理,比如各种图片.excel.pdf.压缩包等等,为了高度可复用,我们抽象出文件平台,加强对文件进行管理. PowerDotNet文件平台目前支持阿里云OSS.Fast ...
- PowerDotNet平台化软件架构设计与实现系列(03):系统应用平台
为了复用和解耦,快速开发更多的系统和应用,我们对自己经常说的"系统"和"应用"进行更高级的提取和抽象. 十多年前入行,辗转至今,写过很多很多应用,个人喜欢分门别 ...
- PowerDotNet平台化软件架构设计与实现系列(02):数据库管理平台
为了DB复用和简化管理,我们对常见应用依赖的DB模块进行更高级的提取和抽象. 虽然一些ORM可以简化DB开发,但是我们还是需要进行改进和优化,否则应用越多,后期管理运维越混乱. 根据常见开发需要,数据 ...
- PowerDotNet平台化软件架构设计与实现系列(05):ETCD分布式键值存储平台
ETCD目前在PowerDotNet已经被用于注册中心和配置管理(常见的配置中心在PowerDotNet中仅仅是一个小小的模块而已)中,作为基础设施的重要组成部分,ETCD的重要性不言而喻. 本文简单 ...
- PowerDotNet平台化软件架构设计与实现系列(13):应用监控平台
本文再写一篇和具体业务逻辑几乎无关的公共服务应用监控平台.PowerDotNet自研的应用监控平台系统,是服务治理的重要拼图,和服务治理平台配合使用效果更好. 监控开源产品非常丰富,站在巨人的肩膀上, ...
随机推荐
- 最大流最小割——bzoj1001狼抓兔子,洛谷P2598
前置知识 平面图 平面图就是平面上任意边都不相交的图.(自己瞎画的不算XD) 对偶图 比如说这个图,我们发现平面图肯定会把平面分成不同的区域(感觉像拓扑图),并把这些区域当做每个点(不被包围的区域独自 ...
- 流畅的python--装饰器
装饰器:以某种方式增强函数.两大特性:1.可以将被装饰的函数替换成其他函数. 2.在加载模块时立即执行.案例1def make_avarage(): count=0 total=0 def avera ...
- At 、Crontabl定时任务
之前笔者是在本地写的博客,然后用 windows 定时任务启动写的脚本上传到 Github 上,现在又遇到了 Linux 上的定时任务,项目还要用到 Quartz 定时任务框架 1. 一次性定时任务 ...
- Couchdb 垂直权限绕过漏洞(CVE-2017-12635)
影响版本:小于 1.7.0 以及 小于 2.1.1 首先,发送如下数据包: 修改数据包 { "type": "user", "name": ...
- Spring Cloud分区发布实践(6)--灰度服务-根据Header选择实例区域
此文是一个完整的例子, 包含可运行起来的源码. 此例子包含以下部分: 网关层实现自定义LoadBalancer, 根据Header选取实例 服务中的Feign使用拦截器, 读取Header Feign ...
- Python RPC 不会?不妨看看这篇文章
1. 前言 大家好,我是安果! RPC,全程为 Remote Procedure Call,是一种进程间的通信方式,它采用「 服务端 / 客户机 」模式,是一种请求响应模型 其中,服务端负责提供服务程 ...
- jadx的使用
使用jadx之前必须安装配置java环境才能正常打开运行 https://www.cnblogs.com/yhoil/p/14808648.html 一.前言 今天介绍一个非常好用的反编译的工具 ja ...
- C++ 打印乘法口诀
1 //嵌套循环 乘法口诀 2 #include <iostream> 3 using namespace std; 4 int main() 5 { 6 int i ,j; 7 for ...
- 35岁Android程序员被阿里辞退,生活压力太大痛哭,中年危机如何自救?
多数人都喜欢安逸的生活,尤其是随着年龄的增长,很多人都希望工作和生活趋于稳定,不愿意再让生活有很大的变动.可是,当达到一定的年龄时,危机还是存在的. 之前有一位阿里员工在脉脉上,晒出了自己被辞退的经历 ...
- 面向对象第一单元总结:Java实现表达式求导
面向对象第一单元总结:Java实现表达式求导 题目要求 输入一个表达式:包含x,x**2,sin(),cos(),等形式,对x求导并输出结果 例:\(x+x**2+-2*x**2*(sin(x**2+ ...