底层是 SQLite.swift,用 Swift 2 制作自己的数据访问层

Swiftkelby • 于 2015-10-02 06:14:56 +0800 • 1837 阅读

原文链接 Create a Data Access Layer with SQLite.swift and Swift 2,下文只是简单描述,并非翻译。


标题虽然含有 SQLite.swift,但它不是重点,Swift 2 也不是,“如何设计数据访问层?”才是本文重点。

Data Access Layer Introduction

数据访问层(Data Access Layer):又称为 DAL 层,有时候也称为是持久层,其功能主要是负责数据库的访问。简单的说法就是实现对数据表的Select(查询),Insert(插入),Update(更新),Delete(删除)等操作。如果要加入 ORM 的元素,那么就会包括对象和数据表之间的 mapping,以及对象实体的持久化。

本文“数据访问层”由 3 部分构成。

底层:Connection Layer 连接层(连接数据库,“真正的”执行操作,与中间层、上层无关,与业务逻辑无关)
中间层:数据操作层(和业务有关,但只负责增、删、查、改等操作,不要有过多、复杂逻辑)
上层:Model 层(和业务紧密相关,与中间层协同完成任务)

file

本示例中,用到两个表 Teams 和 Players ,对应 Team 和 Player 作为上层;
从描述上看,我们需要 TeamDataHelper 和 PlayerDataHelper 作为中间层。

Connection Layer

一些底层,与业务逻辑无关的数据访问异常。

本文由 SQLiteDataStore 完成,包括初始化、链接数据库、创建表等。另,SQLiteDataStore 以单例模式实现,有众多好处,避免了bala.. bala..

Model Layer

涉及具体业务了。

1)创建 enum Positions 准备给下面的 Player 用。

2)定义给 model 用的类型,在这里就是:Team 和 Player。因为它们只用于传递数据,所以作者选择的是值类型。作者还解释了为什么不会放到业务逻辑层,因为表结构可能会被更改,作者不希望因为更改了表结构,而影响了业务逻辑层。(低耦合)

Data Helper Layer

用途:连通 connection layer,有 data helper class 和 table 一一对应。

定义 DataHelperProtocol 给对应 DataHelper 用。

DataHelperProtocol 主要功能声明:createTable、insert、delete 和 findAll.

查询方法多,并且有的复杂,在这里只做 findAll 其它另外声明。

实现 TeamDataHelper (当然,它要遵行对应的 DataHelperProtocol)
同理,实现 PlayerDataHelper (当然,它要遵行对应的 DataHelperProtocol)

上述实现,都有代码讲解,在此略过。

Using the Data Access Layer

1)创建 model 对象。在这里是 Player 或 Team

2)把 model 对象传递给对应 helper class 进行插入操作。在这里是 PlayerDataHelper 或 TeamDataHelper

注意:这里以 insert函数(model对象, 参数) 的方式调用,而非 model对象.insert(参数) 这种方式调用。也可以说是面向函数,而非面向对象。

3)通过 helper class 进行查询操作。在这里是 PlayerDataHelper 或 TeamDataHelper

Conclusion

如果你底层操作使用的也是 sqlite.swift,那么本文在设计“数据访问层”这方面,还是有一定借鉴意义的。

就抽象程度和拆分方面,本文做得都不错。

当然了,您实际项目中的查询操作,不会像示例项目这样简单,会更多、更复杂,它们就需要您自己扩展了。


示例虽好,原理、设计虽棒,但没有合适的 ORM,也够让人头痛。(我喜欢自黑,你们不要管我)

====

想及时了解 Swift 相关问题、文章、新鲜事,可关注微博 @Swift-CN

回复: 0
暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,见 Emoji cheat sheet
  • @name 会链接到用户页面,并会通知他
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
Ctrl+Enter