PDFファイルに変数を表示するユースケースがあります。しかし、そこに到達するのは簡単ではありませんが、次のようにすることができます:
/*
* takes product model number, retrieves, processes, formats values
* returns $variables, ready to plug-in to view with no further processing
*/
$variables = $this->repository->getVariables($model);
/*
* View runs PDF Library code and displays variables and their values in a table
*/
$this->sendToView($variables);
方法1-リポジトリに変数を変換するすべての作業を行わせる
内部getVariables
私はこれらを行います:
すべての作業はgetVariables
で行われ、sendToView
は変数をPDF APIダイレクトとして直接変換します。変換は必要ありません。
方法2-リポジトリを使用して生データのみを取得
反対の極端は、getVariables
が#1のみを行い、個別のクラスが独自のことを行うことです..
$expressions = $this->repository->getVariables($model);
$solveExpressions = $this->expressionEngine->process($expressions);
$formattedVars = $this->formatter->format($solvedExpressions);
$denominatedData = $this->denom->addMarkers($formattedVars);
$adornedData = $this->adorner->adorn($denominatedData);
$viewReadyData = $this->viewPreparer->prep($adornedData);
$this->sendToView($viewReadyData);
または、上記を混合して一致させ、メソッドをさまざまなクラスに詰め込むこともできます。
私の質問
データの変換、フォーマット、再グループ化、磨き、準備などのうち、どれだけがリポジトリレイヤーに入りますか?
(これにより、リポジトリレイヤーの外で実行する必要のあるデータ操作や、ビューレイヤーで実行するデータ操作を決定するのに役立ちます。つまり、データを簡単に再グループ化して、テーブル)
P.S。何をしようとしているのか(データ操作)
コードに焦点を当てずに、質問のコンテキストで、私がやっていることはこれです-データベースに保存された式から始めます:
a = 5
b = a + 3
それから私は解決された表現で終わります:
a = 5
b = 8
次に、シリーズまたは書式設定と装飾を次のように行います。
8 => 8.00 => 8.00mm => 8.00mm +/-0.01
上記の中にあるような形で滞在
array(
'a' => '5.00mm +/-0.01',
'b' => '8.00mm +/-0.01'
);
ビューでは、それを
array(
0 => array(
'description' => 'a',
'value' => '5.00mm +/-0.01'
),
1 => array(
'description' => 'b',
'value' => '8.00mm +/-0.01'
)
);
上記をモダンOOPコードに記述します。
あなたのコメントに基づいて、いわゆるベストプラクティスやその他の魔法にだまされないように強くお勧めします。主に、ソリューションを次のような方法で実装する方法を選択する必要があります。
また、貧血とビジネスオブジェクトについても記述します。私の間違いを証明してください。ただし、一連のメソッド呼び出しの動作やビジネスロジックを理解できません。検証などなしに、一連のデータ変換を行っているようです。なんらかの報告に使われているような気がしますが、本当の意図ははっきりしていません。
私があなたに役立つことができる唯一の有用なことは、あなたのコードを調べ、技術的な領域をキャプチャし、それらを明示的な境界を持つモジュールに分割することです。 懸念の分離 設計原則は、ここで境界を描くのに役立ちます。
これらの各モジュールは、独自の一連の懸念に責任を持つ必要があります。それぞれに責任があり、何もしないそれぞれのメソッドを持つクラスを作成します。これらの懸念事項をモジュールのセットにカプセル化すると、まとまりが増し、コードのテスト容易性も向上します。