9. What is Refactoring?
a change made to the internal structure of software
to make it easier to understand and cheaper to modify
without changing its observable behavior
M. Fowler
11. agile manifesto 8th principle
Agile processes promote sustainable development.
The sponsors, developers, and users should be able
to maintain a constant pace indefinitely.
30. Refactoring Sample Application – v4 – jasmine
describe("Test model objects", function() {!
"use strict";!
!
var Model;!
!
beforeEach(function(done) {!
require(["app/model"], function (model) {!
Model = model;!
done();!
});!
});
it("should return Jovan Vidic when firstName is Jovan and lastName is
Vidic", function() {!
!
var speaker = new Model.Agenda.Speaker(1, "Jovan", "Vidic");!
!
expect(speaker.getFullName()).toBe("Jovan Vidic");!
});!
38. Refactoring Sample Application – v5 – speakers PRESENTER
define(["app/backend_facade", "app/speakers/speakers_view", !
"app/events"], function (backend, SpeakersView, events) {!
!
"use strict";!
!
var EventManager = events.EventManager,!
Actions = events.Actions;!
!
function SpeakerPresenter() { !
var view = new SpeakersView(),!
self;!
!
return {!
init : function () {!
self = this;!
EventManager.register(Actions.LOAD_ALL_SPEAKERS, this.loadAll);!
},!
loadAll : function () {!
backend.loadAllSpeakers({!
"success" : function (speakers) {!
view.showAll(speakers);!
}!
});!
},!
39. Refactoring Sample Application – v5 – Speakers view
define(["app/events", "app/components", "app/speakers/speakers_popup"], !
"use strict”;!
var EventManager = events.EventManager;!
!
function SpeakersView() {!
var speakersTable = new components.SpeakersTable(),!
createButton = new components.Button("btnAddSpeaker"),!
popup = new SpeakersPopup();!
!
function showCreateSpeakerDialog() {!
EventManager.fire(events.Actions.SHOW_CREATE_SPEAKER);!
}!
function init() {!
createButton.addClickListener(showCreateSpeakerDialog);!
}!
init();!
return {!
showAll : function (speakers) {!
var i, len;!
speakersTable.clear();!
for (i = 0, len = speakers.length; i < len; i += 1) {!
speakersTable.addSpeaker(speakers[i]);!
}!
}!
40. Refactoring Sample Application – v5 – SPEAKERS POPUP
define(["app/model", "app/events", "app/components"], function (model, even
!
function SpeakersPopup() {!
var speaker,!
popup = new components.Popup("myModal"),!
firstNameInput = new TextField("firstName"),!
!
function saveSpeaker() {!
speaker.firstName = firstNameInput.val();!
speaker.lastName = lastNameInput.val();!
speaker.topic = topicInput.val();!
!
if (speaker.hasId()) {!
EventManager.fire(events.Actions.EDIT_SPEAKER, speaker);!
} else {!
EventManager.fire(events.Actions.SAVE_SPEAKER, speaker);!
}!
}!
return {!
openAndSet : function (speakerToUpdate) {!
speaker = speakerToUpdate;!
firstNameInput.val(speaker.firstName);!
lastNameInput.val(speaker.lastName);!
!
41. Refactoring Sample Application – v5 – components
http://warren.chinalle.com/2010/12/18/model-view-presenter/
define(["jquery", "app/events", "app/theme"], function ($, events, theme)
!
function TextField(id) {!
var textField = $("#" + id);!
return {!
val : function (value) {!
if (value !== undefined) {!
textField.val(value);!
} else {!
return textField.val();!
}!
}!
};!
}!
!
function SimpleButton(id) {!
var button = $("#" + id);!
return {!
addClickListener : function (listener) {!
button.click(listener);!
}!
};!
}!
!