フロントエンドの作業をバックエンドから完全に分離し、デザイナーと開発者は別の部門に分かれており、redmine のチケットで接続されていますが、通信する必要はありません。また、ほとんどの場合、彼らの仕事は他の人と相互作用しません。
Out ソリューションは java/javascript に基づいています。単純に、表と裏の分離に関する問題に対処するために独自のフレームワークを開発しました。現在、この問題には 2 つの独立したフレームワークがあります。1 つは Java によるサーバー側レンダリング用で、もう 1 つはクライアント JavaScript MVVM フレームワークである javascript によるクライアント側レンダリング/バインディング用です。
最初に、私たちのフレームワークの基本的な考え方は、すべてのテンプレート レンダリング ロジックを html テンプレートから分離することです。したがって、html テンプレートは、バックエンドの侵入のない真の純粋な html ファイルです。
2 番目のステップでは、デザイナーはバックエンド ロジックを考慮せずに、独立した html ファイルで作業を完了します。同時に、バックエンドの担当者がバックエンドのレンダリング/ロジックを別の java/js ソースで作成します。
次のような html ファイルがあるとします。
<div><input name="name"></div>
<div><span id="name-preview"></span></div>
次のように、Java によってサーバー側のレンダリングを実行します。
Render.create()
.add("[name=name]", "value", user.name)
.add("#name-preview", user.name);
また、次のように JavaScript を使用してクライアントの双方向バインディングを実行することもできます。
Aj.init(function($scope){
$scope.data = {};
$scope.snippet("body").bind($scope.data, {
name:[
Aj.form({name: "name"}), //bind the $scope.data.name to input[name=name] in 2-way
"#name-preview" //bind the $scope.data.name to #name-preview in 1-way
]
});
});
上記の例のように、一般的な css セレクターを使用して、値をレンダリング/バインドする場所と方法を記述します。
実際のところ、私たちの実践では、フロントエンドのリファクタリングの 90% 以上はバックエンド側からの助けを必要としません。バックエンド担当者が壊れたレンダリング/バインディングを修正しなければならない残りの 10% のケースでも、ほとんどの状況でターゲット css セレクターを変更するだけでよいため、修正は非常に簡単になります。
最後に、サーバー側のフレームワークを Java で実装していますが、PHP、Ruby、Python など、他の言語に移植できると考えています。
サーバー側のフレームワーク:
https://github.com/astamuse/asta4d
クライアント側のフレームワーク:
https://github.com/astamuse/asta4js