类似于关系数据库的模型的类或结构?

迈克尔·沃科拉

有问题的应用程序构建如下:

  • 用户选择工作
  • 这项工作可以包含许多组成部分
  • 每个组件可以有很多lineitem。

我不清楚应该如何构造它-应该是类还是结构?看到一次只处理一个作业,我相当有信心该作业应该是一类。但是,当存在某个对象类型的倍数时,我不清楚如何形成它们,例如组件和lineitem对象。

该应用程序由ViewControllers和TableViewControllers组成。所有数据均以JSON格式从服务器中获取,并根据需要填充到适当的视图中。以下是当前设置的对象类型:

作业对象:

// Job Object
//
public struct Job {
    static var globalId : String?
    static var name : String?
    static var status : String?
    static var client = Client()
    static var components = Array<Component>()
    // etc..
}

像这样的组件:

// JobComponent Object
//
public struct Component {
    var name:String? = ""
    var fmRecordId : String?
    var startTS:NSDate?
    var endTS:NSDate?
    var notes:String? = ""
    var items = Array<Lineitem>()
    // etc...
}

最后是一个lineitem:

// Lineitem Object
//
public struct Lineitem {

    var fmRecordId = String()
    var itemName = String()
    var itemNumber = String()
    // etc...
}

所有这些对象都建立在一个public class称为“ PL”的内部。

当用户选择lineitem并编辑其值时,这些值在编辑它们的VC之外不可用,因为VC没有引用传递的lineitem,它只是在复制它。组件也是如此。

我发现一种解决方法是使用Job结构,PL.Job.self并始终像在其中修改组件和lineitems一样,其中i=数组中的所需索引:

  • PL.Job.components[i] 访问组件
  • PL.Job.components[i].items[i] 访问该组件中的特定项目。

但是,这不能很好地扩展。

期望的行为是能够传递对对象的特定实例的引用,而不是绕过对象中那些对象的索引路径PL.Job

我很清楚目前的结构存在问题,但是有人可以指出正确的方向吗?

Letvargo

要点:

  • 您只能通过引用传递类实例。如果您希望能够参考传递给特定的LineItemComponent或者Job,你希望能够更改该对象是有效的无处不在,那么你需要将其定义为类,而不是结构。结构类型的实例始终按值传递,而不是引用。当传递值类型时,它会被复制,这意味着您将创建该对象的全新副本,并且对该副本进行更改不会对原始对象产生影响。

  • 您的Job结构只有静态属性-即会有永远只能是一个globalIdnamestatus等您的整个应用程序。如果您想拥有的多个实例Job,则这些实例不应为静态属性。您说一次Job只能处理一个,所以也许是故意的。无论哪种方式,创建Job具有这些属性的实例通常还是比较可取的如果您决定允许在内存中保留对多个作业的引用,或者允许用户在不同的作业之间进行选择,或者在作业之间进行切换等,那么肯定会给您带来更大的灵活性。例如,您可能希望允许用户切换到Job他们正在处理的较早版本,而不必破坏Job 他们正在努力。

但是我认为要点是,如果您希望能够通过引用传递对象,则需要将它们定义为类。如果修改通过引用传递的对象,则对同一对象的所有其他引用将显示相同的更改(因为毕竟它们只是对同一对象的引用)。这不适用于值类型(例如结构)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

关系数据库结构要求

来自分类Dev

比较Cassandra结构和关系数据库

来自分类Dev

特定查询的关系数据库设计结构

来自分类Dev

何时使用关系数据库结构?

来自分类Dev

关系数据库结构逻辑配置

来自分类Dev

关系数据库模型中的Django POST方法

来自分类Dev

在NoSQL数据中使用类似架构的关系数据库

来自分类Dev

Laravel关系数据库连接

来自分类Dev

使用关系数据库

来自分类Dev

关系数据库组织

来自分类Dev

关系数据库(外键)

来自分类Dev

ERD映射-关系数据库

来自分类Dev

Ruby中的关系数据库

来自分类Dev

关系数据库:变量字段

来自分类Dev

关系数据库查询失败

来自分类Dev

对象关系数据库主键

来自分类Dev

关系数据库系统中使用的数据结构

来自分类Dev

关系数据库系统中使用的数据结构

来自分类Dev

如何将数据从表格模型(SSAS表格)传输到关系数据库?

来自分类Dev

关系数据库中的多维索引结构是什么?

来自分类Dev

Java对象结构最适合表示关系数据库

来自分类Dev

用于比较多个日期的关系数据库的结构

来自分类Dev

图形或关系数据库更适合这种树形结构?

来自分类Dev

用于比较多个日期的关系数据库的结构

来自分类Dev

用于存储用户多个爱好的关系数据库结构

来自分类Dev

弹性搜索的性能是否会受到关系数据库模型(如MySQL)的影响?

来自分类Dev

弹性搜索的性能是否会受到关系数据库模型(如MySQL)的影响?

来自分类Dev

使用关系数据库 ADO.NET 模型的 ASP.NET Web 服务

来自分类Dev

MySql | 在性能方面关系数据库与非关系数据库