Before sitting to write this chapter, I checked a couple of articles about DDD in Go in Google. I will be brutal here: they are all missing the most critical points making DDD working. If I imagine that I would read these articles without any DDD knowledge, I would not be encouraged to use them in my team. This superficial approach may also be the reason why DDD is still not socialized in the Go community.
Wild Workouts
一款服务于私人健身房教练和学员的应用
其余功能
前端
OpenAPI(Swagger)client,Bootstrap,Vue.js
(OpenAPI-Specification)[https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md]
后端
3 services:
如果一个服务暴露了两种类型API,每种分别由独立程序提供。
对外HTTP API
从Spring、Symfony、Django或者Express转来的开发者对Go没有统一的HTTP框架会感到非常奇怪,使用任何Go框架都会给项目带来不必要的复杂度和耦合性。作者建议任何Go框架都可以使用,比如chi一个简单的路由足矣(KISS原则)。chi可以提供轻量粘结剂来定义我们需要的API格式,底层使用Go标准http包,所以中间件等工具可以完全适配
所有服务用同种方法运行HTTP,方法可复用。
目标是用Domain-Driven Design,Clean Architecture,CQRS,Event Storming and EventModeling 去解决应用中的问题
gRPC
比起仅仅是前后端共用结构体的OpenAPI,gRPC更加严格,通过gRPC交互的服务很容易达到鲁棒性,当达到每秒数百万的请求量时比REST快10x。 其它优点:
ps: gRPC是Google的,社区活跃,生态完备。Goish没查出来出处。
为了让gRPC生成的client工作,还需要传递几个额外选项:
gRPC在同步对话上有优势,由于Wild Workouts当前章节不需要异步,对于需要异步的需求特征以后章节有。同时可以参考Watermill,它可以便捷构建异步、事件驱动的应用。
Firebase 认证
故意把当前版本的应用做得很难维护和迭代。 "Catastrophes are not a matter of coincidence, but series of unfortunate events" 认证问题在OWASP Top Ten report中排第二严重,不容轻视。
一个简单的解决方案 jwt-go
由于本书的Wild Workouts使用Firebase托管,所以自然使用Firebase的认证。
Domain-Driven Design 精简版
Before sitting to write this chapter, I checked a couple of articles about DDD in Go in Google. I will be brutal here: they are all missing the most critical points making DDD working. If I imagine that I would read these articles without any DDD knowledge, I would not be encouraged to use them in my team. This superficial approach may also be the reason why DDD is still not socialized in the Go community.
ps: 对这个不太理解,Google代码可以提供很好的服务,是不是完全DDD很重要吗?或许是另一种方法论,不好吗?
慢慢走,走的更快
拿测试为例,项目开始时为了快速迭代而跳过写测试,但随着项目增长,你的团队害怕任何变更。最后,你花费的总时间可能会比一开始去写测试用例更多。另一方面,如果项目不严格并且需要快速开发,你可以跳过测试。这是个程序决策。--并不是所有项目都足够复杂,值得使用例如DDD等先进技术。
并没有质量和速度的平衡,如果你希望在长期走的更快,就需要保持高质量