从打造新闻app学到的(1):抽象概念,定义好的数据结构

怎么从JSON拿数据学会了,那么接下来就是正式打造一个自己的新闻客户端了。虽然我Swift语法还没认真学完,但实在是心痒痒,就跳过一点基础,先来个实战吧!经过这个礼拜,我的APP也基本成型了。网上关于怎么做一个新闻客户端的例子很多,我就不赘述了,只是把过程中碰到的一些小问题和心得、我自己无法很容易搜到完美答案的写一写。过程中的弯路肯定没少走,但经验的收获也是不少的。

关于这个APP使用的数据结构,其实我是重构过的。新闻一般都是有两种数据源:新闻列表(List),和单条新闻(Post)详细信息。开始我在playground写了对应的List&Post数据结构,以及处理数据的函数。打印测试成功后,往project里面放的时候……不忍直视!作为一个初学者,我往viewDidLoad()里面塞了几乎所有的流程调用,以至于第一次运行成功在模拟器中看到数据的时候,我最大的感觉不是兴奋,而是我怎么把code写得这么丑陋!😖
功能不行可以再学习怎么做,但代码太丑是真真正正不能忍!我曾经的经验如是告诉我。我试着模块化各种数据和过程,一番思考和尝试后,变成了现在的结构:

DataManager是整个业务的最顶层类,它提供了很少的几个接口供ViewController使用:请求最新列表、请求更多列表数据、请求某个新闻、少量设置,并且设置也都是有default值的。考虑到将来有可能支持更多的新闻网站,GetURL和数据解析部分也是独立可更换的模块。在数据结构部分,我定义了一个Item类型,包括几个通用的属性,以及几个通用函数的实现,然后让ListItem,PostItem,CommentItem分别继承。这样既逻辑清晰,减少重复代码,也便于调试。所有上层不需要知道的参数都封装在内部,只有一个Manger和它的API,以及几个配置属性暴露在外。
也许这样的抽象定义过程,对于老手来说是不值一提的基础,就像吃饭要先煮饭一样简单。但我想对于刚刚接触APP开发的新人来说,如何更好的定义数据结构和API,恰当地抽象各种概念,还是值得多多思考的功课。