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;}
   ... 
}

これは 1 対 1 のアプローチなので、1 人が 1 つのキャリアを持つことができます。私の質問は、双方向のリンクが必要ですか、それとも、これら 2 つのオブジェクトをどのようにリンクしますか?

ありがとう

4

3 に答える 3

1

ここで循環依存関係を作成しています。おそらく、クラスCareerからプロパティを削除する必要があります。Personまたはその逆。から削除PersonCareerます。

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

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

データが永続化される場所(あるとしても)は、データの表現方法に大きな役割を果たします。あなたの質問から、この情報をデータベース、xmlファイル、またはその他の媒体に保存するかどうかは明確ではありません。

データベースに保存している場合、Careerには完全なpersonオブジェクトではなく、外部キーとして機能するPersonIDがあります。

純粋なOOPアプローチでは、Careerオブジェクトにはpersonオブジェクトが含まれていません。人にはキャリアがありますが、キャリアには人がいません。

データを表現する方法はたくさんありますが、それはすべて、データの使用と保存をどのように計画しているかによって異なります。

于 2012-11-25T18:42:52.473 に答える
1

アプリケーションの集約ドメインとは何か、そしてこれをどのように永続化するかという 2 つのことに大きく依存します。

中心的な概念としてキャリアに基づいてアプリケーションをモデリングしている場合、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 を使用する場合、ORM がどれだけの魔法を行うかに応じて、いくつかのデータベース ID と外部キー プロパティを含める必要があるでしょう。

于 2012-11-25T19:01:18.503 に答える