私はさまざまなターゲット向けのクロスプラットフォーム UI ツールキットを作成していますが、その一部は埋め込まれています。これらのプラットフォームの一部は「保持」レンダリング モードをサポートし、一部はより「即時」であるため、ビジュアルには 2 つのツリーがあると考えています - 疑似コード:
abstract class Visual
{
Visual( Widget widget ) { this.widget = widget; }
}
abstract class RetainedVisual : Visual
{
abstract void Setup( Renderer r );
abstract void Teardown( Renderer r );
}
abstract class ImmediateVisual : Visual
{
abstract void Paint( Renderer r );
}
ここまでは順調ですね。しかしContainerVisual
、ウィジェット階層をエンコードするクラスもあります。
abstract class ContainerVisual : Visual
{
void AddChild( Visual child ) {}
}
これは、肥大化したように見え始めている anImmediateContainerVisual
および aクラスを持つことを強制します。RetainedContainerVisual
より良いデザインのアイデアはありますか?