...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

ViewあるいはPresentationと,Modelを分離する試み

import std.stdio;

enum Message
{
	OnDraw,
	OnChange,
}

class TextBoxVew /+ : GUIObjectView+/
{
	private string delegate() stringGetter;
	private void delegate(string) stringSetter;
	
	public this(string delegate() stringGetter, void delegate(string) stringSetter)
	{
		this.stringGetter = stringGetter;
		this.stringSetter = stringSetter;
	}
	private /+override+/ void onDraw()
	{
		writeln(stringGetter());
	}
	private /+override+/ void onChange(string newString)
	{
		stringSetter(newString);
	}
	// 本当は裏で動いているイベントシステムが呼び出す関数(publicにしたくないなあ)
	public void messageInterpretation(Message message)
	{
		switch (message)
		{
			case Message.OnDraw:
				onDraw();
				break;
			case Message.OnChange:
				onChange("bar");//どうやって"bar"を受け取るんだ?
				break;
			default:
				break;
		}
	}
}

void main()
{
	string model = "foo";
	auto view = new TextBoxVew({return model;}, (string s){model = s;}); // viewとmodelをbind
	
	// イベントループをエミュレート
	view.messageInterpretation(Message.OnDraw);
	view.messageInterpretation(Message.OnChange);
	view.messageInterpretation(Message.OnDraw);
}