机制,而不是策略 –《Unix编程艺术》

偶尔收到一些开发者邮件说,想扩展edx平台本身的功能,其中多数的需求,其实都可以通过XBlock来实现,我就建议说你去看看XBlock吧,这种做法很可能也是移植性最好而侵入性最小的。

我前前后后写了三四个XBlock组件了,对这一块还算熟悉,最近想写XBlock相关的文章,将自己的经验进行归纳,也方便给后来者做个参考。如果能帮助到你,就太棒了

XBlock对这样一些团队/创业项目会特别有益,他们有很明确的业务场景(教育相关),使用edX作为基础平台,他们针对某些教育内容/科目,有一套自己的教学方案,使用这套方案优化了教学流程本身,诸如能对学生进行引导或是让其进入沉浸式学习

那么这样的团队很多时候其实不需要从零开始打造一个自己的教学平台,而是以edx为基础,使用XBlock,打造自己的学习组件即可。这样一来在免费享用edx平台本身通用而强大特性的同时,又满足自己的定制需求。

XBlock是个很庞杂的东西,而这个项目又在持续演进中,文档不仅不够完整,还不够稳定。要弄清楚它是个什么东西,可以用来干什么,都有哪些特性,并不容易,下边我们就针对这几个问题入手。文章的最后我会把相关资料整理汇总

在此之前我先发表下我的观点,不客观,不中立,带有强烈感情色彩 :)

#我的观点 我觉得它是edX最好的设计之一,通过引入一种开放的机制,让课程组件体系保持了扩展性。

edx不像大多数平台,假设自己完全知道用户的需求,据此打造一个“完备”而封闭的平台,宣称为你准备好了“你一定喜欢的东西”,这种封闭而愚蠢的做法,苹果和微软似乎都很偏好,国内公司更不必说。当他们说你能这样做的时候,多数情况是说你只能这样做。

开放不只是一种品味,它本身是一种聪明的策略。

#那么它是什么东西 XBlock的自我描述是

XBlock courseware component architecture

也就是说它是课程组件体系。课程组件是edx中很核心的一部分,这个不难理解,edx平台的学习内容都由课程组件来呈现,如果你在edx中制作过课程,应该知道我在说什么。

而Xblock是用于建造课件的东西

我们在edx中创建一门课程的时候,往往是叠加课程组件的过程,诸如播放控件,问题控件,论坛控件。先前的这些既有控件,叫做xmodule,后来课程团队觉得需要重构这部分,于是

We are developing a second-generation API for these components called XBlocks.

###和LTI的区别 那么有人可能要问,他和LTI(Learning Tools Interoperability)的区别是什么。毕竟LTI也能对LMS进行扩展呀

先介绍下LTI,LTI标准可以让远程的工具和内容被嵌入LMS学习管理系统中,edx也支持LTI。

两者的区别主要由以下几点

  • XBlocks是Python语言层级的API,他是一个具体可用的实现,而不是标准,诸如你可以轻易的使用XBlocks来为你的课程组件提供存储功能
  • XBlocks可以用来包装LTI,你可以打造一个LTI XBlock
  • 最后,XBlocks是可直接部署在edx中的,作为一个python库的形式,而不像LTI需要跑起整个镜像来提供服务

###XBlock与djangpapp的区别 关于这一点官方在xblock的介绍中说的很清楚了

XBlocks are like miniature web applications: they maintain state in a storage layer, render themselves through views, and process user actions through handlers.

XBlocks differ from web applications in that they render only a small piece of a complete web page.

#可以用来干什么 当然是用来打造你自己的课程组件啦。至于都可以做出那些花样,可以参考既有的组件,又或是wiki里列出的第三方组件:List of XBlocks

#有哪些特性 在此主要说说在技术层面上的特性

  • 提供数据存储功能,数据存在Mysql
  • 有很好的权限控制机制
  • xblock中允许调用平台既有组件(这样一来你可以想象有多强大了)
  • xblock之间可以通信
  • xblock可以作为django app安装,来提供更强大的功能

#相关资料 ##相关源码库

##文档

##案例引导

##XBlock第三方组件汇总

##安装与配置


至于开发相关的东西,放在之后的文章里介绍