徐昊 · TDD 项目实战 70 讲(pdf+mp3+md) - 程序人生<br>01|TDD演示(1):任务分解法与整体工作流程.md <br>01|TDD演示(1):任务分解法与整体工作流程.mp3 <br>01|TDD演示(1):任务分解法与整体工作流程.pdf <br>02|TDD演示(2):识别坏味道与代码重构.md <br>02|TDD演示(2):识别坏味道与代码重构.mp3 <br>02|TDD演示(2):识别坏味道与代码重构.pdf <br>03|TDD演示(3):按测试策略重组测试.md <br>03|TDD演示(3):按测试策略重组测试.mp3 <br>03|TDD演示(3):按测试策略重组测试.pdf <br>04|TDD演示(4):实现对于列表参数的支持.md <br>04|TDD演示(4):实现对于列表参数的支持.mp3 <br>04|TDD演示(4):实现对于列表参数的支持.pdf <br>05|TDD中的测试(1):状态验证为什么是主要的使用方式?.md <br>05|TDD中的测试(1):状态验证为什么是主要的使用方式?.mp3 <br>05|TDD中的测试(1):状态验证为什么是主要的使用方式?.pdf <br>06|TDD中的测试(2):行为验证为什么应该尽量避免使用?.md <br>06|TDD中的测试(2):行为验证为什么应该尽量避免使用?.mp3 <br>06|TDD中的测试(2):行为验证为什么应该尽量避免使用?.pdf <br>07|TDD中的测试(3):集成测试还是单元测试?.md <br>07|TDD中的测试(3):集成测试还是单元测试?.mp3 <br>07|TDD中的测试(3):集成测试还是单元测试?.pdf <br>08|TDD中的驱动(1):驱动的极限是什么?.md <br>08|TDD中的驱动(1):驱动的极限是什么?.mp3 <br>08|TDD中的驱动(1):驱动的极限是什么?.pdf <br>09|TDD中的驱动(2):重构发挥了什么作用?.md <br>09|TDD中的驱动(2):重构发挥了什么作用?.mp3 <br>09|TDD中的驱动(2):重构发挥了什么作用?.pdf <br>10|TDD中的驱动(3):何为经典学派?何为伦敦学派?.md <br>10|TDD中的驱动(3):何为经典学派?何为伦敦学派?.mp3 <br>10|TDD中的驱动(3):何为经典学派?何为伦敦学派?.pdf <br>11|作为工程化方法的TDD:更低的成本与更高的效能.md <br>11|作为工程化方法的TDD:更低的成本与更高的效能.mp3 <br>11|作为工程化方法的TDD:更低的成本与更高的效能.pdf <br>12|实战中的TDD:RESTfulAPI的开发框架.md <br>12|实战中的TDD:RESTfulAPI的开发框架.mp3 <br>12|实战中的TDD:RESTfulAPI的开发框架.pdf <br>13|DIContainer(1):如何实现基本的DI容器结构?.md <br>13|DIContainer(1):如何实现基本的DI容器结构?.mp3 <br>13|DIContainer(1):如何实现基本的DI容器结构?.pdf <br>14|DIContainer(2):如何通过SadPath为容器增加功能?.md <br>14|DIContainer(2):如何通过SadPath为容器增加功能?.mp3 <br>14|DIContainer(2):如何通过SadPath为容器增加功能?.pdf <br>15|DIContainer(3):如何重构已有的代码?.md <br>15|DIContainer(3):如何重构已有的代码?.mp3 <br>15|DIContainer(3):如何重构已有的代码?.pdf <br>16|DIContainer(4):如何实现对循环依赖的处理?.md <br>16|DIContainer(4):如何实现对循环依赖的处理?.mp3 <br>16|DIContainer(4):如何实现对循环依赖的处理?.pdf <br>17|DIContainer(5):API接口该怎么设计?.md <br>17|DIContainer(5):API接口该怎么设计?.mp3 <br>17|DIContainer(5):API接口该怎么设计?.pdf <br>18|DIContainer(6):如何实现循环依赖的检查?.md <br>18|DIContainer(6):如何实现循环依赖的检查?.mp3 <br>18|DIContainer(6):如何实现循环依赖的检查?.pdf <br>19|DIContainer(7):如何实现FieldInjection部分的功能?.md <br>19|DIContainer(7):如何实现FieldInjection部分的功能?.mp3 <br>19|DIContainer(7):如何实现FieldInjection部分的功能?.pdf <br>20|DIContainer(8):如何实现MethodInjection部分的功能?.md <br>20|DIContainer(8):如何实现MethodInjection部分的功能?.mp3 <br>20|DIContainer(8):如何实现MethodInjection部分的功能?.pdf <br>21|DIContainer(9):怎样重构测试代码?.md <br>21|DIContainer(9):怎样重构测试代码?.mp3 <br>21|DIContainer(9):怎样重构测试代码?.pdf <br>22|DIContainer(10):怎样将大粒度的测试重构为等效的小粒度测试代码?.md <br>22|DIContainer(10):怎样将大粒度的测试重构为等效的小粒度测试代码?.mp3 <br>22|DIContainer(10):怎样将大粒度的测试重构为等效的小粒度测试代码?.pdf <br>23|DIContainer(11):如何对ContainerTest进行文档化改造?.md <br>23|DIContainer(11):如何对ContainerTest进行文档化改造?.mp3 <br>23|DIContainer(11):如何对ContainerTest进行文档化改造?.pdf <br>24|DIContainer(12):如何增补功能?.md <br>24|DIContainer(12):如何增补功能?.mp3 <br>24|DIContainer(12):如何增补功能?.pdf <br>25|DIContainer(13):任务上的遗漏该怎么处理?.md <br>25|DIContainer(13):任务上的遗漏该怎么处理?.mp3 <br>25|DIContainer(13):任务上的遗漏该怎么处理?.pdf <br>26|DIContainer(14):如何重构对Type类型判断的逻辑?.md <br>26|DIContainer(14):如何重构对Type类型判断的逻辑?.mp3 <br>26|DIContainer(14):如何重构对Type类型判断的逻辑?.pdf <br>27|DIContainer(15):如何封装类型判断逻辑?.md <br>27|DIContainer(15):如何封装类型判断逻辑?.mp3 <br>27|DIContainer(15):如何封装类型判断逻辑?.pdf <br>28|DIContainer(16):行为封装会对测试产生什么影响?.md <br>28|DIContainer(16):行为封装会对测试产生什么影响?.mp3 <br>28|DIContainer(16):行为封装会对测试产生什么影响?.pdf <br>29|DIContainer(17):如何重构ContextConfig内部的实现?.md <br>29|DIContainer(17):如何重构ContextConfig内部的实现?.mp3 <br>29|DIContainer(17):如何重构ContextConfig内部的实现?.pdf <br>30|DIContainer(18):如何增补依赖缺失和循环依赖的测试?.md <br>30|DIContainer(18):如何增补依赖缺失和循环依赖的测试?.mp3 <br>30|DIContainer(18):如何增补依赖缺失和循环依赖的测试?.pdf <br>31|DIContainer(19):Qualifier部分的功能要如何完成?.md <br>31|DIContainer(19):Qualifier部分的功能要如何完成?.mp3 <br>31|DIContainer(19):Qualifier部分的功能要如何完成?.pdf <br>32|DIContainer(20):如何对代码和测试进行重构?.md <br>32|DIContainer(20):如何对代码和测试进行重构?.mp3 <br>32|DIContainer(20):如何对代码和测试进行重构?.pdf <br>33|DIContainer(21):如何处理Singleton生命周期部分的功能?.md <br>33|DIContainer(21):如何处理Singleton生命周期部分的功能?.mp3 <br>33|DIContainer(21):如何处理Singleton生命周期部分的功能?.pdf <br>34|DIContainer(22):如何对Bind的逻辑进行重构?.md <br>34|DIContainer(22):如何对Bind的逻辑进行重构?.mp3 <br>34|DIContainer(22):如何对Bind的逻辑进行重构?.pdf <br>35|DIContainer(23):项目回顾与总结.md <br>35|DIContainer(23):项目回顾与总结.mp3 <br>35|DIContainer(23):项目回顾与总结.pdf <br>36|实战中的TDD:RESTfulWebServices.md <br>36|实战中的TDD:RESTfulWebServices.mp3 <br>36|实战中的TDD:RESTfulWebServices.pdf <br>37|RESTfulWebServices(1):明确架构愿景与架构组件间的交互.md <br>37|RESTfulWebServices(1):明确架构愿景与架构组件间的交互.mp3 <br>37|RESTfulWebServices(1):明确架构愿景与架构组件间的交互.pdf <br>38|RESTfulWebServices(2):根据Spike的结果,要如何调整架构愿景?.md <br>38|RESTfulWebServices(2):根据Spike的结果,要如何调整架构愿景?.mp3 <br>38|RESTfulWebServices(2):根据Spike的结果,要如何调整架构愿景?.pdf <br>39|RESTfulWebServices(3):明确架构愿景与调用栈顺序.md <br>39|RESTfulWebServices(3):明确架构愿景与调用栈顺序.mp3 <br>39|RESTfulWebServices(3):明确架构愿景与调用栈顺序.pdf <br>40|RESTfulWebServices(4):在当前架构愿景下,要如何分解任务?.md <br>40|RESTfulWebServices(4):在当前架构愿景下,要如何分解任务?.mp3 <br>40|RESTfulWebServices(4):在当前架构愿景下,要如何分解任务?.pdf <br>41|RESTfulWebServices(5):如何通过对数据测试的管理来凸显意图?.md <br>41|RESTfulWebSer