0

假设我想跟踪一些人对象和他们的职业历史记录。我应该遵循这种方法吗?

public class Person
{
  public int Id {get; set;}
  public string Name {get; set;}
  public Career Career {get; set;}

  public Person()
  {...}
}

public class Career 
{
   public Person Person {get; set;}
   public IList<Company> Companies {get; set;}
   ... 
}

由于这是一对一的方法,一个人可以有一个职业我的问题是:我是否需要双向链接,或者更好的是如何链接这两个对象?

谢谢

4

3 回答 3

1

您在这里创建了一个循环依赖项,也许您应该从类中删除该Career属性。Person或者反过来;从. Person_Career

public class Person
{
    public int Id {get; set;}
    public string Name {get; set;}

    public Person()
    {...}
}
于 2012-11-25T18:42:48.410 回答
1

数据的持久化位置(如果有的话)对您如何表示数据起着重要作用。从您的问题来看,尚不清楚您是否会将这些信息存储在数据库、xml 文件或其他介质中。

如果您将其存储在数据库中,那么职业将没有完整的人员对象,而是将作为外键的 PersonID。

在纯 OOP 方法中,Career 对象中不会包含 person 对象。一个人有事业,事业没有人。

有很多方法可以表示数据,但这完全取决于您计划如何使用和存储它。

于 2012-11-25T18:42:52.473 回答
1

它主要取决于两件事:您的应用程序中的聚合域是什么以及您将如何保持它?

如果您正在对基于职业作为中心概念的应用程序进行建模,则Person无需了解职业。这可以采取以下形式:

public class Person
{
  public string Name { get; set; }
  ...
}

public class Career
{
   public Person Person { get; set; }
   public IList<Company> Companies { get; set; }
   ...
}

但另一方面,没有人的职业似乎有点奇怪。Career如果您专注于人和他们的职业,那么这门课可能是多余的:

public class Person
{
  public string Name { get; set; }
  public IList<Company> Career { get; set; }
}

持久性

当然,持久性方法会影响您的模型。我在您上面的评论中看到您打算存储在数据库中。但不清楚是哪种数据库。例如,如果您使用RavenDB等文档数据库,则可以直接存储上述两种模型变体。

但是,如果您使用关系数据库,可能还使用实体框架或其他 ORM,您可能需要包含一些数据库 ID 和外键属性,具体取决于 ORM 的魔力。

于 2012-11-25T19:01:18.503 回答