基于分布式、服务化的maven项目文件规划

引言

此文不是纯粹介绍maven概念,而是介绍一个具体的maven项目文件规划

这个规划可能适合于研发比较复杂的业务,这些业务有分布式服务化的需要。

这个规划能够解决因为分布式和服务化要求而引起的项目繁多,项目混乱的问题。

与此同时这个规划也可以解决了在项目研发中出现的重复“轮子”的问题。这些“轮子”主要来源于两类:

  1. 代码的重复“轮子”,所以要抽取项目,导致项目数量进一步增多。
  2. 人工构建项目的重复“轮子”,构建的关系越来越复杂,错误率也越来越高,所以要通过基于配置和约定的方法来实现自动化构建。

其他的不多赘述,直接上干货。

实际的规划图

所有parent的公用职责

  1. 构建它下面聚合的所有项目。约定是只聚合它子目录的项目,不能跨目录去聚合
  2. 管理它聚合的项目的通用特性,即存在继承关系。这些通用特性,是从它聚合的项目本身抽取的职责而来。约定这个继承和聚合使用同一个项目。
  3. 统一管理它聚合的项目中使用依赖其他项目或者jar的版本。聚合的项目只允许依赖它下层的项目。具体分层,看下文的分层依赖关系

we-parent的职责

  职责:一键构建所有需要发布的项目。

  通用特性:

  1. 所有项目初始时就带有这些jar包的依赖,例如:testng(单元测试相关),h2(单元测试相关),easymock(单元测试相关),lombok(根据注释自动生成setter和getter)
  2. 所有项目的额外特性,例如:单元测试插件
  3. 项目发布管理,例如:私一的maven私服配置

we-core-parent的职责

  职责:它所聚合的的项目与业务没有关联的,只提供基础能力。简称:core项目。例如:数据库持久能力,redis缓存能力,http封装能力,通用工具能力等。

  通用特性:

  • Javadoc插件,用于生成javadoc

we-base-parent的职责

  职责:它所聚合的的项目有且只能代表一个真实存在而且能独立存在核心实体对应的业务,简称:base项目。

  概念解释:

  • 真实存在:即可以用一个具体的客观物体承载的。比如:用户,课程,试题
  • 独立存在:不依赖于其他的任何业务,放在哪里都可以独自呈现。比如:试题放在哪里都可以显示,课程放在任何地方也可以呈现。
  • 核心实体:一个业务服务其实通过一个实体就可以来实现了,顶多是字段属性多一些、实现复杂一些。为了更好的实现,我们可以会把这个实体拆分成很多。但是不管拆分多少个实体,总会有一个是最为重要的,其他的实体如果没有这个实体就没有任何意义。比如试题抽象成试题实体和答案实体。如果没有试题的存在,答案是没有存在的意义的。所以试题就是核心实体。

  通用特性:暂无

we-business-parent的职责

  职责:它所聚合的的项目必须是一个提供“共享”业务流程,简称:business项目。在这个流程过程中有可能需要引用base服务。它本身没有一个真实存在而且能独立存在核心实体

  概念解释:

  共享:在产品规划上,该服务可能会被多个产品使用,即为共享。

  通用特性:

  • 统一引用数据库持久能力,即数据库实现项目。

we-web-parent的职责

  职责:它所聚合的的项目可以通过互联网向用户提供服务,在产品规划上它自己独有的不被共享的业务,简称:web项目。

  通用特性:

  • 统一引用http解析能力。对http的解析及渲染。
  • 监控相关

分层依赖关系

除了we-parent,每一个parent对应的职责就是一个项目分层。这些项目分层的从上到下的关系如下图。

        

如何使用

  假设:现在来一个产品稿(prd,原型或者定稿需求)

  使用步骤如下:

  1. 分析一下,这个产品是否要对用户独立提供服务,不受其他的产品影响。如果要,则新建web项目。
  2. 分析一下,这个产品有没有哪些业务是准备被其他产品使用的,即在其他产品的界面有没有体现本产品。
  3. 如果有,分析一下这些公用的业务,有没有包含一个流程性,即它的业务在组合其他已有base项目。如果有,新建一个business项目
  4. 分析一下,这个产品有没有可以独立存在,不依赖于任何其他服务的业务。如果有,新建一个base项目。
  5. 当实现这些编码时,如果有遇到一些与业务无关的,只提供能力的,则新建一个core项目。

  总结来说:就是分析的时候根据分层,从上到下。把每一层的职责分析一下,如果有则新建一个。每一个项目,都必须建在对应的parent之下。

时间: 2024-10-10 10:04:59

基于分布式、服务化的maven项目文件规划的相关文章

(三)springmvc+mybatis+dubbo分布式架构 整合 - maven模块规划

上一篇我们介绍<springmvc+mybatis+zookeeper分布式架构 整合 - 平台功能导图>,从今天开始,我们针对于每一个独立的系统做详细的构建,顺便会把整个构建的过程全部记录下来,方便更多的开发者. 提醒: 在构建dubbo分布式平台之前,必须掌握好maven的相关技能,整个构建过程都是使用maven技术.在构建的过程中解决maven问题的时间往往比编码的时间还多,但这不能阻止我们对<构建dubbo分布式平台>之路,没有掌握好maven技能的开发者,可以在网站找一些

分布式服务化系统一致性的“最佳实干”

1 背景 一致性是一个抽象的.具有多重含义的计算机术语,在不同应用场景下,有不同的定义和含义.在传统的IT时代,一致性通常指强一致性,强一致性通常体现在你中有我.我中有你.浑然一体:而在互联网时代,一致性的含义远远超出了它原有的含义,在我们讨论互联网时代的一致性之前,我们先了解一下互联网时代的特点,互联网时代信息量巨大.需要计算能力巨大,不但对用户响应速度要求快,而且吞吐量指标也要向外扩展(既:水平伸缩),于是单节点的服务器无法满足需求,服务节点开始池化,想想那个经典的故事,一只筷子一折就断,一

Flume+Kafka+Strom基于分布式环境的结合使用

目录: 一.Flume.Kafka.Storm是什么,如何安装? 二.Flume.Kafka.Storm如何结合使用? 1) 原理是什么? 2) Flume和Kafka的整合  3) Kafka和Storm的整合  4) Flume.Kafka.Storm的整合    一.Flume.Kafka.Storm是什么,如何安装? Flume的介绍,请参考这篇文章<Flume1.5.0的安装.部署.简单应用> Kafka的介绍,请参考这篇文章<kafka2.9.2的分布式集群安装和demo(j

基于分布式Http长连接框架--架构模型

我画了个简单的架构图来帮助说明: 其实为发布订阅架构模式. 生产者和消费者我们统一可理解为客户端,消息中间件可认为是服务端. 生产者和消费者做为客户端要跟服务端交互,则先通过代理订阅服务端,订阅成功后即可跟服务端互通互联,此刻的连接通道为长连接. 长连接的优势在于会将消息主动通知到客户端,避免客户端去做大量的轮询工作而造成资源浪费,而且对于移动应用来说,可较大程度上节省GPRS流量. 当连接建立好后,生产者可随时发送消息,如果在发消息过程当中,服务端由于各种原因不能连接,则消息的发送会回放重试,

基于分布式Http长连接框架--代码模型

好的代码应该是方便客户端使用,代码能够自描述,规范化,大众标准化. 而且我相信代码也是有生命的,需要不断的维护它,你以什么样的态度对待它,它就会以同样的态度回敬你,所以在写代码前,先摆好自己的态度(一个心态良好的创造者),只有这样你的生命才会精彩,代码的生命也会精彩. 前面说了简单的框架模型,简单的设计模型,如果具体到客户端使用的话还需要代码模型来描述下,当作集成的sdk说明即可. 生产者如何发送消息: 1:配置服务端地址及名称; 2:注册本身为客户端,并约定一个全局唯一的名称 3:开启代理 4

(四)springmvc+mybatis+zookeeper分布式架构 整合 - maven代码结构

我们接着上一篇文章,针对于dubbo分布式项目进行maven构建,因为我在本地的eclipse中进行了项目构建,代码结构图如下: 代码结构解释: 架构代码如下: 原文地址:http://blog.51cto.com/13568887/2071069

图解:传统架构到分布式服务化架构的架构演进

前言 从计算机在中国进入,到互联网时代再到现在的移动互联网时代和正在向我们走来的大数据时代和AI时代,项目架构也随着时代的改变在不断的演化升级,从单一应用架构到现在的分布式服务化架构,经历了很大的发展和改变.下面就是利用图片给大家讲解发展过程. 分析:刚开始互联网因为电脑的普及不够广泛,互联网使用成本高,用户量比较低,所以一开始单应用架构架构就可以满足需求,也不存在太大应用架构上的可优化点,主要优化点还是停留在带宽上,我们都知道从2G网络到3G网络再到现在的4G网络,在这个过程中上面的架构是可以

基于分布式关系型数据库,实现轻松应对百亿级数据分析场景解决方案

MyCat是什么? 从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库读写分离,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里.也可以指定多个写库多个读库. MyCat发展到目前的版本,已经不是一个单纯的MySQL代理了,它的后端

(三)构建springmvc+mybatis+dubbo分布式平台-maven模块规划

上一篇我们介绍<构建dubbo分布式平台-平台功能导图>,从今天开始,我们针对于每一个独立的系统做详细的构建,顺便会把整个构建的过程全部记录下来,方便更多的开发者. 提醒: 在构建dubbo分布式平台之前,必须掌握好maven的相关技能,整个构建过程都是使用maven技术.在构建的过程中解决maven问题的时间往往比编码的时间还多,但这不能阻止我们对<构建dubbo分布式平台>之路,没有掌握好maven技能的开发者,可以在网站找一些相关的资料去学习一下. 我们构建dubbo分布式平