次のような文字列を解析しています:
\read(customer) hello world
~> \method(arg, arg, ...)
requestLeaf オブジェクトである1からn 個の引数を永続化する複合データ構造に変換します。この引数はrequestLeaf オブジェクト(プレーン テキストの場合は、上記のように返される必要があります ("hello world")) または別のrequestComposite オブジェクト(再びプレーンテキストになるまで(読み取り->顧客など)何らかの計算が行われている場合。
requestComposite Object
(
[requests:protected] => Array
(
[0] => commandRequest Object
(
[methodName:protected] => read
[arguments:protected] => Array
(
[0] => commandRequest Object
(
[methodName:protected] => text
[arguments:protected] => customer
)
)
)
[1] => commandRequest Object
(
[methodName:protected] => text
[arguments:protected] => hello world
)
)
)
私が達成したいのは、コンポジット全体をループして、ある種のドキュメントをレンダリングすることです。
最初のコンポジットの引数またはリーフは、ドキュメントに出力するためのルートまたはレベル 0 を表しています。
これにはライブラリを使用したいと考えています。このライブラリは、テキスト、画像などの印刷を処理できますが、何も評価できません!
すべて> レベル 0は、別のライブラリで計算する必要があります。
このライブラリは、メンバー値を読み取り、計算などを行い、最終的な値 (文字列のみ) をルートに返して出力することができます。
他のすべては、たとえば \img() または \text() を介して明示的に出力されます
あるかもしれません
\read(x)
メンバー値 X をルックアップするためのトークン
。値は暗黙的に出力されます (別の \text() にラップせずに)!
次のように、指定されたメンバー リストを介して引数をループする \list() トークンがある場合があります。
\list(\read(x)))
X は別の Y である可能性があります
\list(\read(\read(y))).
つまり、構造がどこまで深くなるかわからないということです。
私は、特にデザイン パターンと OO にかなり慣れていません。レンダリング/出力ライブラリと計算ライブラリがハンドラーチェーンを構築している「実行」のための責任
パターン
のチェーンをいじっています。
しかし、CoR が本当に私のニーズを満たしているかどうかについては、少し興味があります。
このような問題をどのように解決しますか?
編集:今のところ私のアプローチ
コンポジットを反復します。出力ライブラリと計算ライブラリ を含むMediatorオブジェクトを
渡します。現在のリーフがテキストの場合
、現在がルートであるかどうかをチェックする
NO の場合、計算ライブラリにアクセスして実際の値を評価し、関係する人に渡します (例: \read()、\varput()、...)
YES の場合は、それを印刷するための出力ライブラリ
私の頭に浮かぶのは、自動ルート印刷を実現するには、両方のライブラリにすべての requestMethod を実装する必要があるということです。つまり、出力の
\read() はテキストをドキュメントに出力
し、計算ライブラリの \read() はメンバー値を検索する必要があります。
ここで物事を過度に複雑にしていますか?