When e-commerce meets Symfony

Preview:

Citation preview

When E-commerce meet Symfony#SymfonyCon

@mmoreram

Elcodi

@mmoreram

Co-founder and lead at Elcodi

Organizer of Symfony Barcelona UG

Entrepreneur in AntaiVB - Barcelona

Maintainer of several open source Libs and Bundles (GearmanBundle, ControllerExtraBundle, Visithor, php-formatter, PaymentSuite…)

About this talk

E-commerce in PHP until 201*

E-commerce project life cycles

Architecture for pragmatic development

Symfony in action

3 tips about Elcodi

E-commerce + PHP until 201*

Ideal Marc dialogue

Marc: Hey dude, how are you?

Ideal developer, in an ideal environment with an ideal amount of money: …

Real Marc dialogue

Marc: Hey dude, how are you?

Real developer, in a real environment with a real amount of money: …

What has happened here???

PHP Until 201*

PHP Full-stack projects based mostly on final user needs

Old PHP code without change margin

Technological effort on maintenance over refactoring

Can these projects evolve?

PHP Until 201*

From the developer’s point of view…

Configuration

Configuration

Extension + Pain

Configuration

PHP Until 201*

No testing

No SOLID principles

PHP Until 201*

So… why are they that used?

A lot of users and developers have based their companies on them (YAY! Me, want!)

BIG and Extremely well created plugin and template markets

E-commerce with minimum time-to-market

Is that enough for me?

No is not!:’(

E-commerce life cycle

MVP

Minimum Valuable Project

The minimum you need to make sure you can measure the impact of your application - First stage… ALWAYS!

Small investment (FFF)

Small budget to spend on everything

Perfect for applications with advanced template and plugin markets

MVP

Technology is not used to being important here

And, in fact, it should never be…

Most of times, projects die after this stage because the market is not ready or the project is not valuable enough

Fast set-up technologies are used here

After MVP

Business Angels in action!

Bigger budget than before, but not as big as we’d love to

We can spend a little bit more on technology

This is where we need to make the difference, so…

Hello, Custom Business!!!

Bye Bye, 90% of all existing plugins!!!

After MVP

This is where a lot of companies start a refactoring process

This refactoring is used to costing too much money $$$

Everything is for yesterday :’(

Things are done poorly and rapidly

Pain^n

Do you know what this causes?

Sadness!

Frustration!

I hate E-commerce!

Bye Bye E-commerce!

After MVP : #tip

Choosing here your strategy can save your project!

As important as MVP, but even more difficult to manage

Smart decisions will be important

When Venture Capital

The amount of money is much bigger (shut up and take my money…)

We are going to be a player, so our technology must be a player as well

Time for do all these things you always had in mind

No excuses, you have to hire talent and be responsible

But you know what?

First of all, you need to

reach that point

Pragmatic Architecture

Just some questions…

Is PHP the right platform for that?

“is it?”

“it is, why not?”

Just some questions…

From a technical point of view… what criteria should I follow about when deciding an E-commerce platform?

Do I feel confortable working with it?

Will I be able to born with this project?

Plugins, Templates, User documentation

Will I be able to grow with this project?

Excellent technical documentation, Communication, Community

Some tips

Will I be able to increase my skills as developer using this technology?

Will I be able to do it… properly?

Will I (as a company) co-exist with this technology?

For how long?

Some tips

“Do I feel confortable working with it?”

Just some questions…

Should I test my MVP application?

Some tips

Take a tested (or popular) platform when you need to reach your MVP

If your project is not going to grow, take the project with the most advanced plugin and template system. Forget about everything else

You may not care about the roadmap of the project if your project ends as soon as you finish it

Some tips

If your project is LTS, then… tests battery will only tell you if the initial product works properly

You will really need tests after your MVP, and your application will be completely different

You will have to do your own tests then. Be ready for that!

That one of the things you could invest on with your new money :)

Just some questions…

What architecture should I use?

“What architecture I really need?”

Some tips

What architecture allow you to overwrite more easily

Cart, Product, Shipping, Payment

Admin functionalities, integrations, change capacity

What architecture allow your team to understand the business model?

What part of the application handles your business logic? Service layer? Model? Commands + Controllers + EventListeners + Twig Extensions?

CQRS, Event-Driven Design… do you really know how it works?

Annotations at the beginning, maybe? Easier :)

Choose the architecture that

really fits your case

Some tips

As soon as your developers (or you) are better, then your needs will be bigger and stronger

Technology will follow you, not vice versa

Don’t base your E-commerce on practices you don’t really know how to handle with

And the more better you are…

… the more alternatives you’ll find

Some tips

Annotations will become bad practices, maybe

You will understand that an Event Listener, for example, should have 0 business Logic (Same as other entry points)

You will NEED tests in all your developments. Not for the “tested” badge on Github, but only for you

You will understand as well why ValueObjects are great, for example

Symfony in action

Symfony

What parts of Symfony can really help us on our adventure <E-commerce case>!

Event Dispatcher

Symfony DIC

Tests integrations (PHPUnit, Behat, Visithor…)

Bundles

Event Dispatcher

Event-Driven Design is one of the most important things when you want to build a Plugin-based environment

+Events = +Extension points = +Adopters = +Integrations

DIC

How easy overwriting a service is by registering your own service with the same name (after the original one)

Good for composition and inheritance

+Easy to overwrite = +Customizations = +Adopters = +Installations

Tests integrations

Integrations with Testing Platforms

Behat Symfony2 Extension (Symfony3?)

Symfony PHPUnit Bridge

VisithorBundle

Bundles

Why a bundle is something relevant here?

How a bundle can help when trying to create a Plugin + Template environment…

A Bundle can be a Plugin!

3 tips about Elcodi

Elcodi

Set of E-commerce PHP Components

Set of Symfony2 bundles for these components

Project called Bamboo. Full stack E-commerce based on Elcodi + Symfony components and bundles.

http://github.com/elcodi

By giving us a star is like… Hey guys! You’re cool ;)

Elcodi Tip #1

Intended to be a great option for MVPs

Create a Plugin environment on top of Symfony Bundles

Template as a Plugin

Install in less than 2 minutes with Heroku (i.e.)

4 layers of testing

Elcodi Tip #1

[Components] PHPUnit for unit testing of our Service Layer (classes)

[Bundles] PHPUnit for functional testing of our processes (services, event listeners, event dispatchers…)

[Bamboo] Behat for behavioral testing (user processes…)

[Bamboo] Visithor just for testing the HTTP layer (responses)

Visithor

http://github.com/visithor/VisithorBundle

You only need a single and small YAML file, and some lines. One per route.

Define your routes by url, url name (Visithor) + parameters (VitithorBundle)

Authenticate in a Firewall with a ROLE (Admin routes)

Visithor

Elcodi Tip #2

Intended to be a great option after MVP

Use Symfony ecosystem for evolving your project. No refactoring needs

The project is built on top of some Best Practices, and is treated with A LOT OF LOVE

Both developer and final user oriented. No one is less important than the other one

Elcodi Tip #3

Community-Driven. Developers are the brain of any open source project. Final users are the heart

The more happiness any open source project provides, the more quality offers

Join us on this adventure :)

http://gitter.im/elcodi/elcodi

Elcodi Extra Tip

Elcodi (L) Symfony ^3.0.0 (December 2015)

Elcodi App Market (2016)

And… much, more, soon!

Emanuele Minotto, new Core dev :) Thanks dude!

TB;WS

TB;WSToo Boring; Was Sleeping

TB;WS

Each E-commerce stage needs different strategies

Check all Symfony E-commerce solutions, and find the one who REALLY makes you feel comfortable

And if you really love E-commerce… consider getting involved in one of them, and spread the word :)

and meanwhile… read!

Q / A

Differences Elcodi - ~^.*$~

Elcodi is a ready-for-production project

We offer both a project and a way of doing, of understanding open source and collaborative projects

Just make sure you discover this way of doing, and join us if you really enjoy it

We are still waiting for your feedback and energy :)

Thanks! Gràcies!

@mmoreram

Recommended