本系列我将主要通过图片和少许文字讲解通过个人自研的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. 关键字替代符号C++

    不知从什么时候的哪里我看到了一个and关键字,心想这是个什么玩意...然后知道它相当于&&,于是开启了罪恶的生涯-- 替代关键字,似乎可读性更好,但是有些编译器可能会无法识别(eg.M ...

  2. ElasticSearch简介和快速实战

    ElasticSearch简介和快速实战 ElasticSearch与Lucene Lucene可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库(框架) 但是想要使用Lucene,必须使用 ...

  3. Moonraker靶机

    仅供个人娱乐 靶机搭建与下载 Monraker靶机ip: 192.168.181.135 kali攻击者ip : 192.168.181.128 说明:获取目标主机的root权限并读取目录中的flag ...

  4. Cookie、Session、JWT在koa中的应用及实现原理

    目录 Cookie 重要属性 实现原理 cookie签名实现原理 注意事项 Session 实现原理 JWT 使用方式 组成 实际应用 实现原理 前端存储方式 cookie session local ...

  5. API接口测试

    一.测试工具 二.测试方法 二.测试需要注意的点

  6. swift文件调用oc分类时崩溃解决办法(可能全网唯一)

    背景 oc为基础创建的sdk混编工程,在被sdk关联的混编demo工程中swift文件调用时,会崩溃,提示找不到sdk中oc分类方法.常规的,在demo中设置-Objc和-all_load也还是会崩. ...

  7. JUC学习笔记(一)

    1.什么是 JUC 1.1.JUC简介 在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的.JUC 就是 java.util .concurrent 工具包的简称.这是一个处理 ...

  8. HDFS中NameNode工作机制

    引言 NameNode: 存储元数据 管理整个HDFS集群 DataNode: 存储数据的block SecondaryNameNode: 辅助HDFS完成一些事情 NameNode和Secondar ...

  9. Markdown 学习(语法)

    标题 井号加空格(# ) 几个#就是几级标题 字体 粗体 (两边两个*) 斜体 (两边一个*) 斜体加粗 (两边三个*) 中间斜线 (两个波浪号~) 引用 选择引用,一个箭头 > 加空格 分割线 ...

  10. JacksonUtils

    package com.intfish.resourceserver.util; import com.fasterxml.jackson.annotation.JsonInclude; import ...