我将分享我们在PHP之外的解决方案/实践,它将前端工作与后端完全分开,我们的设计师和开发人员分开在不同的部门,他们通过redmine的票连接,但他们不需要沟通在大多数情况下是相互的,而且他们的工作在大多数情况下也不会与他人互动。
Out 的解决方案是基于 java/javascript,只是我们开发了自己的框架来解决前后端分离的问题。目前我们有两个独立的框架来解决这个问题,一个是通过Java进行服务器端渲染,另一个是通过javascript进行客户端渲染/绑定,一个客户端javascript MVVM框架。
首先,我们框架的基本思想是将所有的模板渲染逻辑与 html 模板分离,因此我们的 html 模板是真正的纯 html 文件,没有任何后端入侵。
第二步,我们的设计师将在独立的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执行客户端2路绑定,如下所示:
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