系统前台后台是否应该分离(包括部署)

这个问题困惑我很久了,可能前台/后台这个用词不准确,稍微解释一下我的理解,
很多系统都分为前台和后台,其分别针对的使用者也是不同的
1. 前台一般针对"消费"用户(如读者、网购用户),数据查询是重点
2. 后台一般针对"管理"用户(如编辑、网站管理员),增/改/删 是重点(也需要查询)
前后台有很多不同点和矛盾点,如:
1. 权限
- 后台肯定有权限要求,前台很多功能无权限要求(如阅读文章)
2. 帐号体系
- 后台主要用来管理,用户数一般比较少,甚至登录入口都没必要开放。前台用户数相对较多,一般用来记录用户在网站中的行为,为其提供服务。后台用户和前台用户的用户资料可能相差很大,后台用户有时只需要帐号/口令就可以了,前台用户的资料一般比较丰富,并且用户可以自己修改资料。
3. 前端(页面、静态资源)
- 后台、前台的UI一般不同,后台可以土、丑,但前台UI要对用户负责一些。就说 前端开发 这块,包括 UI设计、HTML、CSS、JS、架构、前端/服务端交互方式、前端/服务端数据传输接口 等等,前后台可以完全不同
4. URL 分配矛盾
- 比如查询编号为 10 的产品信息,我首先会想到这个URL:http://XXXXhost/app/product?id=10 或 http://XXXXhost/app/product/10 ,但系统包含前后台,我现在想到两个思路:
a) 前后台使用同一个 URL,根据权限判断,查询不同的数据并返回相应的视图进行渲染。
b) 像 wordpress 一样,针对后台的所有访问,在系统根路径上都加一个 "/admin",这样后台的访问 URL 是:
http://XXXXhost/app/admin/product/10 ,使用这种处理方式的话,前后台的 Controller 可以分离
...

这个贴支持分离
http://www.iteye.com/topic/1113741
也有提到安全问题的
http://stackoverflow.com/questions/9813174/best-practice-for-deploying-administration-area-in-java-web-application
有不支持分离的
http://programmers.stackexchange.com/questions/212938/shall-i-separate-the-admin-part-from-the-rest-of-the-war?answertab=votestab-top

结论:
自己的思路还没有理清晰,问题描述比较粗糙,还需完善。我的理解是,木有银蛋!?,是否分离要看项目复杂程度以及项目具体情况而定,这里说的前台、后台比较容易理解,有很多复杂的系统可能不只是前台后台,比如还有针对供应商的平台、针对合作伙伴的平台。
希望有这方面经验的大师可以分享一下自己的心得。


[该贴被edison87915于2014-10-01 14:24修改过]

建议参考CQRS架构入手考虑对领域模型的读写分离,Comand是写操作,主要针对后台用户,Query查询针对普通用户,这是从系统架构与业务模型层面进行分离。这个高度比较高,既适合前后台分离的情况,也是和前后台合并的情况。因为单纯从是否前后台分离这个战术层面讨论,没有多大区别,最多是一些URL和UI区别。

当然这里要注意引入RBAC,也就是服务组件的权限配置,对于某个服务,不同用户拥有不同的CRUD权限,当然,因为查询和写入是两个服务完成,可能不冲突,但是能从业务层面提高安全性。

如不嫌弃,可参考jivejdon源码。节日快乐

我也感觉我是在战术层面上徘徊。。。
有所收获,但有些迷糊,高度还达不到,哈哈,正在学习 DDD 相关的东西,jivejdon 是一定值得学习的。

感谢 banq 的指点,节日快乐!