►
From YouTube: Magento Architectural Discussion, March 27th, 2019
Description
- guidelines for `final` keyword
- exceptions and module dependencies in Backward Compatibility guidelines
- guidelines for plugins, observers, dependencies between application layers, idempotence of Service Contracts
Meeting notes: https://github.com/magento/architecture/issues/135
A
Yeah
about
final
keyword:
there
was
a
discussion
in
the
community
like
channel
I
touched
this
link
to
this
discussion
and
my
question
is
we
have
a
static
check
in
magenta
call
right
now:
it's
HP
MD,
but
I
will
replace
it
with
good
sniffer.
It
doesn't
matter,
but
it
says
that
final
keyboard
is
prohibited
in
magenta
and
there
is
nothing
about
that
in
the
technical
guidelines.
So
my
question
is:
maybe
we
should
add
this
or
somehow
explain
to
the
developers
how
to
use
it?
Why
not
to
use
it.
B
C
Believe
it
implicitly
management
in
terms
of
section
we
say
it
is
not
possible
to
define
all
my
tetanic
method,
firefights
and
so
on.
So
maybe
there
is
no
reason
to
make
sure
that
someone
else
pacifically
the
obligatory
Cobra
got
into
this
new
change
is
very
to
the
positive
some
design
namespace,
not
just
PHP,
or
something
beside
that
I.
E
C
A
C
F
F
We
need
this
rule
to
prevent
significant
changes.
Its
main
effect
not
only
other
plugins
in
shame,
but
overall
application
liability
also
I
put
a
traditional
one
regarding
it,
impotency
for
service
contracts
between
Z's,
okay,
oh
you
know,
that's
we
are
going
to
support
poor
person.
Kronos
called
our
system
are
all
our
Web.
Api
can
be
called
synchronously
starting
some
time
ago.
So
we
have
to
be
sure
that
all
these
actions
can
be
processed
correctly,
so
it
must
be.
All
of
them
must
be
impotent.
G
F
G
E
G
F
A
little
different
these
data
object.
This
is
data
transfer
object
to
the
expectant
that
Seyi
it
has
to
be.
It
has
to
be
serialized
at
some
moment
through
the
network,
so
we
don't
want
to
put
any
additional
application
logic
on
on
it,
even
wrappers,
because
you
know
assume
you
have
this.
Rather,
we
will
have
to
replicate
it
on
different
points.
F
G
G
E
H
This
example
doesn't
seem
clear
because
we
say
layer
must
and
depend
on
layers
even
walks
it,
and
then
we
give
some
example
which
operates,
presentation,
layer
and
doesn't
say
anything
about
like
which
layer
is
dependent
on
which
layer
and
a
no
to
me
to
me
doesn't
look
clear.
It
looks
clear
to
everybody
else.
F
From
is
clear:
that's
presentation,
layer
communicates
to
service
control
fire,
not
the
other
direction,
or
it's
always
through.
That's.
We
can
representation
layer
because
business
logic
layer.
We
have
access
layer
on
disorder.
If
it's
your
service
context
as
a
dependency
and
your
presentation
layers
akka
blocks.
F
H
F
H
F
D
I
H
E
E
J
E
K
F
K
L
K
F
Look
like
this,
your
application
to
properly
design,
because
in
your
service
contracts
you
have
to
manipulate,
is
a
more
abstract
stuff
like
email
and
text,
renderer
and
other.
In
this
case,
you
will
have
another
layer
which
will
be
a
more
lower
layer,
video
when
you
will
have
a
touch
things
like
them:
email,
templates
and
whatever,
but
never
direct
here
combines
this
stuff
inside
your
service
contract.
Is
this
clear.
F
F
F
E
D
E
K
I
I
E
E
F
We
have
plug-ins
for
this
and
you
know
that's
mutable
state
of
objects.
This
is
main
reason
of
incompatibility
between
different
extensions.
I
know
that
this
is
I
have
to
achieve,
but
in
general
I
believe.
All
of
us
want
to
implement
this
rule.
So
we
have
a
plugins
for
more
advanced
cases.
Why
should
we
recommend
to
use
the
events
to
change
the
object
States
because
you
can
change
and
change
anything
everywhere?
F
E
I
Mean
I
agree
with
this:
it
just
very
often
I
get
asked.
Why
do
we
have?
Why
do
we
have
rules
that
are
not
achievable
or
are
not
present
in
system
today,
I
think
historically,
events
were
always
advertised
as
a
way
where
you
can
modify
the
state
of
your
object.
Maybe,
like
some
people
are
asides
and
ways
to
modify
objects,
some
didn't,
but
they
are
very
often
used
for
that
in
including
our
system.
D
I
F
I
Howie,
what's
better
way
to
modify
what
was
a
better
way
to
modify
things
and
let
me
think
about
it,
so
I
call
a
method
right
so
usually
when
we,
when
we
have
this
event,
we
have
this
events
before
something
happens
like,
for
example,
before
an
entity
is
saved
right,
he's
persistent,
so
we
send
an
event.
We
trigger
an
event
called
before
saved
before
right
and
we
send
that
entity
to
that
and
people
change
something
there.
But
today
we
have
plugins
in
the
plugin.
I
I
E
J
F
F
E
F
F
F
K
F
K
F
K
E
We
have
a
simple
rule:
major
change
is
changed
in
API
minor,
changing
is
changing,
so
if
you
are
extending
something
and
when
we
change
something
which
imports
extensibility,
we
should
increase
minor
version.
If
we
change
API,
if
somebody
calls
this
method
behavior
changes.
This
is
major.
That's
very
simple.
We
cannot
predict
how
many
people
be
important
based
on
major
or
minor.
E
G
G
E
G
E
K
J
F
K
E
F
Same
situation,
the
same
situation:
you
have
your
extension,
which
never
calls
which
never
calls
at
product
save
massive
and
always
calls
on
the
gate,
and
we
change
a
save
signature.
Okay,
you're
you're
still
will
will
work,
but
all
other
extreme
should
do
not.
Oh.
This
is
not
example,
I
believe
the
changes
of
a
API
class
signature
is
significant.
One.
F
Installed
version
exists,
a
huge
probability
that
some
photos
will
be
disabled.
All
you
know
that's
how
many
blog
posts
and
tweets
we
have
regarding,
as
effect,
how
to
disable
some
agenda
extensions
or
encode.
As
a
result,
I
believe
that
you
are
you
caught
in
party
releases
should
not
depends
on
depend
on
exist
in
religion
models,
because
we
should
we
cannot
grant
use
it.
This
model
is
already
enabled,
and
after
a
bunch
of
great
client
view,
a
client
instance
will
be
in
workable
state.
F
So
this
is
still
safe
to
add
any
new
model
and
depends
on
this
new
model,
but
in
case
you
want
to
add
dependency
for
an
existing
model
into
your
new
model
or
for
an
existing
model.
This
will
be
a
breakage,
for
instance,
if
you
identified
that's
okay,
your
wish
list,
as
has
to
depend
on
MSRP
model
you.
You
cannot
introduce
this
dependency
in
a
compatible
way,
because
you
cannot
guarantee
that
MSRP
model
is
enabled
it's
a
particular
instance.
As
a
result,
and
as
a
result
of
updates,
you
will
put
a
break
a
client
instance.
F
Can
explain
this
to
technical
writers
and
think
how
we
can
rephrase
this,
but
definitely
we
solves
for
several
times
such
such
cases,
when
we
are
put
in
some
some
dependency
into
existing
models
modulus
for
for
correct
for
existing
modulus.
As
a
result,
it
is
impossible
to
upgrade
the
client,
because.
K
J
F
Your
question
ad:
this
is
just
a
little
bit
Azure
scenario
because
forever
for
new
models,
you
just
checked:
that's
your
version
is
not
satisfied
and
you
cannot
install
it,
and
this
is
okay.
You
do
not
introduce
any
behavior
with
existing
model.
This
is
what's
at
a
worse
situation,
because
you
already
have
it.
F
F
H
C
D
The
only
one
corner
case
where
you
won't
really
notice
over
did
the
work.
That
is
when
the
next
a
network
socket
goes
up
right.
You
go
to
reset
in
all
other
cases
unit.
Please
get
an
HTTP
response
back.
So
if
you
got
a
full
guarantee
from
the
server
that,
oh
five
to
say,
500,
you
know
that
silicone
are
completed
or
an
issue
or
whatever
line
can
safely
send
an
on
I'd
important
request.
Again,
that's
a
guarantee
to
the
so
assured
implement.
D
D
Regardless
of
server
implementation,
client
has
to
look
at
the
response
code
to
tell
was
that
night
important,
essentially
the
server
transfers
that
problem
to
the
client?
You
know
whether
the
client
should
retry
or
not,
because
so
will
indicate
very
clearly
that
I
feel
unless
you
see
a
200.
Ok
from
my
service,
I've
guarantee
I'm
gonna
take
care.
It
doesn't
matter
whether
we
do
asynchronously
in
the.
D
E
E
D
Few
things
Klein
did
not
find
should
not
be
generating
IDs.
It
is
a
service
responsibility,
because,
if
you
look
at
the
rest,
is
everything
about
documents
right
you
use,
clientÃs
completely
alluvial
line
is
saying:
okay,
I'm,
making
a
non
idempotent
request
here
and
bring
of
course,
I
want
to
create
a
new
document.
It
on
men
could
be
product
or
whatever
it
is
coming
in
a
service
respond
to
say
yes,
I
caught
document,
and
here
is
the
ally
of
that
new
document.