►
From YouTube: Magento Architectural Discussion -- December 12, 2018
Description
Topics:
- Service contracts technical guidelines (@paliarush )
- Updates to service isolation proposal (@melnikovi )
- Checkout service - early draft (@melnikovi )
- Workarounds for blockers described in MDE Project Structure
Meeting minutes: https://github.com/magento/architecture/issues/47
B
The
reason
I
saw
from
Kirill
were
an
open
issue
that
the
the
async
stack
traces
from
requirejs
were
difficult
to
debug,
and
the
other
note
I
saw
was
that
there
was
a
performance
improvement.
I
have
some
open
questions
on
those
things,
though,
because
I,
just
if
we're
gonna
make
a
change
to
a
really
core
library,
like
that,
I
want
to
make
sure
that
you
know
the
performance.
Winds
are
really
there
and
that
they're
worth
it.
And
then,
if
that
were
the
case,
we
would
need
to
figure
out
what
the
risks
are.
A
B
C
Our
guidelines-
this
is
request
to
our
damn
dogs
and
specifically
I'm,
currently
working
on
addition,
guidelines
specifically
for
service
contract
layer,
and
we
can
just
go
over
all
items
which
most
better
there
and
if
you
have
any
questions,
we
can
discuss
them
later
or
you
can
just
start
participating
in
discussion
and
I
already
have
a
bunch
of
comments
there
and
I
addressed
some,
but
not
all
words
yet
and
hopefully,
by
next
week,
we'll
merge
it.
So.
C
So,
first
of
all,
it
talks
about
location
of
interfaces.
They
should
be
placed
in
separate
API
modules,
which
is
not
common
at
the
moment,
but
you
have
examples
in
MSI.
It
means
that
if
you
have
my
module,
then
if
you
want
to
expose
a
pipe
I
will
keep
air
for
this
module.
You
should
create
another
module,
called
my
module
API,
and
this
will
allow
easily
switch
implementations
of
the
whole
module.
And
basically,
if
you
have
some
other
modules
which
depends
on
your
module,
they
will
depend
on
this
API
module
only.
C
Service
interfaces,
which
should
be
exposed
as
far
away
P
I,
must
be
placed
under
this
directory.
So
it's
like
my
module
API,
then
again,
API
service
and
service
data
interface
is
replaced
under
API
data.
This
is
under
discussion
of
the
range
of
options,
I'll
say
to
remove
API
completely,
but
we
can
discuss
it
and
for
now,
API
is
left
here,
because,
first
of
all,
they
already
have
all
modules
with
a
pad
directly
to
probably
be
easier
for
people
to
understand
it.
C
Even
in
API
module
you
have
API
directory
and
then
it
means
that
its
public,
API
and
second
reason
is
an
API.
Module
may
also
contain
let's
say
models
and
what
will
go
into
model
and
they
actually
fall
in
same
approach
has
done
in
MSI.
It
was
also
discussed
order
for
some
time
before
implemented
this
way.
But
what
can
go
here
is
some
trivial
implementations
like
chain
and
composite,
and
they
will
be
set
as
default
preferences
for
specific
API.
D
D
C
The
point
is
actually
because
of
this
items
and
exciting,
because
arbitrary
Direction
item
can
be
allowed
to
improve
code
structure
and
at
the
moment
we
usually
have
API.
And
then
all
services
are
infrastructure
under
this
bed
directory
and
we
have
data
for
data
interfaces.
But
if
you
allow
hierarchies,
then
data
will
just
get
lost
among
other
directors,
and
it
was.
F
D
Think
it's
question
I
mean
I.
Would
I
would
personally
like
our
case,
but
we
decided
three
years
ago.
I
wasn't
I,
didn't
like
the
decision,
but
I
agree
to
that
majority
decided
to
have
flat
structure
for
service
contracts
and
majority
decided
to
put
service
contracts
in
API,
folder
and
data
data
interfaces
to
beta
folder
service
contracts
are
fairly
new
in
magenta
lifetime
concept.
So
I
wouldn't
change
that
behavior,
but.
D
A
C
So
currently,
tea
won't
be
lost,
because
this
is
the
only
directory
under
API.
Was
it
woman?
No
other
directories
are
usually
allowed
or
it
is
not
recommended.
I'm,
not
sure.
If
there
are
any
technical
limitations
against
arbitrary
directory
structure.
No
because
position
you
can
do
any
nest
and
energy
was
to
work.
D
D
C
D
G
D
C
D
D
G
D
Have
to
stop
at
some
point
oops
if
there
was
a
strong
reason
to
do
this.
Okay
and
again,
I'm
I
want
to
emphasize
that
I,
like
the
approach
of
having
structure
more
just
but
I,
also
like
the
approach
of
being
of
stopping
doing
changes.
If,
if
changes
are
not
absolutely
required,
so
here,
I
think
the
consistency
is
sticking
to
made
decisions
should
be
there.
C
C
C
D
A
G
C
Shows
interface
should
declare
single
public
method.
That
is
something
new
that
we
try
to
promote
right
now,
and
the
idea
is
that
we
have
less
dependencies
when
we
injected
say
service
interface
for
some
operation
we
have
less
dependency
injected
phone
and
he'll
more
granular
interface,
so
it
also
promotes
single
responsibility
and
interface.
Segregation
principle
and
the
names
should
be
as
verbs
for
now.
We
had
also
discussion
how
we
should
handle.
C
B
C
Service
data
interfaces
must
not
contain
any
business
logic,
they
should
be
presented
container
of
data
transferable
over
the
wire
and
all
business
logic
should
be
moved
to
services.
So
it
basically
means
that
our
data
interfaces
should
be
just
data
transfer
object
and
they
should
be
just
dumb
objects
with
at
the
moment,
getters
and
setters,
but
I
believe
we
are
moving
towards
some
illumination
setters
as
well
and
making
them
immutable.
C
Strict
typing
is
enforced
for
services
and
data
interfaces,
specifically
under
API
directory
like
under
model
I.
Believe
it's
not
enforced
and
I'm
going
to
expose
it
as
well.
Italian.
That's
why
we
don't
have
framework
restrictions
and
I
know.
Public
component
is
the
point
here
and
what
we
specifically
along
with
color
types,
allow
that
interfaces.
C
We
allow
one
dimensional
indexed
arrays.
It's
also
important,
because
sometimes
people
try
to
use
associative
arrays
and
they
didn't
work
all
the
nested
arrays.
They
will
also
not
work
because
they
will
be
properly
translated
into
would
say,
soap,
object,
notable
scalars
and
data
interfaces
also
loud,
but
just
now
is
not
allowed
and
too
recently,
I
believe
a
Massiah
project
implemented.
Support
for
void.
I
still
have
some
questions
in
discussion
like
how
it's
supposed
to
work
in
the
big
guys,
but
oops
like
it
is
already
supported.
C
C
It
means
if
entity
is
processing
or,
let's
say,
saving
some
entities
instead
of
making
it
safe
one
entity,
we
should
always
support
array
input
and
in
such
cases,
customizations
will
also
expect
array
and
they
can
be
written
in
more
efficient
manner
and
insane
for
our
implementation.
When
we
operate
and
watch,
we
can
do,
let's
say,
singular
or
a
single
insert
into
the
breeze.
C
Instead
of
multiple
requests
database
and
same
for
customization
customization
may
perform
one
operation,
one
I'll
say
in
certain
database
for
all
entities
instead
of
doing
it,
for
each
individual
and
and
what
retrieval
must
accept,
search
criteria
and
return
search.
Result
like
like
it
is
like
it
is
now
for
all
get
list
operations.
C
All
services
that
modify
state
must
support
us
in
transition.
Okay,
so
this
is
probably
something
that
we
are
going
to
remove
cause.
We
still
had
more
discussions
and
I
will
replace
this
with
statement
that
on
service
contract
level,
we
operate
synchronously,
but
we
will
add
ability
to
do
a
synchronous
invocation
where
our
synchronous
for
API
or
in
the
future.
We
may
also
consider
implementing
some
asynchronous
in
water
on
HP
level
2
this
execution,
we
our
message
queue.
A
C
C
C
C
C
C
So
this
is
probably
shouldn't
be
joined
with
the
statement
that
you
should
promote
entity,
because
this
is
related
to
it
doing,
update
operations
will
be
I
should
use
patch,
TTP
method
and
action
controllers
that
accept,
and
it
is
should
to
loads
and
first
and
then
no
request
data
on
top
of
it
and
provide
full
data
to
the
service,
and
this
is
something
that
currently
doesn't
exist.
I,
don't
believe
you
currently
support
patch.
C
C
D
C
What
do
you
mean
preload?
So
if
you
would
say
say
category
update
and
you
want
to
update
this
category
name
in
your
API.
You
say
you
send
just
category
name
and
category
ready
and
what
this
statement
says
that
Web
API
framework
should
reload
category
object.
First
then
apply
name
on
top
of
it
and
pass
it.
The
service
contract
service
contrac
should
get
full
object.
C
G
D
G
C
Yeah,
but
we
still
have
them
for
some
time
and
you
should
say:
okay,
we
can
discuss
it
later.
So
if
service
method
needs
to
return,
modified
version
of
the
argument,
original
object
must
not
be
modified
and
you
should
basically
create
a
copy
of
the
original
argument
and
return
modified
version
of
it
basically
done
modified
copy.
D
So
I,
wouldn't
to
get
back
at
the
previous
point,
I
I
would
I
would
disagree
in
that
we
should
not
end
it.
So
basically
what
it
says
you
find
the
student
correctly
is
that
a
service
contract
must
not
expose
patch
API
right,
I.
Think
so.
Yes,
so
I
wouldn't
put
that
restriction
to
a
service
contract.
If
it
says
update
something
it,
we
should
support
the
ability
to
update
to
do
partial
update
for
entities
you.
E
C
C
If
multiple
data
scopes
available
within
one
service
call
only
like
entity
vision,
one
scope
should
be
modified,
so
you
should
not
have
service
contract
which
will
modify,
let's
say
product
and
also
use
simultaneously.
It
should
be
scoped
like
it's.
Your
question
be
scoped
and
then
exception.
Handling
service
must
not
throw
exceptions,
define
this
part
of
like
as
a
layers,
but
instead
they
must
drop
like
lower
layer,
lower
layer,
exceptions
into
service
contract
layer
exceptions
and
only
throw
those
attached.
A
C
C
I
know
probably
just
remote
and
believe:
that's
mostly
it.
There
is
also
one
addition
to
what
technical
vision
is,
and
we
currently
have
just
one
technical
issue,
but
I
believe
we
will
have
more
of
them
and
I
will
just
briefly
read
it
and
if
you
have
any
concerns,
so
imagine
technical
vision
is
a
collection
of
documents
that
describe
desired
state
of
Magento
product,
so
key
phrase
is
desired
state.
It
may
not
reflect
current
state
each
individual
technical
vision
document
relates
to
a
set
of
modules,
logically
grouped
together.
C
So
usually
we
have
a
set
of
modules
like
will.
Sever
will
be
I
related
modules,
which
can
be
grouped
together
and
I,
believe
it
make
sense
to
create
technical
vision
for
the
whole
group,
not
for
individual
modules,
let's
basically
what
it
says,
and
individual
documents
typically
describe
components
place
in
a
system
so
like
what
is
the
relation
to
all
other
subsystems,
its
architecture,
extension
scenarios.
This
is
also
a
believe
important
for
to
understand
how
this
component
was
intended
to
be
extended,
because
extensibility
is
central
park
like
because
it
takes
central
part
in
magenta.
C
This
viability
should
explicitly
described
all
extension
scenarios
and
also
list
of
invariance
just
must
be
preserved
at
all
times
during
component
refactoring
or
extension,
to
ensure
consistency
and
what
it
means.
We
should
state
a
list
of
restrictions
which
were
taken
into
account
during
initial
design
and
implementation
of
component,
and
we
need
to
make
sure
that,
with
all
future
modifications,
we
will
still
go
over
this
environment
least
as
checklist
and
make
sure
that
we
don't
break
anything
that
was
originally
intended
at
least
unintentionally
like.
C
A
Good
any
questions,
not
if
not
you
can
move
on
to
the
next
item,
so
I
just
wanted
to
ask
about
how
specifically
should
add
topics
to
to
the
discussions
as
it's
mentioned
in
the
ticket.
Please
add
them
as
comments
and
what
it
gives
is
and
I
can
understand
who
who
is
going
to
speak
about
it,
because
when
it's
just
add
it
as
a
list,
I
don't
know
and
also
please
add
timing.
A
E
A
F
So,
updates
to
this
to
service
resolution
proposal,
I
added
a
couple
more.
A
few
more
items
to
general
design
principles.
First
item
is
that
each
request
must
have
relation
identifier.
So
later
we
would
be
able
to
I
identify
request
that
a
part
of
the
same
flow,
for
instance,
if
we
have
add
to
cart
operation
BFF.
F
Requests
for
all
of
the
parts
of
they
said
to
cart
the
quest
you
would
be
able
to
find
in
a
data
files
and
by
this
correlation
IDs.
It
will
be
passed
every
every
service,
so
then
service
match
I
must
be
used
for
communication
between
services
and
responsibilities
of
serious
mesh
would
be
routing
load,
balancing.
F
F
F
F
Maybe
not
all
because
service
contracts,
what
we
need
to
keep
backwards
compatibility
for
is
what
is
exposed
on
the
BFF.
Everything
behind
a
BFF
technically
can
be
a
new
API
but
yeah
as
a
data.
It's
probably
less
desire.
Adoption
I,
think
is
better
with
obstinate
Eric.
So
far
is
I
seen
it
in
the
euro,
but
I
didn't
dig
deep
enough.
It's
it
needs
to
be
researched,
but
I
thought
that
we
can
add
this
as
a
funnel
and
decide
how
exactly
to
do
it
later.
F
Alright,
so
this
is
our
update
for
this
document.
Then
I
wanted
to
give
an
overview
of
very
early
draft
for
the
check
out
service,
and
it
contains
I
described
some
of
the
design,
suggestions
and
solutions
to
existing
problems.
In
this
document
and
communication,
communication,
monolithic,
checkout
service.
F
And
communication
between
and
communication
is
check
out
service
and
the
manolito
our
services.
If
we
decide
to
separate
multiple
services,
so
service
should
have
its
own
core
config
data
that
would
contain
setting
specific
service
service
was
API
that
modify
settings
since
the
kinetic
data
and
no
should
edit
in
settings
in
soccer,
but
the
base
settings
for
BFF
or
monolith
or
for
individual
services.
F
It
makes
sense
to
have
this
core
config,
that
and
on
each
service,
because
we
will
still
have
different
scopes
and
the
the
form
what
we
need
to
store
in
the
database
doesn't
doesn't
doesn't
change.
I
didn't
see
that
the
change
so
make
sense
to
keep
it
services
service
should
not
have
knowledge
about
stores
website.
However,
as
a
service,
some
services
store.
F
F
This
validation
admitted
basically
check
out
sir.
We
should
not
have
any
knowledge
of
existing
stores
or
websites,
and
it
will
be
passed.
What
is
he
sent
to
him?
Then?
We
have
directory
data
country,
city
states
that
have
two
needs
to
be
shared
between
multiple
services
in
the
future.
The
suggestion
would
be
is
to
move
this
to
two
configuration
right
now
would
store
it
into
that
evasive.
If
it's
in
the
in
the
configuration,
then
we
can
reuse
this
between
multiple
services
and
this
data
almost
never
changes,
so
it
might
be
okay
to
keep
it
in.
F
F
F
F
F
F
For
instance,
images
are
not
needed
in
checkout
service
and
the
way
in
the
way
is
that
interface
implemented
also
its
its
challenges,
because
some
of
these
interfaces
are
models
that
have
dependencies
on
resource
models
and
she
want
to
initialize
the
resource
model.
It
will
be
loading
information
about
evey
attribute,
for
instance,
if
it's,
if
the
same
so
there
are,
there
are
some
some
challenges
and
you
probably
would
not
apply
to
all
of
the
interfaces
at
send.
F
A
BFF
should
expose
I'll
quote
and
other
services
that
we
would
separate
API
of
the
quote,
and
the
service
is
that
we
would
want
separate
and
work
like
a
proxy
for
costs
to
maintain
backwards,
compatibility
for
a
Web
API,
now,
communication
between
monolith,
application
and
check-out
service
that
we
are
separating.
So
this
is
this
is
a
current
state
of
communication.
When
we
aid
in
product
to
cart,
you
know
it
will
send
request
to
check
out
service
and
support
service.
F
F
F
Totals
totals
may
be
calculated
after
adding
product
to
cart
in
a
separate
operation,
and
this
is
also
something
that
is
not
applied,
but
we
may
want
to
consider
it.
Total
should
not
be
calculated
on
each
cart.
Page
load
also
not
applied,
but
need
need
to
consider
because
we
may
need
to.
We
need
to
calculate
Auto
when.
G
F
F
F
F
It's
similar
to
it's
similar
to
it
card.
It's
it's
only
it's
higher
actually,
because
we
need
to
it.
We
have
the
Lord
quote
multiple
times
in
in
place
order
operation,
and
there
are
some
some
additional
cuts-
a
number
of
course
number,
of
course
more,
but
we
can
probably
reduce
a
number
of
calls
here
as
well.
I
didn't
investigate
this
yet,
but.
F
F
F
We
need
to,
we
need
to
roll
back.
We
may
have
a
case
man.
We
submitted
order
and
order
submitted
successfully,
but
after
all
the
order
is
submitted.
We
need
to
update
code
basically
deactivate
the
code
and
this
operation
may
fail.
So
if
the,
if
this
is
the
case-
and
we
just
need
to
retry
quote
operation-
I-
didn't
look,
I
didn't
describe
how
this
can
be
done
here,
because
this
is
a
concern
that
is
general
and
applies
to
all.
Services
should
be
described.
F
The
separate
is
the
same
as
reporting
and
assess
the
questions
that
still
open
and
not
to
be
investigated.
So
format
of
of
the
data
API
receives
is
different
from
the
format
service
contract
contracts
use
in
some
cases,
hydration
extraction
for
certain
entities
triggers
interaction
with
with
the
database
code.
Reuse
problem
should
be
reuse
as
the
same
interface
on
the
different
services.
F
F
F
A
H
H
So
we
have
multiple
projects
which
are
which
are
going
to
use
the
MDE
project
structure,
which
we
have
already
documented
on
the
architecture
for
the
terrain,
and
unfortunately,
some
of
the
blockers
are
pretty
hard
to
fix.
We've
spent
some
time
investigating
whether
it's
possible
to
fix
it
with
limited
resources
and
deliver
the
fixes,
but
apparently
the
first
one.
The
amount
and
place
load
inside
or
outside
of
the
project
seems
to
be
slightly
bigger
than
it
was
expected.
Initially,
this
this
whole
thing
makes
more
blocks
the
delivery
of
some
of
the
projects
we
are
doing.
H
For
example,
we
are
looking
to
use
this
project
structure
for
the
Adobe
analytics
integration
and
for
the
Japanese
localization
and
potentially
for
the
multi-source
inventory.
So
multiple
projects
are
looking
to
integrate
this
and
well.
The
main
idea
was
to
make
sure
that
nobody
is
hardly
against
using
the
workarounds
for
now
before
the
fixes
are
implemented
in
the
core.
So
currently,
what
we're
doing
is
supplying
project
repositories
with
the
short
manual
which
describes
the
installation
flow
for
the
users
and
testing
showed
that
keeping
the
extension
at
the
magento
documents
route
is
working.
H
Fine,
so
and
no
other
modifications,
apart
from
composer,
consider
necessary
to
on
the
system.
It's
slightly
effects,
developer
experience,
but
it's
nothing
too
major
and
most
of
the
problems
may
be
mitigated
by
configuring,
the
ide
which
developers
using
so
yeah.
This
is
pretty
much
all
I
wanted
to
share.
Maybe
somebody
has
thoughts
on
why
this
is
impossible
or
if
it's,
if
it's
okay,
for
us
to
proceed
this
way
until
the
the
solutions
for
blockers
are
implemented.
A
H
Know,
I'm
pretty
sure
we're
gonna
need
some
additional
resources
coming
from
other
teams
to
fix
it,
as
as
we
usually
thought
that
only
templates
are
affected,
but
actually
lots
of
file
system
operations
which
are
performing
throughout
the
core
are
affected
as
well
because
file
system
it
usually
takes
the
document
routes
as
the
route
for
retrieving
files,
and
this
causes
a
lot
of
confusion
when
the
extension
is
outside
the
project
route.
Okay,.
H
A
A
Anything
else,
if
not,
let
me
just
what
interesting.
Let
me
reiterate
once
again
that
when
you
add
the
topic,
please
add
it
as
a
command
like,
for
example,
that
I
did
so
in
that
way,
I
can
see
who
is
going
to
talk
about
it
and
also
a
duration
like
how
much
time
you
need.
So
you
can
understand
what
you
need
to
switch
to
the
next
topic.
A
So
that's
one
thing
and
the
second,
so
we
will
skip
our
next
meeting
because
sure
the
W
will
have
winter
shutdown
at
that
time
and
next
meeting
will
have
on
january
9th.
If
you
have
any
specific
topics
that
you
want
to
discuss
earlier,
feel
free
to
do
the
madhawk
and
just
I,
don't
know
find
people
you
want
to
discuss
with
feel
free
to
ping
people
in
AB
design
and
slack
channel
any
other
questions
for
today.