Если вы были строгими, вы можете утверждать, что безработный не имеет профессии или работодателя, поэтому объект-человек не должен обладать этими свойствами.Это приводит к чему-то вроде этого.
class Person
{
public EmploymentStatus EmploymentStatus { get; set; }
}
class EmployedPerson : Person
{
public string Occupation { get; set; }
public Company Employer { get; set; }
}
Однако на практике с этой неумолимой объектной моделью будет неудобно работать, так как вам нужно будет знать, работает ли человек, прежде чем создавать экземпляр объекта.Также будет трудно выбрать между занятым и безработным, так как вам придется создавать новый объект и копировать все по всему.
Клиническое различие не стоит.Я думаю, что столь же правильно и на самом деле более логично спрашивать безработного, кто является его работодателем, и чтобы он отвечал «у меня его нет», а не был в состоянии задать вопрос в первую очередь.
Для меня это был бы более гибкий класс.
class Person
{
public Person()
{
this.EmploymentStatus = EmploymentStatus.Unemployed;
}
public void Hire(Company employer, string occupation)
{
this.Occupation = occupation;
this.Employer = employer;
this.EmploymentStatus = EmploymentStatus.Employed;
}
public void Fire()
{
this.Occupation = null;
this.Employer = null;
this.EmploymentStatus = EmploymentStatus.Unemployed;
}
public EmploymentStatus EmploymentStatus { get; private set; }
public string Occupation { get; private set; }
public Company Employer { get; private set; }
}