title: Entity vs Aggregate vs Aggregate Root
body: <p>I am struggling to identify Domain objects. </p>
  
  <p>Problem: </p>
  
  <ul>
  <li>A company has one or multiple Sites </li>
  <li>A Site has main and multiple contacts</li>
  <li>Thus, a company has one or many contacts. These contacts are allocated to Sites. </li>
  <li>Contacts must be added to Sites not to a company</li>
  </ul>
  
  <p>My Understanding:</p>
  
  <pre><code>public class Company : IEntity
      {
           public int CompanyId {get;}
           public string CompanyName {get;}
           //.....
      }
  
      public class Site : IEntity
      {
           public int SiteId {get;}
           public string SiteName {get;}
           //.....
      }
  
      public class Contact : IEntity
      {
          public int ContactId {get;}
          public string SurName {get;}
          public bool MainSiteContact {get;}//Confused!! May be this is not the right place
           //.....
      }
  
      public class SiteContact : IAggregate
      {
          public Site ASite { get; }
          public List&lt;Contact&gt; Contacts { get; }
          public Contact MainContact {get;}//Confused!! 
          //.....
          public Contact AddSiteContact(...)
          {
          }
      }
  
      public class CompanySites : IAggregateRoot
      {
          public Company ACompany { get; }
          public List&lt;Site&gt; Sites { get; }
          public List&lt;SiteContact&gt; Contacts { get; }
          //.....
      }
  </code></pre>
  
  <p>Am i in the right direction? Please correct me if i am wrong...</p>
  
  <p><strong>Update</strong>
  @Beachwalker elaborate the question properly in the comment section below the answer of @Aydin Adn.</p>
  
  <blockquote>
    <p>@Aydin Adn I think his questions has more than one aspects: 1. How
    these objects fit correctly in the context of a Domain Driven Design
    (DDD) aproach and what is their DDD presentation, e.g. AggregateRoot,
    Entity, ValueObject etc. 2. Is the interpretation of the Domain
    correct. (Domain Model)</p>
  </blockquote>