title: DDD Choosing Aggregate Roots
body: <p>Building a time tracking application I am trying to determine the best way to design the aggregate roots.</p>
  
  <p>The basic core entities are Client, Project, Employee, ProjectAssignment, Department, Timesheet. A Client has one or more projects, a project has one or more employees assigned to it (via ProjectAssignment), an Employee belong to a department, and Timesheet links Project, Employee together.</p>
  
  <p>Client seems like an obvious aggregate root. </p>
  
  <pre><code>Client -&gt; Project -&gt; ProjectAssignment -&gt; Employee
  </code></pre>
  
  <p>Regarding the other aggregates I'm kind of not sure what the best way to go would be...</p>
  
  <p>I was thinking...</p>
  
  <pre><code>Department -&gt; Employee -&gt; Person
  </code></pre>
  
  <p>Or have Employee and Department as separate aggregates entirely. Employees can be in one department and one department only. However department is self referencing to create a department hierarchy. </p>
  
  <p>How do you deal with entities being shared between aggregate roots?</p>