...
- Component / Feature cohesion
- Eliminate Deployment dependencies
- Studio and LMS become mostly Frontend Views
5. Plugins and SOLID Principles: edx-platform becomes a Plugin Platform (
...
Decided)
Summary
To reverse the direction of the monolithic evolution of the edx-platform, it is necessary to have individual apps plugin to the platform and follow the S.O.D. of the SOLID principles as described in Django App Plugin. Additionally, to support the varying feature requirements and experimentation by the open edX community (and within edx.org), a plugin framework provides a powerful flexibility that keeps the edX core as an invulnerable and stable platform but a welcoming enabler.
...
- May 2017: Nimisha Asthagiri (Deactivated) learns of current development pains of the open edX community and brainstorms ideas with community representatives on supporting pluggability of URLs at the final-day hackathon.
- November 2017: Nimisha Asthagiri (Deactivated) discusses incorporating Adaptive Learning features into the platform with Tim Krones at OpenCraft - and proposes making it into a pluggable feature rather than a core feature - offering edX time to implement the plugin framework.
- December 2017: Decided to tackle a few backend plugabblity features for now, while informing the FED team (Ari Rizzitano (Deactivated) and Dave Ormsbee (Deactivated)) to help us tackle frontend pluggability soon after.
- December 2017: Nimisha Asthagiri (Deactivated) brainstorms with Calen Pennington (Deactivated) on using Django's AppConfig as a means to configure Plugin apps.
- January 2018: The first Django App Plugin PR, reviewed by Jeremy Bowman (Deactivated), merges with support for plugging in INSTALLED_APPs, Django Settings and Django URLs.
- June 2021: Extensions is one of the 4 pillars called out in the Architecture strategy of Arch B.E.E.S..
Motivation
- See explanation in Django App Plugin description.
...
- Fall 2014: Design of edx-notifications for McKinsey
- Sep 2016: Design of Notifications: System diagram, with learnings from above
- Fall 2017: RET team implements ACE, based on above
...
- CatalogCourse
- CourseRun
- Content-Provider Organization
- User-Provider Organization
- Credit-Accessor Organization
9.
...
- Currently captured on a slide in the Architecture onboarding presentation
...
Testing Best Practice
...
(Todo)
10. API Best Practice (Todo)
- An early version of REST API practices is at edX REST API Conventions, but needs to be updated and fleshed out with more recent wisdom.
- The API Trichotomy Proposal provides a high-level approach to defining and supporting APIs.
- The Extensible and Pluggable Platform provides a visualization of the various types of APIs in our platform.
11. Domain-driven Design Principles
- Build vs Buy → Core, Supporting, Generic
- Location of code (which IDA? which app?) → Bounded Context Responsibilities and Boundaries
- API as a Product → Domain models
- Inter-service interfaces → Business use cases
- Inter-service communication and relationships → Bounded Context life cycles versus Entity-based Services
12. Celery usage
- celery-utils capabilities - LoggingTask and PersistOnFailureTask
- Using kwargs instead of positional args
- For real-time synchronization with management command as fallback of celery failures
13. Authorization (In Progress)
- Initial implementation of Role-based access control in https://github.com/edx/edx-rbac.
- Authorization provides a high-level diagram depicting the separation of concerns between feature-level roles and system-wide roles.
- App-level permissions are yet to be fully adopted, with early provisional thoughts captured in https://open-edx-proposals.readthedocs.io/en/latest/oep-0009-bp-permissions.html.