第一次尝试Obj-C的开发,求客户端数据层的设计方案?

2013-02-04 22:29:54 +08:00
 notedit
背景: 没有Obj-C的开发经验 只看了些Obj-C的基础 想在两个月的业余时间之内完成一个App的开发

现在的需求:

根据做后端的经验,我会把数据的访问封装起来供视图层调用.在客户端也想这样设计,但没有经验.

现在的一个想法是 使用restkit的model map 来做Model的解析 从api取得数据之后转化为数据Model, 然后把这些数据的操作全部封装到一个类中

不知道有没有更好的方案或者更好的类库可以使用.


另外这个项目是自己第一次App开发的尝试,希望能遇到一个有经验的App开发者可以带我一下.
没有直接金钱上的回报,但我可以教你python或者帮你做后端 然后做做朋友.
6364 次点击
所在节点    iDev
35 条回复
alexrezit
2013-02-04 22:35:42 +08:00
没懂楼主要做什么, 不过我觉得 Stanford CS193P 课程的第一课十有八九能解决你的问题.
苹果官方的文档还是不错的, 用惯了他们的文档再搞 web.py 差点吐血三升. (于是至今不咋会 Python... =-=
sivacohan
2013-02-04 22:59:45 +08:00
@alexrezit 你可以问楼主flask
alexrezit
2013-02-04 23:05:09 +08:00
@sivacohan
忘了之前在哪儿看到有人说 web.py 现在不怎么更新了所以推荐用 flask.
前一阵儿我娘想学 coding, 我还极力推荐 Python 来着~ =-=
sivacohan
2013-02-04 23:32:51 +08:00
@alexrezit 最近咱父母都有逆袭的趋势啊!
notedit
2013-02-04 23:53:38 +08:00
@alexrezit 我是想求一个客户端数据层的设计方案
notedit
2013-02-04 23:57:40 +08:00
@alexrezit oc的基础我是知道的 我想从代码组织结构方面了解一些一个App的设计
virushuo
2013-02-05 00:01:46 +08:00
restkit是个好东西。如果你的model能完全对上api模型,那么用restkit直接管理数据层没问题。但自己多少还是要明白Core Data的。

另外restkit新版变化不小,要注意兼容问题。
notedit
2013-02-05 00:04:37 +08:00
@virushuo 能给一个开源的例子么 我在github没有找到最新版restkit复杂一点的例子

比如 我一个api 返回的结果是 多个Model组合起来的 那在客户端该怎样处理呢
virushuo
2013-02-05 00:11:11 +08:00
@notedit
开源的例子好像没有,我也是慢慢试着来的。有问题就去翻讨论组,各种问题都有问到。

组合起来的大概就是这样:比如你有一个Meta的Mapping ,要嵌入其他对象里面,就这样映射。
[manager.mappingProvider setObjectMapping:[Mapping MetaMapping] forKeyPath:@"meta"];


另外我还没迁移到最新,新的情况我还不太知道(如果用了AFNetworking就是新版)
notedit
2013-02-05 00:21:40 +08:00
@virushuo 好的 多谢 另外你也是golang的爱好者 幸会
virushuo
2013-02-05 01:15:21 +08:00
@notedit 哈哈,是啊。python我也挺喜欢,不过没啥正经地方用。
Livid
2013-02-05 01:18:43 +08:00
你可以看看这个解决方案:

http://www.parse.com/
notedit
2013-02-05 01:47:33 +08:00
@Livid 谢谢 之前用python的时候用过他们的服务 速度有些慢 而且偶尔会超时
ewangke
2013-02-05 03:24:15 +08:00
@notedit
iOS的开发要设计先行,先把UI、交互、体验设计好。
如何请求数据,如何设计数据层是之后的事情。

关于代码结构:
一般来说数据层只负责获取数据,UIController是负责交互行为的,视图一般使用标准控件或者第三方组件这些可重用的组件,很少直接写UIView。

关于数据层内部的结构:
猜楼主是做网络应用吧。一般api请求返回的都是json/plist这些结构化的数据。
几种思路(由易至难):
一、直接使用NSDictionary/NSArray(稍复杂的产品不推荐)
二、无Model相关的类,完全在api request的callback里面更新UI部分(限制太多了,写到后面经常发现搞不定)
三、自己使用NSObject定义一套同构的类来表示数据(好处:编译器的类型检查;坏处:写一堆代码)
四、使用ObjC Runtime,利用反射/自省的机制,动态生成property(好处:少写很多无聊的代码;坏处:运行时才发现property存在问题)

我倾向的方案是三;如果Model太复杂,建议写一个脚本,根据api的规则,编译期自动生成Objective-C的Model类;

PS: @Livid推荐的Parse,做做原型还好,挺方便的。这种平台会把服务器端绑死,而且第三方的SDK能少则少。App不是Web,bug上线了就是上线了;审核至少要7天吧...
ewangke
2013-02-05 03:27:26 +08:00
@notedit
补充一下,上面我说的第四种方案,是最“酷”的方案。很多时候,这种方式非常方便(尤其是维护阶段)。
但它最大的问题就是不直观,而且对工程师水平要求较高(大概比例是每100个Objective-C工程师,20个听说过这种方法,敢碰的不到5个,真正用好的能有一个就不错了)。

楼主既然练手,就都试试,没坏处。
myrual
2013-02-05 09:01:24 +08:00
@ewangke 四、使用ObjC Runtime,利用反射/自省的机制,动态生成property(好处:少写很多无聊的代码;坏处:运行时才发现property存在问题)

能解释一下什么意思么?或者给个例子?
sharpnk
2013-02-05 09:49:53 +08:00
- 使用restkit的model map 来做Model的解析 从api取得数据之后转化为数据Model

这个步骤restkit的object mapping+coredata完全可以一步到位. 而且像你这样API和客户端均在可控范围内的情况,选这个组合基本就是个no brainer.

刚开始的学习曲线比较陡,但熟悉了之后能省下你很多的时间。另外它其实自己就带了不少实例代码,我基本就是靠着那几个示例外加它自带的文档一路摸索下来的。社区方面, SO还好一些, 我在restkit那个google group基本得不到任何有价值的答复。

这个是用restkit+coredata做的:
https://github.com/bendyworks/TravisCI.app
PrideChung
2013-02-05 09:51:19 +08:00
@ewangke 第四种方案是指利用KeyValueCoding自动生成property?

我发现可以用CoreData的代码生成器来生成Model Object,如果不需要持久化的话就把Transient勾上,这样还能利用到CoreData的其他功能,例如validation,relationship,不知道能不能算是方案5。

RestKit我觉得偏重了,还是倾向于使用AFNetworking,自己做Mapping的工作。
alexrezit
2013-02-05 09:59:01 +08:00
@ewangke
能说英文么... 中文表示接受不能... 最后一条是指 KVC / KVO?
notedit
2013-02-05 11:34:38 +08:00
@sharpnk 谢谢你的例子 现在比较倾向于使用restkit

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/59781

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX