-
Notifications
You must be signed in to change notification settings - Fork 13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[WIP]refactor: refactor java-sdk modules #7
base: main
Are you sure you want to change the base?
Conversation
Here is the overall design of the module:
|
|
And I try using |
API generated by protobuf |
|
|
Thanks for your contribution! |
So the dependency graph is :
Right? |
不好意思现在才回,我用中文说吧,感觉这个PR的设计有点复杂了,没法满足sdk的设计目标 sdk的设计目标1.普通的sdk模块要足够简单,简单到非java选手学一下java语法就能上手开发目前sdk里的代码很多就是非java开发者写的,比如 @MoonShining @ccx1024cc 他们在学习java语法后都能写出很好的sdk代码。 举个例子,现在sdk代码里有很多用数组的地方,其实这不是java风格,java常用List。但是这无所谓,这些数组是非java同学贡献的,并不影响使用。 那么怎么判断代码是否"简单"?衡量标准就是:非java选手想要给普通的sdk模块加功能时,能快速看懂,快速上手开发。 因此要减少开发者打开搜索引擎搜东西的次数。比如不往里面放maven相关的trick(最好不要让一个非java选手打开搜索引擎去搜maven这些配置项干嘛的,他只需要知道java语法),比如能不抽象尽量不抽象,不做一些DDD之类的领域建模、分层(我不是说建模、分层不好,只是这些技巧适合用在复杂系统里,不适合用在这个sdk)再比如一些高级语法糖也是尽量不用。 这也是为啥想把reactor相关的代码和普通sdk的代码放在不同模块:非java选手在上手开发(普通的sdk模块)时,只看非reactor模块的代码,不需要打开搜索引擎去搜reactor相关的知识,也不需要去搜索maven的配置项是啥意思
2.隔离: 让 "简单的部分" 和 "极客的部分" 隔离开当然,这不代表我们不想往sdk里添加复杂度,我最近也在学reactor,挺有意思,感觉和nodejs的编程风格是相通的。 所以我个人觉得,我们当然可以往里面添加复杂度,但需要把"简单的部分"和 "极客的部分" 隔离开,让非java的beginner不需要点开"极客的部分"就能看懂代码、往里面添加自己想要的功能。 这样我们就能随意往 "极客的部分" 添加复杂度(比如用各种java高版本的语法糖,甚至干脆只支持java 11),省的去考虑一些兼容问题,或者非java选手的感受。 这样隔离之后,也能让社区对"极客的部分"足够自治。比如邀请你作为这部分的reviewer,你来对PR把关,有新PR你说了算 :) 具体模块分层基于上述原则,我个人的想法是: 解释: simple enough for non-java developers
geeks for geeks
这只是我个人想法,如果您觉得不妥、有其他诉求(比如想拆出来一个sdk-grpc包、用来给别的项目import?)咱们都可以商量哈,只要能满足上面说的设计目标即可。 如果您觉得打字沟通效率太低,咱们可以搞个社区视频会议聊一下 |
<parent> | ||
<artifactId>runtime-sdk-parent</artifactId> | ||
<groupId>io.mosn.layotto</groupId> | ||
<version>1.1.0-SNAPSHOT</version> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could u add a version property to manage all the pom version?
@seeflood 非常感谢你的建议!是的,你说的没错,我已经意识到了这一点。 目前我正在将rx相关内容从核心逻辑中剥离出来,尽量保持原sdk不变,依赖关系图基本如你所示。 我会在完成这部分更改后,将代码提交到这个PR中。 非常感谢你的review,让我们保持讨论。 |
Hi,我调整后的代码设计和你的图示有两点不同:
|
这是一个Big PR,我仅在这里展示我做出的所有改动。 当讨论过后确定改动时,我会分成两个PR再次进行提交:
您认为这样OK吗? |
Hi, now I am making this part codes,
@seeflood can you review this?(when you have time)
I have added some module introductions below,
Looking forward to your suggestions, I will take time to discuss and refactor my code.
Thank you so much!