COSS Community 🌱

Cover image for OCS 2020 Breakout: Bastian Ike
Joseph (JJ) Jacks for COSS Community

Posted on

OCS 2020 Breakout: Bastian Ike

Bastian Ike is a core Flamingo Developer and Security Division Lead at AOE. Over the last years he was heavily involved in building difference E-Commerce Platforms, Security Tools and Infrastructure components with Flamingo, as well as Flamingo Core development.

Relevant Links
LinkedIn - Twitter

We present the Flamingo Framework and our decision to open source it and put it into public domain, and how we still benefit from this decision.

Introduction to Bastian, presentation, and AOE - 0:00

Introducing Flamingo - 0:37

The Flamingo Web Framework, Flaming Commerce - 0:57

Movitation for Flamingo - 1:28

Developers’ background before setting out on Flamingo. Magento had a break between versions, and team discovered Go programming language and its benefits. - 2:07

Did we need a new web framework? Walking through Go Web Frameworks. Well-suited for API backends, but not as good for customer-facing. No reverse routing. No SEO-optimization. Limited templating capabilities. - 3:37

Creating Flamingo, starting with Flamingo’s design aims (Developer Experience comes first, Desire to open-source the framework, Don’t zero-in on what team thinks is right -- opinionated, but not too strongly opinionated, Giving team’s developers a hand, Leading by example) - 6:10

The SOLID design principles. Single-Responsibility (small components, each responsible for doing one thing). Open-Closed (be open to extensions, but closed to internal changes). Liskov’s-Substitution (no need to specify a certain interface). Interface-Segregation (many small interfaces solving specific problems.) Dependency-Inversion (dependencies should not be defined by who uses them, but put in to a current project/current scope from the outside) - 9:28

Technical requirements: Composable Modules (“plug-n-play” with complete default go environment, no custom tooling or special GOPATH-hacks or git-suubmodule-tricks, Low-Coupling and High-Cohesion) - 11:55

Domain Driven Design - 14:05

Dependency Injection (Not common in Go community, No wire, Didn’t want a “name -> object”-registry -- would rather use Go code, so you don’t have to remember names) - 14:42

Dingo: Dependency Injection for Go. Based on Google’s Guice, but for Go. Ease of use is key. - 16:26

Walking through examples of Dingo - 18:05

Ports and Adapters (Domain, Application, Interface, Infrastructure) - 19:15

Template engine. Single Page application (are we ready yet?). Server-side rendering (How we can build upon existing knowledge). - 21:49

Pug Template Engine (Accessible for frontend devs, Powerful but limited, Javascript in Go) - 22:40

GraphQL (Evolving web applications, GraphQL API First) - 23:47

Using GQLgen to implement GraphQL (Dingo to register models, GQLgen for code compilation, Code generation for schema and resolves) - 24:28

Key Decisions in building Flamingo. (1) Focus on Developer Experience, (2) Being an open framework, (3) Dependency injection made decoupling as easy as possible, - 25:28

Importance of staying Small & Flexible (Focus on what’s necessary, Don’t reinvent the wheel) - 27:06

Using Flamingo Commerce (includes product catalog, checkout, customers) - 27:57

Lessons Learned. (1) Learn from others, they are smarter than you. (2) Don’t try to rebuild existing solutions (pug) - 28:42

Open Source brings challenges. (1) API needs to be stable, (2) Stick to Semver - 29:27

Future: Growing Flaming, Flamingo Commerce, and the whole ecosystem - 30:34

Project links (https://flamingo.me, https://github.com/i-love-flamingo) - 31:06


Share your questions and comments below!

Top comments (0)