{"action":"created","issue":{"url":"https://api.github.com/repos/prooph/event-store-client/issues/6","repository_url":"https://api.github.com/repos/prooph/event-store-client","labels_url":"https://api.github.com/repos/prooph/event-store-client/issues/6/labels{/name}","comments_url":"https://api.github.com/repos/prooph/event-store-client/issues/6/comments","events_url":"https://api.github.com/repos/prooph/event-store-client/issues/6/events","html_url":"https://github.com/prooph/event-store-client/issues/6","id":347732871,"node_id":"MDU6SXNzdWUzNDc3MzI4NzE=","number":6,"title":"Split EventStore*Connection interfaces","user":{"login":"codeliner","id":5131987,"node_id":"MDQ6VXNlcjUxMzE5ODc=","avatar_url":"https://avatars2.githubusercontent.com/u/5131987?v=4","gravatar_id":"","url":"https://api.github.com/users/codeliner","html_url":"https://github.com/codeliner","followers_url":"https://api.github.com/users/codeliner/followers","following_url":"https://api.github.com/users/codeliner/following{/other_user}","gists_url":"https://api.github.com/users/codeliner/gists{/gist_id}","starred_url":"https://api.github.com/users/codeliner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codeliner/subscriptions","organizations_url":"https://api.github.com/users/codeliner/orgs","repos_url":"https://api.github.com/users/codeliner/repos","events_url":"https://api.github.com/users/codeliner/events{/privacy}","received_events_url":"https://api.github.com/users/codeliner/received_events","type":"User","site_admin":false},"labels":[{"id":1001578595,"node_id":"MDU6TGFiZWwxMDAxNTc4NTk1","url":"https://api.github.com/repos/prooph/event-store-client/labels/question","name":"question","color":"d876e3","default":true}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":3,"created_at":"2018-08-05T21:31:38Z","updated_at":"2018-08-06T17:01:35Z","closed_at":null,"author_association":"MEMBER","body":"Based on the questions in the chat: https://gitter.im/prooph/improoph?at=5b67641a6d45752f989370e8\r\n\r\nI'm wondering if we can split the Connection interfaces and define smaller scopes like reading from streams, writing to streams and subscription api.\r\n\r\nMy idea is that if we have a subset of the methods defined in a smaller interface that is used by the AggregateRepository we could use composition for Snapshotter, Upcaster, Publisher instead of the current plugin system.\r\n\r\nSomething like this:\r\n\r\n```php\r\n$connection = new UpcastingConnection(\r\n  $upcaster,\r\n  new SnapshotConnection(\r\n    $snapshotter,\r\n    new PublishingConnection(\r\n      $publisher,\r\n      new EventStoreConnection($connectionSettings)\r\n    )    \r\n  )\r\n);\r\n\r\n$repository = new AggregateRepository($connection);\r\n```"},"comment":{"url":"https://api.github.com/repos/prooph/event-store-client/issues/comments/410777736","html_url":"https://github.com/prooph/event-store-client/issues/6#issuecomment-410777736","issue_url":"https://api.github.com/repos/prooph/event-store-client/issues/6","id":410777736,"node_id":"MDEyOklzc3VlQ29tbWVudDQxMDc3NzczNg==","user":{"login":"codeliner","id":5131987,"node_id":"MDQ6VXNlcjUxMzE5ODc=","avatar_url":"https://avatars2.githubusercontent.com/u/5131987?v=4","gravatar_id":"","url":"https://api.github.com/users/codeliner","html_url":"https://github.com/codeliner","followers_url":"https://api.github.com/users/codeliner/followers","following_url":"https://api.github.com/users/codeliner/following{/other_user}","gists_url":"https://api.github.com/users/codeliner/gists{/gist_id}","starred_url":"https://api.github.com/users/codeliner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codeliner/subscriptions","organizations_url":"https://api.github.com/users/codeliner/orgs","repos_url":"https://api.github.com/users/codeliner/repos","events_url":"https://api.github.com/users/codeliner/events{/privacy}","received_events_url":"https://api.github.com/users/codeliner/received_events","type":"User","site_admin":false},"created_at":"2018-08-06T17:01:35Z","updated_at":"2018-08-06T17:01:35Z","author_association":"MEMBER","body":"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"}}
{"actor":{"display_login":"codeliner"}}