В дополнение к этому вопросу:
Композиция вместо наследования - куда делятся дополнительные свойства?
Принятый и аналогичные ответы дают хороший ответ. Но если пойти дальше, что, если отдел продаж и производственный отдел захотят записывать различную информацию об отсутствии по болезни и отпусках? Это могло быть одним из решений:
public class Holiday : Absence
{
//Extra fields go here.
}
public class Sickness : Absence
{
//Extra fields go here.
}
public class SalesHoliday : Holiday
{
//Extra fields go here.
}
public class SalesSickness : Sickness
{
//Extra fields go here.
}
public class ProductionHoliday : Sickness
{
//Extra fields go here.
}
public class ProductionSickness : Sickness
{
//Extra fields go here.
}
ясно, что это начало взрывного роста классов, который будет только ухудшаться, и поэтому его следует избегать.
Одним из возможных решений может быть использование шаблона декоратора (Банда четырех). Это было бы идеально, но в этом гипотетическом примере настойчивость проявляется в NHibernate. Я просмотрел повсюду пример того, как сопоставить шаблон декоратора в NHibernate, и ничего не нашел. В моих экспериментах, и в одном случае, использовались различные комбинации отображений подклассов, сопоставлений объединенного подкласса, сопоставлений объединения-подкласса, дискриминаторов, неявного полиморфизма и сопоставлений «многие ко всем», но пока без удовлетворительных результатов. Кто-нибудь взломал этот? Сущность Employee будет иметь набор отсутствий любого типа, поэтому полиморфное поведение является обязательным.