为了简单起见:假设您有一个包含下表的实体关系图 (ERD):
调查
:ID、姓名、问题问题
:ID、文本、调查
在这种情况下,调查
有一个或多个问题
,并且问题
仅属于一项 调查
。
我的问题是,我可以仅使用类重新创建此架构,而无需任何持久层(如领域或核心数据)吗?这是我的意思的简单演示:
struct Survey {
var id: Int
var name: String
var questions: [Question] // 1 or more questions
}
struct Question {
var id: Int
var text: String
var survey: Survey // belongs to only one survey
}
我尝试了这种方法,但显然由于一对多关系,以下代码将不起作用:
let survey = Survey(id: 0, name: "First survey", questions: [
Question(id: survey.id, text: "Whats your name", survey: survey) // This is not possible.
])
更多背景:我想创建一个调查应用程序。该应用程序的架构很难设计,因为调查将支持多种类型的问题(多项选择、开放式问题、是/否问题等)。通过在线搜索,我发现有一些针对类似 this 的调查的 ERD 设计。一。问题是这个 ERD 设计是针对数据库的..但我现在不想创建数据库。然而,我认为在架构上设计可以使用类来表示。那么问题是如何?
最佳答案
这两个对象之间存在依赖关系,因为两个结构的初始化程序都希望之前创建其他结构,这只是设计中的错误。 您可以通过使用可选或隐式解包可选(这是不安全的)来解决这种依赖关系。
这是解决这个问题的一种明显方法,
struct Survey {
var id: Int
var name: String
var questions: [Question]! // 1 or more questions
init(id: Int, name: String) {
self.id = id
self.name = name
}
}
struct Question {
var id: Int
var text: String
var survey: Survey // belongs to only one survey
}
因此,您可以创建一个对象,而不需要创建其他结构并只需使用赋值,而不是在初始值设定项内传递对象。
var survey = Survey(id: 0, name: "First survey")
survey.questions = [
Question(id: survey.id, text: "Whats your name", survey:survey) // This is not possible.
]
关于swift - 创建基于ERD的类架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48886582/