由Sam Lau用Objective-C编写的一个模拟的饿了么客户端
##Table of Contents ###1. Prerequisite (先决条件) ###2. Development Process (开发过程) ###3. Best Practices (最佳实践) ###4. Join Us (共同参与项目)
#Prerequisite ##敏捷开发
- 掌握如何收集、编写和测试用户故事,估算已有的用户故事并发布计划 --- 参考书籍:用户故事与敏捷方法
- 熟悉Scrum开发过程和如何管理和跟进项目进度 --- 参考书籍硝烟中的Scrum和XP
- 了解XP极限编程的基本实践 --- 参考书籍解析极限编程
##MVVM(Model-View-View Model) 在MVVM架构中,通常都将view和view controller看做一个整体。相对于之前MVC架构中view controller执行很多在view和model之间数据映射和交互的工作,现在将它交给view model去做。 至于选择哪种机制来更新view model或view是没有强制的,但通常我们都选择ReactiveCocoa。ReactiveCocoa会监听model的改变然后将这些改变映射到view model的属性中,并且可以执行一些业务逻辑。
举个例子来说,有一个model包含一个dateAdded的属性,我想监听它的变化然后更新view model的dateAdded属性。但model的dateAdded属性的数据类型是NSDate,而view model的数据类型是NSString,所以在view model的init方法中进行数据绑定,但需要数据类型转换。示例代码如下:
RAC(self,dateAdded) = [RACObserve(self.model,dateAdded) map:^(NSDate*date){
return [[ViewModel dateFormatter] stringFromDate:date];
}];
ViewModel调用dateFormatter进行数据转换,且方法dateFormatter可以复用到其他地方。然后view controller监听view model的dateAdded属性且绑定到label的text属性。
RAC(self.label,text) = RACObserve(self.viewModel,dateAdded);
现在我们抽象出日期转换到字符串的逻辑到view model,使得代码可以测试和复用,并且帮view controller瘦身。
##项目目录结构
##Objective-C 编码规范 关于Objective-C的编码规范,请参考我翻译的raywenderlich.com Objective-C编码规范
##iOS 最佳实践
##iOS 开源库
#Development Process
根据上面图示,我们简单概括Scrum的开发过程:
- Product Owner(一般都是产品经理)从实际用户、交互设计师、开发人员和测试人员中收集用户故事,从而创建Product Backlog来记录所有的用户故事。
##Prodcut Backlog ###1. 用户角色建模 ####用户角色 很多时候需求分析人员都是从单一的角度来编写用户故事,但这样往往会容易忽略一些故事,因为有些故事并不能反映所有用户的背景、经历和目标。 ####角色建模步骤
- 通过头脑风暴,列出初始的用户角色集合
- 整合角色
- 提炼角色
- 角色建模
####虚构人物 虚构人物能够真正代表产品的目标用户,从虚构角度来描述故事会变得更加生动,更贴近用户使用过程。
####极端人物 极端人物很可能会让你编写出原本可能遗漏的故事。
###2. 编写用户故事
###3. 估算用户故事
###4. 测试用户故事
##Sprint计划 ##Sprint Backlog ##1-4 Week Sprint ##Sprint演示
#Best Practices
##增量设计与重构
##TDD与BDD
##Git版本控制和工作流
##持续集成测试
##代码规范
##Code Review
#Join Us