-
Notifications
You must be signed in to change notification settings - Fork 2
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
[GA v1♭] [NOTES] TODO() by duangsuse #11
Comments
目前 GeekApk 的控制器路径模板已经在 add-controller-template 分支上开发 填充完所有模板并合并到 master 后,下一个目标 branch 是 add-controller-tests 其时 v1b 的第一个版本所有非控制器的编程需求都没有了(因为之前都写完了,感谢 SpringBoot 使得我不用写那么多难看并且耗时间的 XML 配置文件),接下来就是测试驱动编程 implement-interfaces 喽 Test-driven development 的一个好处就是出来的肯定是能用的成品,因为它通过了验收测试(Acceptance test) 然后就是写前端 |
[DuangSUSE@duangsuse]~/文档/geekapk_spring% node code_writer.js serverDetail() -> object:detailMap serverVersion() -> plain serverDescription() -> plain serverBoot() -> datetime POST@createUser(username:String) -> object:GeekUser PUT@resetSharedHash(uid-path:UserId, shash:String?) -> plain DELETE@deleteUser(uid-path:UserId) -> object:GeekUser PUT@flagUser(uid-path:UserId, flag:Int) -> object:GeekUser POST@createCategory(name:String) -> object:Category PUT@renameCategory(id-path:CategoryId, name:String) -> object:Category DELETE@deleteCategory(id-path:CategoryId) -> object:Category DELETE@deleteApp(aid-path:AppId) -> object:App PUT@transferAppCategory(aid-path:AppId, cid:CategoryId) -> [$aid:number, $old:number, $new:number] PUT@transferAppOwner(aid-path:AppId, uid:UserId) -> [$aid:number, $old:number, $new:number] DELETE@deleteAppUpdate(aid-path:AppId, rev-path:Int) -> object:AppUpdate DELETE@deleteComment(cid-path:CommentId) -> [$cid:number, $deletedSubComments:number] categoryList() -> array:Category categoryName(id-path:CategoryId) -> plain readUser(id-path:UserId) -> object:GeekUser updateUser(id-path:UserId, prop:String, value-body:String) -> object:string resetHash(id-path:UserId, shash:String, hash:String) -> object:string checkHash(id-path:UserId, hash:String) -> object:string listUser(sort:String?, sliceFrom:UserSize?, sliceTo:UserSize?) -> array:GeekUser listMetaUser(sort:String?, sliceFrom:UserSize?, sliceTo:UserSize?) -> array:GeekUser searchUser(type:String?, kw-path:String, sort:String?) -> array:GeekUser updateOnlineTime(id-path:UserId) [ { method: 'GET', GET /serverDetail: serverDetail() GET /serverVersion: serverVersion() GET /serverDescription: serverDescription() GET /serverBoot: serverBoot() POST /admin/makeUser: createUser(username:String!) PUT /admin/resetMetaHash/{uid}: resetSharedHash(uid-path:UserId!,shash:String?) DELETE /admin/dropUser/{uid}: deleteUser(uid-path:UserId!) PUT /admin/flagUser/{uid}: flagUser(uid-path:UserId!,flag:Int!) POST /admin/makeCategory: createCategory(name:String!) PUT /admin/nameCategory/{id}: renameCategory(id-path:CategoryId!,name:String!) DELETE /admin/dropCategory/{id}: deleteCategory(id-path:CategoryId!) DELETE /admin/dropApp/{aid}: deleteApp(aid-path:AppId!) PUT /admin/moveApp/{aid}: transferAppCategory(aid-path:AppId!,cid:CategoryId!) PUT /admin/transferApp/{aid}: transferAppOwner(aid-path:AppId!,uid:UserId!) DELETE /admin/dropAppUpdate/{aid}/{rev}: deleteAppUpdate(aid-path:AppId!,rev-path:Int!) DELETE /admin/dropComment/{cid}: deleteComment(cid-path:CommentId!) GET category/all: categoryList() GET category/{id}: categoryName(id-path:CategoryId!) GET user/{id}: readUser(id-path:UserId!) GET user/{id}: updateUser(id-path:UserId!,prop:String!,value-body:String!) GET user/{id}/hash: resetHash(id-path:UserId!,shash:String!,hash:String!) GET user/{id}/checkHash: checkHash(id-path:UserId!,hash:String!) GET user/all: listUser(sort:String?,sliceFrom:UserSize?,sliceTo:UserSize?) GET user/allHasMetaApp: listMetaUser(sort:String?,sliceFrom:UserSize?,sliceTo:UserSize?) GET user/search/{kw}: searchUser(type:String?,kw-path:String!,sort:String?) GET user/{id}/online: updateOnlineTime(id-path:UserId!) |
找到了个很有意思的名词:Dao(Data Access Object) |
Travis GitHub App Installed 🔧 |
[In reply to duangsuse::Echo] 11 files changed, 343 insertions(+), 34 deletions(-) 在半个小时里,GeekSpec 自动生成了 300 多行模板代码,换算成人就是十分钟写 100 行啊,都是这种代码: @PutMapping("/{aid}")
@ResponseBody
fun updateApp(@PathVariable("aid") aid: AppId, @RequestParam("attr") attr: String/* Maybe package or icon or name or screenshots or readme */,
@RequestBody value: String): Map<String, String> /* attr: String *//* oldVal: String */ {
TODO()
} 不无聊么? PUT@updateApp(aid-path:AppId, attr:String{package, icon, name, screenshots, readme}, val-body:String)
-> [$attr:String, $oldVal:String]
= /app/{aid} 于是我居然花了一天时间弄了个 GeekApk 自己替换 Swagger 的,虽然没啥复杂算法... 但不得不说,真的很有用。 ... CS 看多了又想到偏序理论... 头疼 |
|
哇,除了 DAO,我又认识了一大堆那么专业的术语名词,听起来真是好大佬呢,好厉害呢!不明觉厉呢!哇!原来这就是 IT 啊,我要打十个! MVC、MVP、MVVP、Databinding、ViewHolder、AOP、Provider、Resolver、Adaptor、Pattern、List 视图、PAJAX、AJAX、Reverse AJAX、Bean、CDI、Transactional、ACID、Functional、GC、Memory Leak、static field、obfuscation、anti-reversing、Machine learning、解耦合、Component、POJO、DSL、Parametric Types、Encryption、Cipher、Observer、Stream、Future、Dependencies、Box Model、Dispatcher、Handler、Scheduler、OOP、FP、Xml SICP、TaPL、FoPL、CSAPP、SASP、… 你们说我是不是可以去写十个酷安了?(笑) |
懒得用,因为我觉得不好看、不是。因为酷安的 API 客户端验证就用到了此类、DDG 上一搜全都是,并且我也看过 Oracle 的文档,我不可能看不到。实际上我妄图写了点 Kotlin/multiplatform 代码都用到了此类。
PostgreSQL 更成熟,而且我们的建模是关系型的,目前没有 lower 化模型的打算
要喷这个,请大人您先考虑一下 GeekApk v1b 的模型,和上面那个比起来哪个大。注意我们(GA Spring 和 Rebase-server)的权限验证都没有用外部的 CDI 库。
不说那些基本就是非常简单的 proxy (和设计模式无关) extract 的东西(比如那些单纯包装外部 procedure 的类、静态方法、静态字段)了,咱看看这个: @Constraint(validatedBy = { CategoryKey.Validator.class })
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
public @interface CategoryKey {
int min() default 1;
int max() default Globals.SIZE_CATEGORY;
String message() default "{org.hibernate.validator.constraints.Length.message}";
// Validator implementation omitted 80% 的模板代码,而且三个文件中可以说这些代码都是重复的。我看一遍这些模板代码使用的接口也就大概了解了,请问这算什么?不算 Java 8 语法的部分,我只需要知道 我看完这些就是满脑子名词,Resources、Provider… XXXXs、YYYYMapper…
我很心虚,觉得自己的代码不好,就去看别人的取长补短。我是菜🐔别人是大佬不行吗? |
行了... 好无聊啊,其实要看的话,要比较的话也没有可比性,那个设计模式更多一些(),但它不能证明什么,因为这些代码也可以抄,目前本项目的代码都是我抄书上抄来的。 我目前的任务就是弄完 GeekApk,其他的再说。 duangsuse 有时候会有点神经质,因为我对技术看得太重... 如有不便还请大家谅解。刚才想要不要彻底分析一下刚才那个项目,顺便熟悉一下工程的说(因为我平时工程做得比较少,可以作为一种提升,虽然也模式化但比这个 Spring 的稍微好一点),可是因为 GA 最好还是先弄完(包括前端)就算了。 🙏 👦 |
https://github.com/Codingpedia/demo-rest-jersey-spring emmmm DataAccessObject 和 Entity 居然不是一样的 🤔 #Backend #web 不过我现在几乎没有看到 DAO、大概是后端的书不够多... |
https://github.com/imufun/rebase-server/tree/master/src/main/java/com/drakeet/rebase/api/tool 我已经正常分析了此项目并且理解了所有 Extracts(Authorizations, Globals, Hashes, Log, MongoDBs, RebaseAsserts, Responses, URIs)、Mapper(ConstraintViolationExceptionMapper, WebExceptionMapper)、Provider(GsonBodyProvider)、Resolver(ValidationConfigurationContextResolver)、Implementation(ObjectIdSerializer)... 还有他们自己的用途、模式、运行时的数据流和控制流,并和我之前的知识相结合,并且在正常的时间内完成,不会崩坏了。thx。GeekApk 会照常以自己的风格完成开发。 |
since 目前我写了第一个含写的接口业务逻辑测试,结果写了半天 200 多行代码... 而且很多代码... 呃... 很难看,因为 JUnit 的原因,貌似没办法保持一定顺序执行(因为我这个是要求某些操作顺序的,之间互相有依赖关系),而且这个测试质量很差... 而且单独去给所有接口写测试是非常淡疼的。我决定写保护 add-tests 分支,跳过测试编写,直接开始编写业务逻辑。而且我希望尽快完成任务,,, 所有 v1b 的 Boot Server 可能不会弄 test-driven development,emmm.... 58a32fb 割肉删掉了测试.. 以后自动化测试会由 Ruby 执行 |
|
Ruby 的 Spectrum 打算先暂时 JSON,因为我最近有点... 不想写 Ruby? |
[ Photo ] |
[In reply to duangsuse::Echo] 不过它的测试套件也算完整,虽然持久化层的不是 Mock,但也可以用,缺点是如果在生产环境用了很可能导致数据丢失 Times 没有使用 DBMS,而是,这是因为我以为它不会有太大的数据集性能要求,我觉得很可以重构(比方说,使用类似 MongoDB 的面向文档数据库替换纯手动)... 尤其是难看的 API... 值得注意的是我以前智商还低一些的时候,连常用的序列化这种弱智能力都没有... 我没有么写: [foo, bar, baz].to_json 而是: [foo, bar, baz].map { |o| o.to_json }.to_json 然后反序列也一样... rofl. |
[In reply to duangsuse::Echo]
GeekApk v1b 完成后可能有别的打算(包括 Android 客户端,不准喷我不会什么设计模式)(有些人不准喷我菜...)(虽然我有时候的确很菜,但我自己觉得我很有前途,嗯嗯。) 希望以后都是艳阳高照。冻死了天又黑... |
下一步操作是 WebHooks(GeekPush)支持、Topics 等和 MessageHeader 的支持、包括工具的其他平台移植 |
== 晚点
== 发布之后
|
TODO
getXXXXCount()
Interfaces for client update event checkTODO later
"NOT"
TODOThe text was updated successfully, but these errors were encountered: