从 0 到 1 工程实践 (2)

叁叁肆2018-11-13 11:20

欢迎访问网易云社区,了解更多网易技术产品运营经验。


2.1.2 模块化


我们了解到如何快速创建一个简单的工程框架来开始简单的产品需求开发。在实际项 目中,产品需求一般都比较复杂,功能点也比较多,比如对于一个电商系统,需要有用户 管理、商品管理、订单管理和支付等功能,如果没有很好的方式组织这些功能的代码,随 着产品需求持续演进,开发人员越来越多,项目的维护成本就会越来越高,甚至影响产品 的正常迭代。


1. 什么是模块化


模块化就是将复杂的功能实现拆分到不同的模块中。每个模块功能相对独立,各个模 块之间通过定义好的接口沟通。模块拆分遵循高内聚、低耦合的原则,也就是模块内部高 内聚,只负责一件事情或者紧密相关的几件事情;模块之间低耦合,相互之间依赖清晰,只通过接口沟通。


这样做的好处首先是实现了解耦,每个模块只负责一件事情,职责清楚;另一方面, 模块化后,每个模块可以由不同的个人或者团队维护,这样更容易维护,也利于各个团队 针对模块功能进行持续的演进和优化,而在这个过程中也不会影响其他模块的功能。


模块化可以有不同的层次,比如之前的一个功能对应一个模块,但也可以一个类库对 应一个模块,不同的阶段模块化的粒度可能会不同。按功能拆分模块后,可能会有不同的 部署方式,可以是代码层拆分,但是部署时还是一个服务,也可以部署时一个功能对应一 个服务。本节主要以 Maven 为例介绍代码层面如何拆分及管理多个模块。


2. Maven 多模块管理


Maven 的多模块项目一般都是层级结构,最上层是父模块,父模块管理多个子模块。 父模块可以对子模块共享的一些内容进行管理,比如依赖、常量定义、构建的设置等。


在电商网站的示例中,我们可以定义一个 shopping 父模块,然后将用户管理(users)、 商品管理(items)、订单管理(orders)、支付(pay)等几个模块定义成子模块,在这个示 例中,我们还需要一个向外暴露服务的 web 模块(web)。以此为基础,我们来看一下如何 通过 Maven 创建和管理多个模块。


首先创建最上层的 shopping 父模块。

运行完成后,会创建一个 shopping 目录,其中只有一个 POM 文件:

内容如下。

然后切换到 shopping 目录下(cd shopping),创建其他几个子模块。
创建 users 模块。

创建 items 模块。

创建 orders 模块。

创建 pay 模块。

我们通过 maven-archetype-quickstart 创建成简单的 Maven 工程,而 web 模块则通过 maven-archetypewebapp 创建。


最终工程的目标结构如下。


我们再来看看之前生成在 shopping 目录下的 POM 文件。


可以看到其中已经添加了 users、items、orders、pay 和 web 几个模块。模块之间也会 存在依赖,比如这里的 web 模块需要依赖其他几个模块提供的接口,就需要在 web 模块的 POM 文件中声明对其他几个模块的依赖。


文章节选自《云原生应用架构实践》 网易云基础服务架构团队 著


网易云计算基础服务深度整合了 IaaSPaaS 及容器技术,提供弹性计算、DevOps 工具链及微服务基础设施等服务,帮助企业解决 IT、架构及运维等问题,使企业更聚焦于业务,是新一代的云计算平台。点击可免费试用