Java 项目最佳实践分享和探讨,项目模块层级如何划分, Docker、Apollo 能够给我们带来哪些便利。

2019-10-25 13:41:49 +08:00
 odirus

我们在项目中遇到了下面这些问题,看是否引起大家的共鸣。

  1. 项目开发的时候需要依赖 MySQL、Redis、ElasticSearch 等服务,之前大家都是用公司内某台服务器上提供的服务,但为了能够调试、跟踪程序的一些细微问题,需要自己独享这些服务来避免其他人运行程序时干扰自己的工作,难道需要让运维为每个人提供一组单独的服务吗?

  2. 项目进行单元测试、集成测试的时候或多或少都会用到外部服务,而且有时候同一个测试还不能多次运行,往往会因为数据库里面的主键冲突而导致运行失败,这个问题怎么解决呢?

  3. 不希望在正式打包的时候混杂了任何测试代码,这该怎么办呢?

  4. 我们在每个应用或者微服务中的项目结构是怎么样的呢,他们每层的职责是什么?

针对以上问题,我们把我们的解决方案放到了这个项目中 github demo-server ,希望对大家有帮助。

如果有误人子弟地方,欢迎批评;如果有更好的解决方案,欢迎讨论,不吝赐教。

3651 次点击
所在节点    分享创造
12 条回复
gz911122
2019-10-25 14:01:23 +08:00
1.弹性测试环境
2.mock service
3.本来就不会
4.个人习惯按功能分包而不是按层分包
odirus
2019-10-25 14:03:21 +08:00
我说一下为什么我们要把这些东西放到 github,主要有以下原因:
* 不希望我们再固步自封,我们希望和大家沟通技术,改正我们错的地方,也希望吸收新的想法和实践。
* 希望通过 github 持续输出一些我们的最佳实践和技术规范,帮助到有需要的人,这个过程中我们也可以完善自己的标准体系。
odirus
2019-10-25 15:49:07 +08:00
@gz911122
1. 第一次听到弹性环境这个词,请问有更多资料吗?我想了解和学习一下
2. 我们单个微服务内的集成测试是没有把 MySQL、Redis 等 mock,因为我们会对数据库里面的一些记录做断言。
3. 我们把测试依赖的基础代码写到 sever-test 的 main 里面的,而不是 test,是为了在测试阶段其他模块可以服用代码。
4. 嗯,这只是我们目前的模式

再次感谢,不吝赐教
gz911122
2019-10-25 16:16:54 +08:00
@odirus 弹性环境你可以理解成 很方便拓展的一个服务治理平台...
需要某个组件 or 服务的时候新建一个就可以了,用完可以删掉,我们目前是基于 k8s 做的
lx91714
2019-10-25 16:21:18 +08:00
其实我比较关心项目模块层级如何划分,每次搭项目都要纠结很久
odirus
2019-10-25 17:14:02 +08:00
@gz911122 哦哦,这个倒挺有意思的,主要是我希望认为参与越少越好,免得出错
leon0903
2019-10-25 17:35:05 +08:00
@lx91714 我也是 感觉 Java 项目代码模块划分好像都不太统一。
odirus
2019-10-25 17:39:21 +08:00
@leon0903 其实很正常,每个公司、公司内的每个团队都有自己的风格,所以项目结构是不可能统一的,只要能说服大家或者强制推动大家使用就可以了。
OxO
2019-10-25 18:08:30 +08:00
支持
findsomeone
2019-10-25 19:40:28 +08:00
谢谢分享!
zhazi
2019-10-26 09:28:44 +08:00
2,单元测试不涉及到数据存储,不存 3 在脏数据的问题,更多是对充血模型中对象里业务“动词”的测试,断言“名词”属性就可以了。
集成测试可以使用 rollback 处理脏数据问题。
4,看你的结构上有引用 ddd 的概念,但是几个概念上明显的错误,facade 模式应该对应的是应用服务层,不管 web 还是 api 只需要通过 facade 接口调用应用就可以了,不需要考虑程序内部实现。防腐层是一个适配器的概念,将外部的感念转变成内部的概念。避免内部业务被外部侵蚀。比如商城项目中,有用户领域,用订单领域,订单中有 buyer,用户中有 user,是两个业务名词,需要用防腐层隔离。
在分包上,每个业务对象都要有对应的测试。说的意思是,这组业务的核心功能和他的测试代码一定要同步进行,不能说,我拿到业务的核心代码,但是没有测试类。还要单独引用一个业务代码测试包才能对这个代码进行检验呢。接口测试代码要在 web,api 层。应该是同步进行的,测试接口不需要考虑应用层的问题。应用服务是 mock 出来的。
itmyhome126
2019-10-26 13:13:21 +08:00
标记学习一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/612902

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX