В дополнение к этому вопросу:
Композиция над наследованием - куда идут дополнительные свойства?
Принятый ответ и аналогичные ответы на него неплохо отвечают.Но, если пойти дальше, что делать, если отдел продаж и производственный отдел захотят записать различную информацию об отсутствии по болезни и в отпуске?Это может быть одно решение:
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.Я искал повсюду пример того, как отобразить шаблон Decorator в NHibernate, и ничего не нашел.В моих экспериментах, и в одном пункте, использовались различные комбинации отображений подклассов, отображений объединенных подклассов, отображений объединяющих подклассов, дискриминаторов, неявного полиморфизма и отображений "многие ко всем", но пока без удовлетворительных результатов.Кто-нибудь взломал этот?Сущность Employee должна иметь набор отсутствий любого типа, поэтому требуется полиморфное поведение.