{"issue":{"pull_request":{"diff_url":null,"html_url":null,"patch_url":null},"state":"open","user":{"avatar_url":"https://secure.gravatar.com/avatar/a09862c4e99d05160beaf5d1f0eee31a?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"a09862c4e99d05160beaf5d1f0eee31a","url":"https://api.github.com/users/darscan","login":"darscan","id":59090},"milestone":{"state":"open","open_issues":13,"url":"https://api.github.com/repos/robotlegs/robotlegs-framework/milestones/1","due_on":null,"description":"The first public beta of Robotlegs version 2","creator":{"avatar_url":"https://secure.gravatar.com/avatar/a09862c4e99d05160beaf5d1f0eee31a?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"a09862c4e99d05160beaf5d1f0eee31a","url":"https://api.github.com/users/darscan","login":"darscan","id":59090},"title":"Version 2 Beta 1","number":1,"closed_issues":1,"created_at":"2011-10-29T14:21:23Z"},"assignee":{"avatar_url":"https://secure.gravatar.com/avatar/a09862c4e99d05160beaf5d1f0eee31a?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"a09862c4e99d05160beaf5d1f0eee31a","url":"https://api.github.com/users/darscan","login":"darscan","id":59090},"labels":[],"updated_at":"2011-11-01T18:44:32Z","comments":28,"closed_at":null,"url":"https://api.github.com/repos/robotlegs/robotlegs-framework/issues/43","body":"http://twitter.com/unclebobmartin/status/131054638840553472","html_url":"https://github.com/robotlegs/robotlegs-framework/issues/43","title":"RL2 Interfaces","number":43,"id":2099400,"created_at":"2011-10-31T17:11:19Z"},"action":"created","comment":{"user":{"avatar_url":"https://secure.gravatar.com/avatar/f0c82d5179b2b107bbe7e20057877eac?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"f0c82d5179b2b107bbe7e20057877eac","url":"https://api.github.com/users/Stray","login":"Stray","id":144457},"updated_at":"2011-11-01T18:44:32Z","url":"https://api.github.com/repos/robotlegs/robotlegs-framework/issues/comments/2594143","body":"@creyenders - Till's point is that if your class *is* the implementation then a redundant interface isn't useful. And without the I, at the point at which you expand the selection of implementations, you can rename the original class to explain how it implements X, make the original class name the interface, and way you go.\r\n\r\nWhere I've the 'I' really useful though is when I'm doing modular development and want to be sure I'm not pulling concrete classes in... but as FlexPMD lets you use api/restricted to guard against that anyway, I'm not sure I'm getting mileage from that anymore.\r\n\r\nWhen you're using Robotlegs / Swiftsuspenders, mostly you're not using constructors - certainly not for the framework classes anyway. As Till says, if you [Inject] a MediatorMap it shouldn't matter to you whether MediatorMap is being implemented by a class of the same name or a class with a different name - as long as it satisfies that type.\r\n\r\nI was really reluctant about this, but just in playing with it yesterday briefly I got some new insights into my implementation, so that's won me over. My big remaining hesitation is that it makes code review tougher - right now I can whip people pretty easily because I can see that they're returning an implementation and not an interface, and with this approach I'd need to ask - or at least scroll up the file and see whether it's in the api or impl / restricted folder.\r\n\r\nSx","id":2594143,"created_at":"2011-11-01T18:44:32Z"}}