protected override HashCodeBuilder CalculateHashCode()
 {
     return(HashCodeBuilder
            .CreateNew()
            .Add(EmployeeId.GetHashCodeBuilder())
            .Add(Name.GetHashCodeBuilder())
            .Add(Address.GetHashCodeBuilder()));
 }
        protected Employee(EmployeeId employeeId, Name name, Address address)
        {
            employeeId.EnsureNotNull("Employee id must not be null.");
            name.EnsureNotNull("Employee name must not be null.");
            address.EnsureNotNull("Employee address must not be null.");

            EmployeeId = employeeId;
            Name       = name;
            Address    = address;
        }
 public static SalaryEmployee CreateNew(EmployeeId employeeId, Name name, Address address, Money salary)
 {
     return(new SalaryEmployee(employeeId, name, address, salary));
 }
        protected SalaryEmployee(EmployeeId employeeId, Name name, Address address, Money salary) : base(employeeId, name, address)
        {
            salary.EnsureNotNull("Employee salary must not be null.");

            Salary = salary;
        }
 public static HourlyEmployee CreateNew(EmployeeId employeeId, Name name, Address address, HourlyRate rate)
 {
     return(new HourlyEmployee(employeeId, name, address, rate));
 }
 private HourlyEmployee(EmployeeId employeeId, Name name, Address address, HourlyRate rate) : base(employeeId, name, address)
 {
     rate.EnsureNotNull("Hourly rate must not be null.");
     Rate = rate;
 }
 public static CommissionEmployee CreateNew(EmployeeId employeeId, Name name, Address address, CommissionRate rate, Money salary)
 {
     return(new CommissionEmployee(employeeId, name, address, rate, salary));
 }
 private CommissionEmployee(EmployeeId employeeId, Name name, Address address, CommissionRate rate, Money salary) : base(employeeId, name, address, salary)
 {
     rate.EnsureNotNull("Commission rate must not be null.");
     Rate = rate;
 }