infoMore than 5 years have passed since last update.
テンプレートエンジンの役割に関する個人的考察
Last updated at Posted at 2014-08-28
テンプレートエンジンの役割に関する個人的考察
- YAPCの季節にふと思い出したので書いてみようと思って、やめとこってなったけど書いてみる
この記事の例外に関して
- この項目で書く事柄は(ここ数年で話題に上がりがちな)MVVCは対象としません
- (あくまで個人的な意見ですが)MVVCはユーザアクションに対する(非同期な)作用を伴うものです
なぜ、テンプレートエンジンを使うのか?
- 表示に関わるロジックをモデルに関わるロジックと分離したい
しないとどうなるの?
- サーバサイドのコード上にHTMLタグがたくさん出現します
よくないことなの?
- 別によくないとは言いません
- 書いたコードのあるべき責任と所在を決めるのはあなた次第です
- HTMLタグが出現するコードはクソという尺度を持つクラスタがいるので注意して下さい
- そもそもマルチバイトな文字列がサーバサイドのコードに存在することに拒絶反応を示すクラスタがいたりするので注意して下さい
これはあくまでも個人的な考察です
- (例えばHTMLを吐き出す)テンプレートエンジンはORMの不遇さと比較し、大多数のエンジニアから歓迎されている様に見受けられます
- それはテンプレートエンジンが果たすべき役割とそれに見合う効果を期待してのことです
- 効果とは(自分が知っている限り)いかなる言語においても設定すべき定数であったり、多数出現するマルチバイトな文字列からの解放です
- 共通化というと聞こえはいいが、大体においてはインクルードされるだけです
- 故にほぼ全てのテンプレートエンジンにインクルード命令があるのだと思います
なぜテンプレートエンジンを使うか?という最初の欲求に関して
- テンプレートエンジンも多大なロジックを伴います
- ここで言う多大なロジックとはあくまでも、あくまでも表示に関わる切り替えです
- 表示に関わる切り替えとは何か?
- いわゆる活性/非活性といったものが代表に挙げられるでしょう
- 真偽値で解決しない問題があるとすれば、サーバサイドに問題があると思って(個人的には)間違ないと思います
- もしもelse-ifが発生するのであれば、(少しくらいは)疑問を持ってよいと思います
テンプレート側で計算はすべきでない?
- 個人的にはYesですが、表示にのみ関わることであれば積極的にしてよいと思います
- 計算すべき事象はテンプレートに割り当てられた時点で(本来であれば)全て解決しているべきと考えます
- 本来であればという前提は3桁区切りにする、日付のフォーマットを指定するといったことを対象外とします
- 例外としてjsで動的に座標計算をするために用意された初期値の指定など枚挙に暇はありません
- それでも済ませておくべきとは思います
どうして計算すべきでないの?
- 計算はロジックだからです
- フロントエンドでのみ活用されることが約束された値は計算済みの値のみであるべきだからです
テンプレートエンジンを利用する最初の動機は何だったか思い出してみましょう?
- それは単なる判定、ループ、変数の利用、そしてインクルード命令による共通化ではないでしょうか?
どっちでやっても一緒じゃないの?w
- 一緒です。ロジックが正しいか正しくないかの二択です
- ただし、2択がModel層とView層の2つになります。合計4個です
- 問題の切り分けが大好物という方は是非、いずれにもロジックを組み込んで下さい
結論
- テンプレートエンジンですべきことはあくまでも表示に関わること
- 文字列のマークアップ
- 真偽値による表示の出し分け
- (主にテーブルの行に代表される)項目のループ
- よく利用される表示の共通化
- js(と近年見ることがないアプレット)の変数初期化
- くらいじゃないの?などという妄言を繰り返しており(ry
4Go to list of users who liked
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme
What you can do with signing up