第10章 用Shelve保存和获取对象
在许多应用中,我们需要独立地持久化多个对象。第9章“序列化和保存——JSON、YAML、Pickle、CSV和XML”中使用的技术更偏向于处理单一的对象。有时候,我们需要持久化更大的域中的独立对象。
应用程序中通常在4种情况下会持久化对象,它们统称为CRUD操作:创建(Create)、获取(Retrieve)、更新(Update)和删除(Delete)。通常,它们中的任意一个操作都有可能应用于域中的任意对象,这就需要一个更复杂的持久化机制,而不是使用单一的负载机制或者全部保存到一个文件中。除了浪费内存之外,单一的负载和全部保存到文件的效率通常低于更细粒度的基于对象的存储机制。
使用更复杂的存储机制要求我们必须更仔细地思考职责分配。不同的关注点为我们的应用程序架构提供了全局的设计模式。这些高层设计模式的一个例子是三层架构(Three-Tier** Architecture**)。
- 表示层(Presentation tier):这可能是一个Web浏览器或者一个移动应用,有时候同时包括这两个。
- 应用层(Application tier):这层通常部署在应用程序服务器上。应用层应该被细分为应用程序层(appllication layer)和数据模型层(data model layer)。应用程序层的类包含了应用的行为。数据模型层定义了问题域的对象模型。
- 数据层(Data tier):这层包括一个访问层(access layer)和一个持久化层(persistence layer)。访问层为持久化对象提供了一致的访问方式。持久化层会将对象序列化并将它们保存。
这个模型可以应用于一个独立的GUI应用程序。表示层是GUI;应用层是处理业务逻辑的部分和数据模型;访问层是持久化模块。它甚至可以应用于命令行应用程序,这时候表示层就只是选项解析器和 ...
Get Python面向对象编程指南 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.