{"action":"created","issue":{"url":"https://api.github.com/repos/gushphp/gush/issues/427","labels_url":"https://api.github.com/repos/gushphp/gush/issues/427/labels{/name}","comments_url":"https://api.github.com/repos/gushphp/gush/issues/427/comments","events_url":"https://api.github.com/repos/gushphp/gush/issues/427/events","html_url":"https://github.com/gushphp/gush/issues/427","id":73349737,"number":427,"title":"[WIP] Application refactoring roadmap","user":{"login":"sstok","id":904790,"avatar_url":"https://avatars.githubusercontent.com/u/904790?v=3","gravatar_id":"","url":"https://api.github.com/users/sstok","html_url":"https://github.com/sstok","followers_url":"https://api.github.com/users/sstok/followers","following_url":"https://api.github.com/users/sstok/following{/other_user}","gists_url":"https://api.github.com/users/sstok/gists{/gist_id}","starred_url":"https://api.github.com/users/sstok/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sstok/subscriptions","organizations_url":"https://api.github.com/users/sstok/orgs","repos_url":"https://api.github.com/users/sstok/repos","events_url":"https://api.github.com/users/sstok/events{/privacy}","received_events_url":"https://api.github.com/users/sstok/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/gushphp/gush/labels/RFC","name":"RFC","color":"fbca04"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/gushphp/gush/milestones/2","html_url":"https://github.com/gushphp/gush/milestones/2.0","labels_url":"https://api.github.com/repos/gushphp/gush/milestones/2/labels","id":1096954,"number":2,"title":"2.0","description":"","creator":{"login":"sstok","id":904790,"avatar_url":"https://avatars.githubusercontent.com/u/904790?v=3","gravatar_id":"","url":"https://api.github.com/users/sstok","html_url":"https://github.com/sstok","followers_url":"https://api.github.com/users/sstok/followers","following_url":"https://api.github.com/users/sstok/following{/other_user}","gists_url":"https://api.github.com/users/sstok/gists{/gist_id}","starred_url":"https://api.github.com/users/sstok/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sstok/subscriptions","organizations_url":"https://api.github.com/users/sstok/orgs","repos_url":"https://api.github.com/users/sstok/repos","events_url":"https://api.github.com/users/sstok/events{/privacy}","received_events_url":"https://api.github.com/users/sstok/received_events","type":"User","site_admin":false},"open_issues":2,"closed_issues":1,"state":"open","created_at":"2015-05-05T14:02:37Z","updated_at":"2015-05-07T14:02:37Z","due_on":null,"closed_at":null},"comments":1,"created_at":"2015-05-05T15:39:12Z","updated_at":"2015-10-15T14:52:31Z","closed_at":null,"body":"Related to #401 this describes the roadmap to take for refactoring the Application in Gush 2.0.\r\n\r\nThe final goal is to decouple Gush from any framework or library.\r\nTo make this possible the application is designed with the adapter design-pattern whenever possible.\r\n\r\n## Layers architecture\r\n\r\n### Commands\r\n\r\n* Commands work similar to web Controllers, they are thin and function as a layer between the Console Application and underlying services.\r\n* Commands only communicate with an \"API Adapter\" or \"Service\" and never with any other system directly. So instead of running the php-cs-fixer executable directly this happens through a Service like \"CsFixer\" which invokes the php-cs-fixer and handles any output back to the Command.\r\n* System (Git commands) are always done using the GitSystem service (better name needed), complex operations like merging or rebasing are done using an Operation, the Command only configures the operator for execution.\r\n\r\n* Commands are decoupled from any 3rd part library.\r\n* Command handling is separated from the command definition (the command definition is an implementation detail of the used library).\r\n* We use our own IO interface instead of relying on the Console libraries implementation.\r\n  * This handles all IO operations, including questions and table rendering.\r\n  * The current StyleHelper will be moved to this interface.\r\n\r\n### Service layer\r\n\r\nTBD."},"comment":{"url":"https://api.github.com/repos/gushphp/gush/issues/comments/148410118","html_url":"https://github.com/gushphp/gush/issues/427#issuecomment-148410118","issue_url":"https://api.github.com/repos/gushphp/gush/issues/427","id":148410118,"user":{"login":"cordoval","id":328359,"avatar_url":"https://avatars.githubusercontent.com/u/328359?v=3","gravatar_id":"","url":"https://api.github.com/users/cordoval","html_url":"https://github.com/cordoval","followers_url":"https://api.github.com/users/cordoval/followers","following_url":"https://api.github.com/users/cordoval/following{/other_user}","gists_url":"https://api.github.com/users/cordoval/gists{/gist_id}","starred_url":"https://api.github.com/users/cordoval/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cordoval/subscriptions","organizations_url":"https://api.github.com/users/cordoval/orgs","repos_url":"https://api.github.com/users/cordoval/repos","events_url":"https://api.github.com/users/cordoval/events{/privacy}","received_events_url":"https://api.github.com/users/cordoval/received_events","type":"User","site_admin":false},"created_at":"2015-10-15T14:52:31Z","updated_at":"2015-10-15T14:52:31Z","body":"this ticket must be broken down into actionables"}}