Why is the Course Structure a DAG
Essentially, implementing the Course Structure as a Directed Acyclic Graph for a course structure, as opposed to a simple tree, allows course authors to embed an xblock in multiple places, as one modular component.
Here are some notes from a conversation with Piotr Mitros (Deactivated) on examples of use cases:
- Pedagogical use cases
- e.g., I show you a problem, have you read it and maybe do as much as you can, and have that motivate a segment of knowledge transfer (watch a lecture, or the active learning equivalent there-of, and then do the problem)
- Non-pedagogical use cases
- e.g., If you want the same discussion component, you can build it cleanly as a pure XBlock with a DAG. Without, you need to implement workarounds such as special discussion IDs.
- Likewise for different bits of progress tracking, profile information, etc, if they are implemented as xBlocks.
Given the above, we are going to implement the Course Blocks API with continued support for DAGs. There may be places in the LMS system that are currently broken for DAGs, but those can be fixed when the time comes.