Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

前端和后端如何构造才合理? #390

Open
shaukei opened this issue Mar 17, 2015 · 3 comments
Open

前端和后端如何构造才合理? #390

shaukei opened this issue Mar 17, 2015 · 3 comments

Comments

@shaukei
Copy link

shaukei commented Mar 17, 2015

目前比较困扰我们团队的问题就是
1 模版存放目录和资源发布目录不在同一个目录。前端工程师如何进行开发
2 模版分块以后,前端工程师如何维护?

首先:
后端对资源文件是不敏感的,可以直接生成在发布目录以下。
后端对tpl是敏感的,希望可以把这些控制在系统内部,不能发布到网站目录下。
后端对tpl是处理过的,加入了控制代码,include代码等等,希望前端能在处理后的基础上做维护。

前端对资源文件和tpl都是敏感的,希望能马上呈现最终结果

所以:
前端和后端都希望fis能使用处理过的tpl来release,并能放到view模版相应的目录。

这个是我们项目中用到的比较经典的目录架构
ee8dc59f-7a63-4c01-a6b3-14054d659c4f

fis能做到吗?怎样做 ?

@oxUnd
Copy link
Contributor

oxUnd commented Mar 17, 2015

可能给你说一下俺们是怎么干的,会让你更清晰的认识到能用 FIS 做到如何的开发体验。

俺们在 FIS 的基础之上定制了一套方案 FIS-PLUS,你可以稍微了解一下,简称 fisp。

首先,来描述一下 fisp 的作用。fisp 选择用的模板是 Smarty 模板,其作用很多,比如可以很好的在开发阶段隔离前后端开发人员,因为它提供了一套完整的模板语言,前后端开发只需要通过模板数据来做连通的桥梁即可进行并行开发。那么,来想象一下具体开发,当开发之初,前端开发人员和后端开发人员商量好页面中需要哪些数据,商定以后前端开发人员就去写展示逻辑(页面),后端人员就去调用各种后端服务给数据,中间以 PHP 数组来传递数据。

从这样一个场景中不难发现,后端开发人员提供数据,调试只需要必要的一些输出接口就可以进行调试,最直接了当的就是var_dump。那么对于前端开发人员,写好的页面(Smarty 模板)就不好调试了,需要一个渲染环境。恰好 fisp 就提供了一个完整渲染 Smarty模板 的本地开发环境,见 https://github.com/fis-dev/fis-plus-server-framework 。其实现了两个重要后端功能的模拟;

  • URL Rewrite
  • 本地数据模拟

有了这两个功能,即可在模拟出一个完整的和线上一模一样的网站来。说到这里,大概你清楚 FIS 中是如何解决前后端开发的。

再来看联调,本身约定前后端依赖于模板数据,对于后端开发人员,最终把数据打到页面上,需要用同样的方式去渲染模板,那么联调时其关心的是模板在什么地方,静态资源在什么地方。那么正好,fisp 在编译完以后,会产出几个目录 statictemplatepluginconfig 等文件,为了简便,我们重点说明 statictemplate;当联调的时候,前端开发人员只需要把 static 下的文件上传到后端开发人员制定的静态资源目录(或者静态资源服务器)上即可,而 template 也是一样的。传到后端开发人员制定的模板目录下即可。

这样,对于后端开发人员,渲染一个页面时到模板目录下去找文件就可以了。比如 fisp 中

$smarty->assign($data); // 这就是约定的模板数据
$smarty->display('page/home/index.tpl');

在这个过程中,还需要综训一个规范,那么就前后约定的部署目录的部署规范

那么在上面我说到了;

  • 并行开发用模拟环境
  • 联调上线用部署规范进行约定

这样就实现了并行开发。

以上用 Smarty 是这样的,但是有一些框架下面,其 View 层紧密的和后端框架粘合在一起,做一个本地的模拟环境很不容易。所以,如果要解决这个问题,需要实现一个解耦的 View 层。

@shaukei
Copy link
Author

shaukei commented Mar 17, 2015

ok,我们先按照这个方向讨论一下,看看如何实施比较符合我们的开发习惯

thx!

@Megasu
Copy link

Megasu commented Mar 17, 2015

Mark

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants