{"action":"created","issue":{"url":"https://api.github.com/repos/Particular/NServiceBus/issues/3908","repository_url":"https://api.github.com/repos/Particular/NServiceBus","labels_url":"https://api.github.com/repos/Particular/NServiceBus/issues/3908/labels{/name}","comments_url":"https://api.github.com/repos/Particular/NServiceBus/issues/3908/comments","events_url":"https://api.github.com/repos/Particular/NServiceBus/issues/3908/events","html_url":"https://github.com/Particular/NServiceBus/issues/3908","id":164268572,"number":3908,"title":"Make more types public for extendability","user":{"login":"ramonsmits","id":152998,"avatar_url":"https://avatars.githubusercontent.com/u/152998?v=3","gravatar_id":"","url":"https://api.github.com/users/ramonsmits","html_url":"https://github.com/ramonsmits","followers_url":"https://api.github.com/users/ramonsmits/followers","following_url":"https://api.github.com/users/ramonsmits/following{/other_user}","gists_url":"https://api.github.com/users/ramonsmits/gists{/gist_id}","starred_url":"https://api.github.com/users/ramonsmits/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ramonsmits/subscriptions","organizations_url":"https://api.github.com/users/ramonsmits/orgs","repos_url":"https://api.github.com/users/ramonsmits/repos","events_url":"https://api.github.com/users/ramonsmits/events{/privacy}","received_events_url":"https://api.github.com/users/ramonsmits/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":4,"created_at":"2016-07-07T09:36:46Z","updated_at":"2016-07-12T13:26:48Z","closed_at":null,"body":"This issue is forked based on the discussion in #3821 with this comment https://github.com/Particular/NServiceBus/issues/3821#issuecomment-230432796\r\n\r\nWe have close our assemblies to expose the bare minimum to operate. Only exposing several interfaces as extension points. I know that this is to expose the least amount of api to prevent breaking changes when applying semver but I think this went too far.\r\n\r\nI would like to suggest to open up our assemblies so users are able to extend existing behavior without the need main our internals.\r\n\r\nAn example is this comment https://github.com/Particular/NServiceBus/issues/3821#issuecomment-230432796 where \r\n\r\nCurrent implementations types should be open for extension so if we fix anything in our internals that customer don't need to update their cloned copies as is currently required and @yvesgoeleven example is coincidentally a very good example.\r\nInterface `IConvertOutgoingMessagesToBrokeredMessages` is a good start however, the implementation `DefaultBatchedOperationsToBrokeredMessagesConverter` is closed. Why would a user need to clone and maintain that if they need a subtle change like setting a property or adding a header?\r\n\r\nOn the other hand, you could say that maybe that class has too many responsibilities thus we need more interfaces to split concerns or more interface methods but this that would not solve the 'extend' concern but I would be in favor of applying the Open Close Principle to a lot of our types or give the user more control to reference such types so such types can be wrapped to do pre or post operations.\r\n"},"comment":{"url":"https://api.github.com/repos/Particular/NServiceBus/issues/comments/232046458","html_url":"https://github.com/Particular/NServiceBus/issues/3908#issuecomment-232046458","issue_url":"https://api.github.com/repos/Particular/NServiceBus/issues/3908","id":232046458,"user":{"login":"ramonsmits","id":152998,"avatar_url":"https://avatars.githubusercontent.com/u/152998?v=3","gravatar_id":"","url":"https://api.github.com/users/ramonsmits","html_url":"https://github.com/ramonsmits","followers_url":"https://api.github.com/users/ramonsmits/followers","following_url":"https://api.github.com/users/ramonsmits/following{/other_user}","gists_url":"https://api.github.com/users/ramonsmits/gists{/gist_id}","starred_url":"https://api.github.com/users/ramonsmits/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ramonsmits/subscriptions","organizations_url":"https://api.github.com/users/ramonsmits/orgs","repos_url":"https://api.github.com/users/ramonsmits/repos","events_url":"https://api.github.com/users/ramonsmits/events{/privacy}","received_events_url":"https://api.github.com/users/ramonsmits/received_events","type":"User","site_admin":false},"created_at":"2016-07-12T13:26:48Z","updated_at":"2016-07-12T13:26:48Z","body":"@timbussmann Maybe we need more extension points instead of exposing more types but I don't read anything about my concern that a user its currently only option is to fork a repo and keep it up to date. \r\n\r\nWould you state that this is what a user should do, fork a repo? If that is what is deemed the right thing from a maintainers perspective then I'm fine.\r\n\r\nBesides that, this approach also makes it hard to work with package managers as @SimonCropp state as now suddenly all downstreams cannot be added anymore as core is custom."}}
{"actor":{"display_login":"ramonsmits"}}