Либо сделайте Document базовым типом формы и т. Д., Либо создайте для формы дополнительные поля и ссылку на отдельный документ (т. Е. Используйте композицию вместо наследования). В этом случае кажется, что наследование будет лучшим вариантом, но это зависит от того, что вы хотите с ним делать. У вас есть код, который предназначен для работы с любым документом, включая форму, WorkInstruction и т. Д.?
РЕДАКТИРОВАТЬ: например, предположим, что у вас есть элемент управления пользовательского интерфейса, который может отображать общие части любого документа - то есть общие 8 полей. Это займет экземпляр документа. Вы можете хотеть иметь возможность передать ему форму или рабочую инструкцию напрямую - в этом случае лучше всего получить из документа. В качестве альтернативы, при рендеринге Form или WorkInstruction, вы можете создать экземпляр элемента управления, передаваемого в части документа отдельно. то есть разница между этим (в C # - вы не указали, какой язык вас интересует):
class Form : Document { ... }
// Later on
Controls.Add(new DocumentDisplay(form));
и это:
class Form
{
private Document Document { get; set; }
// Other stuff
}
// Later on
Controls.Add (new DocumentDisplay(form.Document));
Не зная остальную часть вашего дизайна, трудно рекомендовать один или другой. Я обычно предпочитаю композицию, а не наследование, но это похоже на ситуацию естественного наследования.