26.12.2014 Aufrufe

img - GitHub Pages

img - GitHub Pages

img - GitHub Pages

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

3.5. Implementations-Sicht 52<br />

157<br />

158 Community.find({ where: { name: communityData.name }})<br />

159 .success(function findResult(community) {<br />

160 // ... more callbacks (see cited file)<br />

161 })<br />

162 .error(function findError() {<br />

163 return res.send(500);<br />

164 });<br />

165 })<br />

166 .error(function getError() {<br />

167 return res.send(500);<br />

168 });<br />

169 });<br />

170 }<br />

Quelltext 3.8: Ausschnitt aus Community Controller mit Callback Hell [AJWf]<br />

Quelltext 3.8 zeigt einen Ausschnitt der createCommunity-Funktion. Es ist offensichtlich,<br />

dass dieser Quelltext aufgrund der Verschachtlung von Funktionen sehr schwer<br />

lesbar ist. Diese Situation wird treffend als “Callback hell” bezeichnet.<br />

Für ein Refactoring können folgende zwei Ansätze angewendet werden:<br />

• Funktional<br />

• Promises / Futures<br />

Funktional<br />

Der funktionale Ansatz versucht Callbacks in eigene Funktionen auszulagern und dabei<br />

Seiteneffekte zu vermeiden.<br />

Die Vermeidung von Seiteneffekten ist wichtig und wünschenswert, bedingt aber meist<br />

die Übergabe vieler einzelner Argumente beim Aufruf der ausgelagerten Funktion.<br />

Quelltext 3.9 zeigt einen Ausschnitt der überarbeiteten Version von Quelltext 3.8. Es<br />

wurde der funktionale Ansatz für das Refactoring gewählt.<br />

192 function createCommunity(success, error, data) {<br />

193 var // ...<br />

194 , forwardError = function forwardError(err) {<br />

195 // ...<br />

196 }<br />

197 , afterCommunitySearch = function afterCommunitySearch(community) {<br />

198 // ...<br />

199 communityDao.create(communityData)<br />

200 .success(afterCommunityCreate)<br />

201 .error(forwardError);<br />

202 }<br />

203 , afterCommunityCreate = function afterCommunityCreate(community) {<br />

204 // ...<br />

205 createUniqueSlug(db, community.name, community.id

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!