Skip to content

Commit a69525c

Browse files
committed
docs: [README] update architecture details
1 parent 95dd822 commit a69525c

File tree

2 files changed

+38
-67
lines changed

2 files changed

+38
-67
lines changed

.markdownlint.jsonc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@
118118
// MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content
119119
"MD024": {
120120
// Only check sibling headings
121-
"allow_different_nesting": false,
121+
"allow_different_nesting": true,
122122
// Only check sibling headings
123123
"siblings_only": false
124124
},

README.md

Lines changed: 37 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -7,101 +7,72 @@ A complete overhaul of [Music Blocks](https://github.com/sugarlabs/musicblocks).
77
The aim of the new architecture is modularity and extensibility. The idea is to create a core visual
88
programming platform, and extend it with other features.
99

10-
- The source code for the components specific to the application wil reside in this
10+
- The source code for the components specific to the application resides in this
1111
[**musicblocks-v4**](https://github.com/sugarlabs/musicblocks-v4/) repository.
1212

13-
- The source code for the programming framework will reside in the
13+
- The source code for the programming framework resides in the
1414
[**musicblocks-v4-lib**](https://github.com/sugarlabs/musicblocks-v4-lib/) repository.
1515

1616
- **musicblocks-v4-lib** is bundled as an _npm_ package and imported as a dependency in
1717
**musicblocks-v4**.
1818

1919
### Components
2020

21-
![Component Architecture](docs/images/architecture/components.jpg)
21+
![Component Architecture](docs/images/architecture/components.png)
2222

23-
#### Core
23+
**Note:** The greyed out components haven't been built yet.
2424

25-
3 core components: **Interface**, **Syntax**, **Integration**
25+
This is a highly pluggable architecture — except for application level functionality, anything related
26+
to project building and execution are features which shall be dynamically pluggable (they may or may
27+
not be configured to load).
2628

27-
- **Interface** component shall contain the UI components. These are the ones which use _React_ and
28-
follow _Model-View-ViewModel_ (_MVVM_) architecture.
29+
Components can be strictly or partially dependent on other components. In case of strict dependency,
30+
a depending component needs to be loaded for a dependent component to be loaded. In case of partial
31+
dependency, a dependent component adds extra functionality to the depending component if it is loaded.
2932

30-
- **Menu** shall handle top level operations like running projects, managing projects, undo/redo,
31-
application settings.
33+
#### Programming Framework
3234

33-
- **Config** shall be used to configure the feature configurations.
35+
This is reponsible for defining the _syntax constructs_ (_syntax elements_, _syntax tree_) and
36+
utilities (_syntax specification_, _syntax warehouse_), and contains the _execution engine_
37+
(_scheduler_, _interpreter_, _parser_, _symbol table_) for running the program represented by the
38+
_syntax tree_. See
39+
[`musicblocks-v4-lib/README.md`](https://github.com/sugarlabs/musicblocks-v4-lib/blob/develop/README.md)
40+
for details.
3441

35-
- **Status** shall display the application status.
42+
The components in `musicblocks-v4` shall use the constructs exposed by `musicblocks-v4-lib`.
3643

37-
- **Info** shall display logs.
44+
#### View Framework
3845

39-
- **Console** shall provide an interactive tool to run application level commands and
40-
display messages (like a terminal).
46+
This is responsible for creating the skeleton of the UI — components that have a view shall request
47+
component wrappers from the _view framework_ and encapsule their DOM inside the wrappers.
4148

42-
- **Debugger** shall be used to debug Music Blocks programs by monitoring states.
49+
#### Integration
4350

44-
- **Editor** shall be responsible to building Music Blocks programs in text form.
51+
This is responsible for adding general application-wide functionalities like _internationalisation_,
52+
_project management_, and _activity history_.
4553

46-
- **Planet** shall be a repository for openly shared projects.
54+
#### Plugin - UI
4755

48-
- **Syntax** component shall contain the programming framework. These are responsible for internal
49-
representation and execution of Music Blocks programs. This shall come with a factory set of program
50-
building syntax elements.
56+
This contains UI components for application-wide interactive/informative functionality.
5157

52-
- **Elements** shall describe the rudimentary syntax element constructs — **data**, **expressions**,
53-
**statements**, and **blocks**.
58+
#### Plugin - Art
5459

55-
- **Specification** shall describe the ambient configurations (label, selective connectivity, etc.)
56-
for syntax elements.
60+
This is responsible for artwork generation. It shall contain a set of _syntax elements_ of
61+
instructions and arguments related to artwork generation and artboard (artwork canvas) states.
5762

58-
- **Warehouse** shall instantiate and maintain a table of syntax element instances.
63+
#### Plugin - Music
5964

60-
- **Tree** shall respresent the syntax tree by maintaining the interconnections between syntax
61-
elements.
65+
This is responsible for music generation. It shall contain a set of _syntax elements_ of
66+
instructions and arguments related to music generation, composition, and music states.
6267

63-
- **Symbol Table** shall maintain the set of program variables.
68+
#### Plugin - Bricks
6469

65-
- **Parser** shall handle the sequential traversal of syntax elements.
70+
This is responsible for building Music Blocks programs using graphical bricks (blocks).
6671

67-
- **Interpreter** shall orchestrate running Music Blocks programs — exeution of syntax elements.
72+
#### Config
6873

69-
- **Integrations** component shall contain the components responsible for handling application
70-
configurations and other bookkeeping.
71-
72-
- **Config** shall handle application specific configurations and loading of configured plugins.
73-
74-
- **i18n** shall handle internationalisation — managing language strings.
75-
76-
- **Projects** shall handle for creating, loading, merging, and exporting projects.
77-
78-
- **History** shall handle maintaining a log of application-level operations for rollback.
79-
80-
In addition, a **Broker** component shall be responsible for inter-component communication.
81-
82-
#### Plugins
83-
84-
2 kinds of plugins: **Features** and **Syntax Builders**
85-
86-
- **Features** add new functionality to the application. These may add interface components and new
87-
set of syntax elements.
88-
89-
- **Syntax Builders** add interfaces to build Music Blocks programs.
90-
91-
Plugins may be extended themselves to add more optional functionalities.
92-
93-
##### Plugin (Feature) - Painter
94-
95-
This shall add artwork generating functionality, and a set of syntax elements to interact with them.
96-
97-
##### Plugin (Feature) - Singer
98-
99-
This shall add music generating functionality, and a set of syntax elements to interact with them.
100-
This shall be extended to add widgets for generating syntax element stacks.
101-
102-
##### Plugin (Syntax Builder) - Bricks
103-
104-
This shall add the functionality to build Music Blocks programs using visual bricks.
74+
This is responsible for conditionally loading the pluggable components dynamically and sharing instance
75+
references between them.
10576

10677
### Wireframe
10778

0 commit comments

Comments
 (0)