Artwork

Conteúdo fornecido por iteration podcast, John Jacob, and JP Sio - Web Developers. Todo o conteúdo do podcast, incluindo episódios, gráficos e descrições de podcast, é carregado e fornecido diretamente por iteration podcast, John Jacob, and JP Sio - Web Developers ou por seu parceiro de plataforma de podcast. Se você acredita que alguém está usando seu trabalho protegido por direitos autorais sem sua permissão, siga o processo descrito aqui https://pt.player.fm/legal.
Player FM - Aplicativo de podcast
Fique off-line com o app Player FM !

Encapsulation

39:54
 
Compartilhar
 

Manage episode 236757437 series 1900125
Conteúdo fornecido por iteration podcast, John Jacob, and JP Sio - Web Developers. Todo o conteúdo do podcast, incluindo episódios, gráficos e descrições de podcast, é carregado e fornecido diretamente por iteration podcast, John Jacob, and JP Sio - Web Developers ou por seu parceiro de plataforma de podcast. Se você acredita que alguém está usando seu trabalho protegido por direitos autorais sem sua permissão, siga o processo descrito aqui https://pt.player.fm/legal.

Episode 6 - More Code Examples

  • Drawing from Chapter 7 - Encapsulation

A weekly podcast about programming, development, and design through the lens of amazing books, chapter-by-chapter.

Encapsulate Record (162)

var organization = { name: "JP Sio", country: "USA" }; 

becomes ⬇️

class Organization { constructor(data) { this._name = data.name; this._country = data.country; } get name() { return this._name; } set name(arg) { this._name = arg; } get country() { return this._country; } set country(arg) { this._country = arg; } } 
  • you can hide what is stored and provide methods
  • consumer of class Organization doesn't need to know / care which is stored and which is calculated
  • nice getter and setter methods
  • makes it easier to refactor -> can hide implementation of internals and update the internals while keeping the same external interface

Encapsulate Collection (170)

class Person { get courses() { return this._courses; } set courses(aList) { this._courses = aList; } } 

becomes ⬇️

class Person { get courses() { return this._courses.slice(); } addCourse(aCourse) { /*...*/ } } 

Replace Primative with Object (174)

orders.filter(0 => "high" === o.priority || "rush" === o.priority) 

becomes ⬇️

orders.filter(o => o.priority.higherThan(new Priority("normal"))); 
  • this goes back to "Primitive Obsession"
  • programmers are often hesitant to create their own types and rely only on primitives. i.e. representing a phone number as a string instead of as it's own type

A telephone number may be represented as a string for a while, but later it will need special behavior for formatting, extracting the area code, and the like

  • create a new class for that bit of data
  • at first, the class does very little. in fact it probably only wraps a primitive
  • but now you have a place to put behavior specific to its needs

Inline Function (115) 🥴

Sometimes it's better to not try to split things apart, sometimes it just complicates things.

// before refactor: function getItemPrice(item) { if (itemOnSale(item) == true) { return item.price - 5 } else { return item.price } }; function itemOnSale(product) { if (product.onSale == true) { return true; } else { return false; } }; let original = getItemPrice(sweatshirt); // after refactor: function newGetItemPrice(item) { if (item.onSale == true) { return item.price - 5 } else { return item.price } }; 

Extract Class (182) 🥴

  • Talk through HUGE applicant model (in Ruby)
  • Broke this into child objects
    • Applicant Health History
    • Applicant Habits
    • Applicant Lifestyle
    • Applicant Method
    • Applicant Legal Release

Picks

  • JP: None :(
  • John: Quad Lock phone mount - bikes
  continue reading

78 episódios

Artwork

Encapsulation

iteration

96 subscribers

published

iconCompartilhar
 
Manage episode 236757437 series 1900125
Conteúdo fornecido por iteration podcast, John Jacob, and JP Sio - Web Developers. Todo o conteúdo do podcast, incluindo episódios, gráficos e descrições de podcast, é carregado e fornecido diretamente por iteration podcast, John Jacob, and JP Sio - Web Developers ou por seu parceiro de plataforma de podcast. Se você acredita que alguém está usando seu trabalho protegido por direitos autorais sem sua permissão, siga o processo descrito aqui https://pt.player.fm/legal.

Episode 6 - More Code Examples

  • Drawing from Chapter 7 - Encapsulation

A weekly podcast about programming, development, and design through the lens of amazing books, chapter-by-chapter.

Encapsulate Record (162)

var organization = { name: "JP Sio", country: "USA" }; 

becomes ⬇️

class Organization { constructor(data) { this._name = data.name; this._country = data.country; } get name() { return this._name; } set name(arg) { this._name = arg; } get country() { return this._country; } set country(arg) { this._country = arg; } } 
  • you can hide what is stored and provide methods
  • consumer of class Organization doesn't need to know / care which is stored and which is calculated
  • nice getter and setter methods
  • makes it easier to refactor -> can hide implementation of internals and update the internals while keeping the same external interface

Encapsulate Collection (170)

class Person { get courses() { return this._courses; } set courses(aList) { this._courses = aList; } } 

becomes ⬇️

class Person { get courses() { return this._courses.slice(); } addCourse(aCourse) { /*...*/ } } 

Replace Primative with Object (174)

orders.filter(0 => "high" === o.priority || "rush" === o.priority) 

becomes ⬇️

orders.filter(o => o.priority.higherThan(new Priority("normal"))); 
  • this goes back to "Primitive Obsession"
  • programmers are often hesitant to create their own types and rely only on primitives. i.e. representing a phone number as a string instead of as it's own type

A telephone number may be represented as a string for a while, but later it will need special behavior for formatting, extracting the area code, and the like

  • create a new class for that bit of data
  • at first, the class does very little. in fact it probably only wraps a primitive
  • but now you have a place to put behavior specific to its needs

Inline Function (115) 🥴

Sometimes it's better to not try to split things apart, sometimes it just complicates things.

// before refactor: function getItemPrice(item) { if (itemOnSale(item) == true) { return item.price - 5 } else { return item.price } }; function itemOnSale(product) { if (product.onSale == true) { return true; } else { return false; } }; let original = getItemPrice(sweatshirt); // after refactor: function newGetItemPrice(item) { if (item.onSale == true) { return item.price - 5 } else { return item.price } }; 

Extract Class (182) 🥴

  • Talk through HUGE applicant model (in Ruby)
  • Broke this into child objects
    • Applicant Health History
    • Applicant Habits
    • Applicant Lifestyle
    • Applicant Method
    • Applicant Legal Release

Picks

  • JP: None :(
  • John: Quad Lock phone mount - bikes
  continue reading

78 episódios

Todos os episódios

×
 
Loading …

Bem vindo ao Player FM!

O Player FM procura na web por podcasts de alta qualidade para você curtir agora mesmo. É o melhor app de podcast e funciona no Android, iPhone e web. Inscreva-se para sincronizar as assinaturas entre os dispositivos.

 

Guia rápido de referências

Ouça este programa enquanto explora
Reproduzir