リファクタリング:Canvas

ここで、リファクタリングを実施する目的は、分離コードを IronPython で記述しても、XAML と同等の「簡潔な」表現ができるように拡張することです。

# catCanvas.py
class ExCanvas(Canvas, ExPanel):
def __init__(self, parent,
background=None, Top=None, Left=None, **args):
self._init(parent, background, Top, Left)

def _init(self, parent, background, Top, Left):
ExPanel._init(self, parent, background=background)
if parent:
parent.SetTop(self, Top)
parent.SetLeft(self, Left)

このクラスでは、既存の Canvas を再利用するとともに、共通の ExPanel が提供する mix-in 操作を使って拡張します。
メソッド __init__ では、親 parent の子要素として、自身 self を組み込みます。キーワード引数 background= を導入して(プロパティー Background に代わって)背景色を文字列で指定できるようにします。キーワード引数 Top=/Left= を導入して、親要素からの相対位置を指定できるようにします。
補助関数 _init における位置引数 Top/Left は、XAML と同じ名前のプロパティー Top=/Left= に対応するもので、親 parent に対するメソッド呼び出し SetTop/SetLeft を隠蔽します。
《付記》実現方法に依存しないように what/how を役割分担するのは、情報隠蔽の原則に沿って、再利用性/拡張性に優れたシステム開発の指針のひとつとなります。□


2/3