関心の分離:what/how

分割統治法(関心の分離)に従って、与えられた問題を小さな問題に分割してから、個別に問題を解決します。そして、アプリケーションに固有の問題は何かを探ります。すると「何をどのように表示したいか」に着目するとよいことが分かります。ここでは、色情報(what)とその表示方法(how)とに分割できます。つまり、どの色を表示したいのか、どのように表示するのか、その間に境界線を引くのです。


class ColorPanel(JPanel):
def __init__(self, listData):
self.listView = JList(
listData=listData,
valueChanged=self.valueChanged,
)
self.panelView = JPanel(preferredSize=(100, 100))
self.add(JScrollPane(self.view), BorderLayout.CENTER)
self.add(self.panel, BorderLayout.EAST)
def valueChanged(self, e):
self.panelView.background = eval(
"colors.%s"%e.source.selectedValue)


このクラスでは、アプリケーションに固有の実現方法を規定します。すると、次の例題ように、

    listData = [e for e in dir(colors) if not e.startswith("_")]
frame = JFrame(
defaultCloseOperation=JFrame.EXIT_ON_CLOSE,
title="Observer: @1",
bounds=(0, 0, 240, 112),
)
frame.add(ColorPanel(listData))
frame.visible = True

ColorPanel(listData) が、ドメイン領域に対する「境界」情報を提供します。そして、ColorPanel は、JList/JPanel の間に位置して、その情報を仲介します。
JList は、リスト項目が何を意味するのか知りませんし、それを知る必要もありません。ただ、選択された項目を通知するだけです。JPanel は、選択された項目から色情報をどのように獲得するのか知りませんし、それを知る必要もありません。ただ、指定された色で背景を描くだけです。それを知っているのは、ColorPanel だけです。個別の情報に深く介入させないのが、柔軟性に優れたアプリケーションを開発するコツです。


《ひよ子のきもち♪2007/05/21》