【发布时间】:2018-08-14 20:26:53
【问题描述】:
我一直在使用带有实体框架 (EF) 的存储库设计模式来使用 C#,它允许我使用每个表的通用类与数据库进行交互。
此存储库具有我需要的所有功能,例如:向数据库中添加新实体、更新现有实体、删除实体、保存上下文等等......
例如,我在数据库中有一个名为“Person”的实体。我将创建一个名为 PersonRepository 的新类,它具有更改/向数据库添加值所需的所有功能。
因此,要与数据库交互,您需要创建存储库类的实例。然后,这允许您调用该类的函数,该函数又与数据库交互。这种模式的想法是,您对实体的所有数据库调用都被隔离到一个类中,这提高了可测试性和关注点分离。
我正在学习如何在我的 Swift 程序中使用 Core Data,它似乎类似于 C# 中的 EF。我已经在 .xcdatamodel 文件中创建了实体,并通过 Editor > Create NSManageedObject subclasses 选项创建了关联的 Cocoa Touch 类。
我使用了“Category/Extension”CodeGen 选项,因此,我创建了一个名为“Exercise”的新类。根据我的阅读,这个类可以包含额外的逻辑,例如覆盖 prepareForDeletion 方法。这是否意味着我可以将 addEntity、updateEntity 函数添加到此方法中,然后从其他代码文件中调用它们?
我的问题是:
我能否实现可以在 C# 中使用的相同存储库模式? 我相信这将在我的实体的生成类上(见下图)
我应该将所有数据库调用函数放在哪里?如果我可以使用此存储库模式,我会将它们放在那里,但是,如果我不能,我是否将它们放在单独的代码文件中?我应该将它们放在为添加额外逻辑而创建的生成实体文件中吗?
- 如果我可以使用存储库模式,有没有办法将上下文注入到此类中,或者,每次我想更改它时都必须调用 getContext 方法吗?在 C# 中,每次我想对数据库进行更改时,我们都可以使用服务将上下文注入到类中 - 我不确定在 Swift 中是否可以这样做。
【问题讨论】: