徐昊 · TDD 项目实战 70 讲
徐昊
Thoughtworks 中国区 CTO
18159 人已学习
新⼈⾸单¥98
登录后,你可以任选4讲全文学习
课程目录
已完结/共 88 讲
实战项目二|RESTful开发框架:依赖注入容器 (24讲)
实战项目三|RESTful Web Services (44讲)
徐昊 · TDD 项目实战 70 讲
15
15
1.0x
00:00/00:00
登录|注册

51|RESTful Web Services(15):为什么选择在第一个测试之后就开始重构?

你好,我是徐昊。今天我们继续使用 TDD 的方式实现 RESTful Web Services。

回顾架构愿景与任务列表

目前我们的架构愿景如下:
任务列表如下:
ResourceRouter
将 Resource Method 的返回值包装为 Response 对象
根据与 Path 匹配结果,降序排列 RootResource,选择第一个的 RootResource
如果没有匹配的 RootResource,则构造 404 的 Response
如果返回的 RootResource 中无法匹配剩余 Path,则构造 404 的 Response
如果 ResourceMethod 返回 null,则构造 204 的 Response
代码目前是:
class DefaultResourceRouter implements ResourceRouter {
private Runtime runtime;
private List<RootResource> rootResources;
public DefaultResourceRouter(Runtime runtime, List<RootResource> rootResources) {
this.runtime = runtime;
this.rootResources = rootResources;
}
@Override
public OutboundResponse dispatch(HttpServletRequest request, ResourceContext resourceContext) {
String path = request.getServletPath();
UriInfoBuilder uri = runtime.createUriInfoBuilder(request);
Optional<RootResource> matched = rootResources.stream().map(resource -> new Result(resource.getUriTemplate().match(path), resource))
.filter(result -> result.matched.isPresent()).map(Result::resource)
.findFirst();
Optional<ResourceMethod> method = matched.flatMap(resource -> resource.match(path, request.getMethod(),
Collections.list(request.getHeaders(HttpHeaders.ACCEPT)).toArray(String[]::new), uri));
GenericEntity<?> entity = method.map(m -> m.call(resourceContext, uri)).get();
return (OutboundResponse) Response.ok(entity).build();
}
record Result(Optional<UriTemplate.MatchResult> matched, RootResource resource) {
}
}

视频演示

下面进入今日的开发:
00:00 / 00:00
    1.0x
    • 2.0x
    • 1.5x
    • 1.25x
    • 1.0x
    • 0.75x
    • 0.5x
    网页全屏
    全屏
    00:00

    思考题

    我们为什么选择在第一个测试之后就开始重构?
    欢迎把你的想法分享在留言区,也欢迎把你的项目代码分享出来。相信经过你的思考与实操,学习效果会更好!
    确认放弃笔记?
    放弃后所记笔记将不保留。
    新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
    批量公开的笔记不会为你同步至部落
    公开
    同步至部落
    取消
    完成
    0/2000
    荧光笔
    直线
    曲线
    笔记
    复制
    AI
    • 深入了解
    • 翻译
      • 英语
      • 中文简体
      • 中文繁体
      • 法语
      • 德语
      • 日语
      • 韩语
      • 俄语
      • 西班牙语
      • 阿拉伯语
    • 解释
    • 总结

    本文介绍了徐昊在实现RESTful Web Services过程中采用TDD的方式,并重点讨论了为什么选择在第一个测试之后就开始重构的问题。文章首先回顾了架构愿景和任务列表,然后展示了当前的代码实现。接着提出了思考题,邀请读者分享他们的想法和项目代码。 在文章中,徐昊强调了TDD的重要性,并通过视频演示展示了今日的开发过程。他提出了一个思考题,引发读者对于重构的思考和讨论。 通过本文,读者可以了解到作者在实现RESTful Web Services时采用了TDD的方式,并且对于重构的选择进行了深入的思考。这篇文章适合对RESTful Web Services开发感兴趣的技术人员阅读,可以帮助他们更好地理解TDD的实践和重构的重要性。

    仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
    《徐昊 · TDD 项目实战 70 讲》
    新⼈⾸单¥98
    立即购买
    登录 后留言

    全部留言(4)

    • 最新
    • 精选
    • 忘川
      - 可读性 - 让测试代码的可读性更好 更方便自己理解 当初的思路 而不需要每次都从头到尾思考上下文 才能理解代码在做什么 - 复用性 - 让后续的测试代码 能够更快的复用之前的代码 同时也能更好的管控 后续的扩展点 方便后续的调整 都有统一的出入口 - 结构性 - 通过对替身代码的整理 让自己理解 自己是基于什么样的结构 和什么样的约定的前提下 进行的测试开发
      2023-01-08归属地:上海
    • Jason
      降序排列不应该值大的在前面吗?
      2022-08-08归属地:四川
    • Jason
      因为测试的setup部分都是相同的,如果不重构测试代码就有很多重复,且难以理解。
      2022-08-08归属地:四川
    • aoe
      原来 inline 的目的是让代码更紧凑
      2022-07-12
    收起评论
    大纲
    固定大纲
    回顾架构愿景与任务列表
    视频演示
    思考题
    显示
    设置
    留言
    4
    收藏
    沉浸
    阅读
    分享
    手机端
    快捷键
    回顶部