前端插件系统设计
越加丰富的 JS 语法和丰饶的 npm 社区让我们能构建解决复杂问题的应用程序,随着 UI 自动化生成技术的进步,前端开发者面对的主要问题将不再是样式和动效的实现,而将是异构数据源融合、异步互联数据(Async Linked Data)的展示和交互方案设计。
我们考虑在前端输入结构复杂的数据,对数据推理并展示推理结果时,这样的系统很难做到大而全,每个用户都有自己的个性,他们会想看到应用有不同的主题、会想用自己喜欢的方式输入信息、会想要你的应用支持他偏门的用法。这些其实都不是问题,只要你提供了友好的插件(plugin or extension)系统,总会有能人志士做出贡献,写出牛逼的插件。
我们在设计前端应用时如果提早考虑到插件架构,能为我们的应用带来很大的社区活跃性。本文综述了目前比较流行的插件系统架构,供 Web 游戏开发者、信息管理系统开发者参考。
Semantic Media Wiki
用于构建 DBPedia 的维基百科,是使用一款叫 Media Wiki 的程序架设的。
Media Wiki 广泛用于各种维基站点,但它有一个缺点,就是没法细粒度地把百科页面语义化。维基百科每个页面就是一堆 HTML,当你有数百万个页面时,想找到某个实体就只能用信息检索(IR)的方法。当维基系统被 Semantic Media Wiki 插件接管,你就能通过搜索性别、年龄、职业来查找实体,就像使用一个数据库一样。可以说这个插件提升了用户(主要指维基维护者)生产、分享和使用结构化数据的能力。[2]
Semantic Media Wiki 作为 Media Wiki 的大型扩展插件集(expansion),在 Media Wiki 的框架上提供了很复杂的结构化数据、查询数据等功能,例如可以把维基内容变成图表、时间轴、地图等形式来展现。而它自身又可攻可受,自己是别人的插件,然后又提供了插件系统给别人。
例如 SMW 的插件 SemanticResultFormat 就可以丰富 query 结果的格式;SemanticForms
通过表单编辑(新的编辑方式)结合 SMW 进行操作,增强了「录入属性」这一部分,同时为 SMW 使用者提供了一个非常强大的函数
{{#arraymap}}
;Arrays 插件则为使用者提供了 {{#arraydefine}}
和 {{#arrayprint}}
两个函数。所以说 Semantic Media Wiki 是一个凸和凹的结合体,「泰卦」是也。[4]
TiddlyWiki
要考察用 JS 写就的插件系统的话,TiddlyWiki 的开发者文档[21]可不容错过,这是一个单 .html
wiki 程序,所有的
Markdown 内容、JavaScript 插件都存储成了称为 tiddlers 的笔记。
例如 Markdown 会存放在 <div chapter.of="Microkernel Architecture"
created="20140709110225227" modified="20140717213309369" sub.num="1" tags="doc
new" title="Microkernel Description">
这样的标签内,此 div
平时默认不显示,只有这个内容卡片被唤起时才加入到内容流里(非线性展现内容,如果没有实际用过则不易想象)。
插件脚本则存放在这样的标签内:
<code...
作者暂无likerid, 赞赏暂由本网站代持,当作者有likerid后会全部转账给作者(我们会尽力而为)。
Tips: Until now, everytime you want to store your article, we will help you store it in Filecoin network. In the future, you can store it in Filecoin network using your own filecoin.
Support author:
Author's Filecoin address:
Or you can use Likecoin to support author: