Skip to content

ValiantCat/ElemeProject

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 

Repository files navigation

ElemeProject

Sam Lau用Objective-C编写的一个模拟的饿了么客户端

##Table of Contents ###1. Prerequisite (先决条件) ###2. Development Process (开发过程) ###3. Best Practices (最佳实践) ###4. Join Us (共同参与项目)

#Prerequisite ##敏捷开发

##MVVM(Model-View-View Model) MVVM high level.png 在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的开发过程:

  1. Product Owner(一般都是产品经理)从实际用户、交互设计师、开发人员和测试人员中收集用户故事,从而创建Product Backlog来记录所有的用户故事。

##Prodcut Backlog ###1. 用户角色建模 ####用户角色 很多时候需求分析人员都是从单一的角度来编写用户故事,但这样往往会容易忽略一些故事,因为有些故事并不能反映所有用户的背景、经历和目标。 ####角色建模步骤

  1. 通过头脑风暴,列出初始的用户角色集合
  2. 整合角色
  3. 提炼角色
  4. 角色建模

####虚构人物 虚构人物能够真正代表产品的目标用户,从虚构角度来描述故事会变得更加生动,更贴近用户使用过程。

####极端人物 极端人物很可能会让你编写出原本可能遗漏的故事。

###2. 编写用户故事

###3. 估算用户故事

###4. 测试用户故事

##Sprint计划 ##Sprint Backlog ##1-4 Week Sprint ##Sprint演示

#Best Practices

##增量设计与重构

##TDD与BDD

##Git版本控制和工作流

##持续集成测试

##代码规范

##Code Review

#Join Us

About

模仿一个O2O App:饿了么

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published