Comments (6)
@codeliner from your code example, I can't know which interface is implemented on which connection implementation here.
About PublishingConnection
- I don't think it's a good idea to have an event store connection being responsible to publish events on the message bus.
The setup looks strange, what if I change the order, f.e. inject UpcastingConnection into SnapshotConnection instead the other way around? Will it break?
I think from an end user perspective it looks much easier to setup like this:
$repository = new AggregateRepository($connection, $upcaster, $snapshotter, $publisher);
or maybe this:
$plugins[] = $upcaster;
$plugins[] = $snapshotter;
$plugins[] = $publisher;
$repository = new AggregateRepository($connection, $plugins);
from event-store-client.
@prolic it is always the same interface. The real connection gets decorated by connection implementations that implement the same interface, add their specific functionality and then call the parent method.
You can of course change the order. It's like a middleware pipe.
But ok, if you don't like it we need to find another way. The thing is moving upcasters and metadata enricher to the aggregate repository is wrong IMHO. You would need to pass the same plugins to each repository and prooph/event-sourcing is not always used. It is a separate package. micro for example don't use it. So we would need to create another plugin system for micro :(
from event-store-client.
from event-store-client.
micro was just an example. Good that most parts are covered but does not change the main issue that the aggregate repository is not responsible for a full blown plugin system. the event store is the central component and should provide the hooks. SnapshotStore is the only exception because it provides aggregate snapshots. Upcaster, MetadataEnricher, Publisher all deal with the events written to or read from the event store no matter where they come from.
That was the original idea of the plugin system. Not a fan of changing this. Why can't the event-store-client have a plugin system?
from event-store-client.
So maybe wrap the event store with "something" that has plugins? Like the ActionEventEmitterEventStore wrapper from v7
from event-store-client.
yeah, that sounds good 👍
from event-store-client.
Related Issues (20)
- Unclear message when trying to communicate through closed connection
- Support EventStore v6 HOT 3
- Support UUID1 / UUID5, ... HOT 3
- RC not compatible with any release of "prooph/event-sourcing" HOT 1
- Add psalm HOT 1
- [RFC] Adding PHPdoc to generate API docs HOT 2
- Issue with simple examples and event store 5 HOT 1
- Travis failed (ramsey uuid 4) HOT 9
- [RFC] Removing "type" from projections management HOT 1
- Change constructors for http communications HOT 3
- EventStorePersistentSubscription is in namespace internal but required to be used HOT 1
- Connection process cannot be "waited" HOT 7
- MemberInfoDto timeStamp is a string, not int as the code suggests for a v5 cluster HOT 2
- Event Store is now secure by default HOT 5
- subscribetoAllAsync fails with BadRequest HOT 3
- Trying the example with server version 20.10.0.0, but can't connect HOT 2
- Segmentation fault HOT 3
- Incompatibility with Laravel 8 HOT 1
- Prooph\EventStore\Exception\CannotEstablishConnection Cannot resolve target end point HOT 11
- performOnMasterOnly property doesn't seem to work HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from event-store-client.