假设我想跟踪某些人物及其职业历史记录。 我应该遵循这种方法吗?
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;}
...
}
由于这是一对一的方法,一个人可以拥有一个职业 问题是:我是否需要双向链接,或者更好的是如何链接这两个对象?
由于
答案 0 :(得分:1)
您正在此处创建循环依赖项,也许您应该从Career
类中删除Person
属性。或者相反;从Person
移除Career
。
public class Person
{
public int Id {get; set;}
public string Name {get; set;}
public Person()
{...}
}
答案 1 :(得分:1)
数据将被保留(如果有的话)在如何表示数据方面发挥着重要作用。根据您的问题,您是否将此信息存储在数据库,xml文件或其他介质中尚不清楚。
如果您将其存储在数据库中,那么Career将不会有一个完整的人物对象,而是具有作为外键的PersonID。
在纯OOP方法中,Career对象中不会有person对象。一个人有事业,职业生涯没有一个人。
您可以通过多种方式表示数据,但这完全取决于您计划如何使用和存储数据。
答案 2 :(得分: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),则可以直接存储上述两种模型变体。
但是如果您使用关系数据库以及可能的Entity Framework或其他ORM,您可能需要包含一些数据库ID和外键属性,具体取决于ORM将采用多少魔法。