Обычно зарплата сотрудника HAS-A. Так что я бы пошел с чем-то вроде:
Employee emp = new Employee();
emp.Salary = new Salary();
Вы можете создать общий класс, который будет извлекать из него все бизнес-правила расчета зарплаты (из источника данных) и рассчитывать зарплату для сотрудников на основе атрибутов сотрудника.
SalaryCalculator.CalculateSalary(emp); //I'd agree with Silky
DataAccess.Save(emp); //This shall save changes in emp as well as in salary.
- EDIT -
Это ответ на ваш комментарий.
Ваш объект hrms
(если имеется) должен затем инкапсулировать Employee
и предоставить параметр CalculateSalary
.
Как насчет чего-то вроде:
yourHrms.Employees.Add(new Employee(Age, Name, DateOfBirth, EmployedSince, TotalExperience, IsManager, new Salary(someStartPointForSalaryIfAny));
Здесь ваш класс Salary наследуется от вашего абстрактного класса BaseSalary, который будет содержать бизнес-правила и будет выполнять ионы Calculate()
. Поэтому new Salary(someStartPointForSalaryIfAny)
будет выполнять вычисления внутри.
Для сохранения вашего объекта вы можете иметь:
yourHrms.Employees.Save();//Saves all employees.
yourHrms.Employees[0].Save();//Save this.