On Thursday, September 20, 2018 1:19:20 PM CDT Daniel Plainview wrote:
> > Task - A Task is a specific case of an Event that is bidirectional.
>
> I think this definition is not correct: Task (whatever it is) is not
> specific case of Event, because Event is never bidirectional.
>
> > Message - A Message is a specific case of an Event
>
> Event is special case of a message (likewise command), not vice versa.
>
> I think these definitions would confuse people very much.
>
> P.S.
>
> > renaming TaskInterface to TaskEventInterface and MessageInterface
>
> -Interface suffix buuuurrrns.
Daniel,
I appreciate your position that Event, in the academic sense, is a mono-
directional concept. It was your prompting that originally encouraged us to
split Messages and Tasks into separate workflows to begin with, which I
believe was very much the right decision.
However, the reality on the ground is that virtually every existing PHP
implementation in this problem space, as well as those in most other languages
we looked at, use the term "event". Symfony, Zend, Laravel, Doctrine, Guzzle,
Node.js, all of them use the term "event" to refer to a mutable object that
is, often, bidirectional. (And, by inheritance, the dozens of systems that
also leverage components from those libraries.) Removing the term "event"
from every single existing "event dispatcher" implementation would have the
net effect of making adoption dramatically harder and more cumbersome for
existing implementations to adopt PSR-14, and some we know simply wouldn't do
so. That's a non-starter.
FIG explicitly tries to balance "proper" technique, future-friendly design,
and the existing ecosystem when designing specifications. In cases like this
where there's a clear mismatch between those goals it means we need to
compromise somewhere.
In this case, using two terms that have relatively low collision with existing
implementations (and when they do, "Message" already means what PSR-14 defines
it to mean) as special cases of the universally-recognized term "Event" for
two different behavioral patterns is the best compromise that we've been able
to devise. The term "event" is still present, but in day to day practice
would actually be seen very little by most developers. That's as far from
existing practice as we feel comfortable to go, and even that is iffy.
--Larry Garfield
PSR-14 Editor