Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Do SOLID a uma Arquitetura Hexagonal via Devconf(Opensanca)

Do SOLID a uma Arquitetura Hexagonal via Devconf(Opensanca)

Alexandre Aquiles, aborda do SOLID a uma Arquitetura Hexagonal: uma história de transformação.

Sinopse:

Alexandre Aquiles irá contar a história de transformação de um código ruim em um código mais fácil de entender e modificar. As mentoras dessa transformação serão as 5 letrinhas do acrônimo SOLID. E nosso ponto de chegada será uma Arquitetura Hexagonal!

No meio do caminho, analisaremos os trade-offs de cada uma das etapas de transformação, pensando sobre os prós e contras de cada uma das letrinhas do SOLID.

Opensanca

May 27, 2023
Tweet

More Decks by Opensanca

Other Decks in Programming

Transcript

  1. Do SOLID
    uma abordagem baseada
    em trade-offs
    ao Ports & Adapters

    View full-size slide

  2. Do SOLID
    uma abordagem baseada
    em trade-offs
    ao Ports & Adapters

    View full-size slide

  3. SOLID
    uma história

    View full-size slide

  4. Transformação

    View full-size slide

  5. História
    de transformação
    pra código?

    View full-size slide

  6. Refatoração!

    View full-size slide

  7. Quem vai contar a
    história?

    View full-size slide

  8. Alexandre Aquiles

    View full-size slide

  9. Engenheiro de Software

    View full-size slide

  10. Engenheiro de Software
    Professor

    View full-size slide

  11. Engenheiro de Software
    Professor
    Líder técnico

    View full-size slide

  12. Engenheiro de Software
    Professor
    Líder técnico
    Gerente

    View full-size slide

  13. Engenheiro de Software
    Professor
    Líder técnico
    Gerente
    Faz tudo...

    View full-size slide

  14. Engenheiro de Software
    Professor
    Líder técnico
    Gerente
    Faz tudo...

    View full-size slide

  15. E o protagonista?

    View full-size slide

  16. Cotuba
    um gerador de ebooks
    PDF e EPUB a partir de
    Markdown

    View full-size slide

  17. Na verdade, o
    protagonista é o

    View full-size slide

  18. Na verdade, o
    protagonista é o
    Código
    do Cotuba

    View full-size slide

  19. 246 linhas de código
    ou

    View full-size slide

  20. 246 linhas de código
    1 arquivo Main.java
    1 classe Main
    1 método main
    ou

    View full-size slide

  21. Nosso objetivo?

    View full-size slide

  22. Código de Qualidade

    View full-size slide

  23. Código de Qualidade
    mais fácil de modificar

    View full-size slide

  24. Código de Qualidade
    mais fácil de modificar
    mais fácil de entender

    View full-size slide

  25. Alguém experiente
    para nos mentorar

    View full-size slide

  26. S. O. L. I. D.

    View full-size slide

  27. S. O. L. I. D.
    , Robert Martin, 2006
    The Principles of OOD

    View full-size slide

  28. S. O. L. I. D.
    , Robert Martin, 2006
    The Principles of OOD

    View full-size slide

  29. S. O. L. I. D.
    , Robert Martin, 2006
    The Principles of OOD

    View full-size slide

  30. Representação em código da
    linguagem de negócio de maneira
    consistente

    View full-size slide

  31. maneiras de agrupar código ao redor
    de mudanças
    abstrações para flexibilidade
    uso bom de subtipos
    separar detalhes técnicos de negócio
    Representação em código da
    linguagem de negócio de maneira
    consistente
    S. O. L. I. D.

    View full-size slide

  32. SOLID
    , Robert C. Martin, 2002
    Agile Software Development: Principles, Patterns and Practices

    View full-size slide

  33. SOLID
    , Robert C. Martin, 2002
    Agile Software Development: Principles, Patterns and Practices

    View full-size slide

  34. SOLID
    , Robert C. Martin, 2002
    Agile Software Development: Principles, Patterns and Practices

    View full-size slide

  35. SOLID
    DICAS
    , Robert C. Martin, 2002
    Agile Software Development: Principles, Patterns and Practices

    View full-size slide

  36. SOLID
    DICAS
    SOLDI?
    , Robert C. Martin, 2002
    Agile Software Development: Principles, Patterns and Practices

    View full-size slide

  37. SINGLE RESPONSIBILITY

    View full-size slide

  38. SINGLE RESPONSIBILITY
    Responsabilidade Única

    View full-size slide

  39. SINGLE RESPONSIBILITY
    Responsabilidade Única
    Única?

    View full-size slide

  40. SINGLE RESPONSIBILITY
    , Robert C. Martin, 2017
    Clean Architecture

    View full-size slide

  41. SINGLE RESPONSIBILITY
    , Robert C. Martin, 2017
    Clean Architecture

    View full-size slide

  42. SINGLE RESPONSIBILITY
    , Robert C. Martin, 2017
    Clean Architecture

    View full-size slide

  43. SINGLE RESPONSIBILITY
    , Robert C. Martin, 2017
    Clean Architecture

    View full-size slide

  44. SINGLE RESPONSIBILITY
    , Robert C. Martin, 2017
    Clean Architecture

    View full-size slide

  45. SINGLE RESPONSIBILITY
    , Edward Yourdon & Larry Constantine, 1978
    Structured Design
    Coesão

    View full-size slide

  46. SINGLE RESPONSIBILITY
    , Edward Yourdon & Larry Constantine, 1978
    Structured Design
    Coesão

    View full-size slide

  47. SINGLE RESPONSIBILITY
    , Edward Yourdon & Larry Constantine, 1978
    Structured Design
    Coesão

    View full-size slide

  48. SINGLE RESPONSIBILITY
    Coesão
    , Glenn Vanderburg, 2011
    Cohesion

    View full-size slide

  49. SINGLE RESPONSIBILITY
    Coesão
    (2019)
    This Banana Was Duct-Taped to a Wall.
    It Sold for $120,000.
    , Glenn Vanderburg, 2011
    Cohesion

    View full-size slide

  50. SINGLE RESPONSIBILITY
    Coesão
    (2019)
    This Banana Was Duct-Taped to a Wall.
    It Sold for $120,000.
    Ghost, o outro lado da vida (1990)
    , Glenn Vanderburg, 2011
    Cohesion

    View full-size slide

  51. SINGLE RESPONSIBILITY
    , Robert C. Martin, 2002
    Agile Software Development: Principles, Patterns and Practices

    View full-size slide

  52. SINGLE RESPONSIBILITY
    , Robert C. Martin, 2002
    Agile Software Development: Principles, Patterns and Practices

    View full-size slide

  53. SINGLE RESPONSIBILITY
    , Robert C. Martin, 2002
    Agile Software Development: Principles, Patterns and Practices

    View full-size slide

  54. SINGLE RESPONSIBILITY
    , Robert C. Martin, 2002
    Agile Software Development: Principles, Patterns and Practices

    View full-size slide

  55. SINGLE RESPONSIBILITY

    View full-size slide

  56. SINGLE RESPONSIBILITY
    TÉCNICA

    View full-size slide

  57. SINGLE RESPONSIBILITY
    TÉCNICA
    Ouça seus imports

    View full-size slide

  58. Ouça seus imports
    , Steve Freeman & Nat Pryce, 2009
    GOOS
    SINGLE RESPONSIBILITY PRINCIPLE

    View full-size slide

  59. Ouça seus imports
    , Steve Freeman & Nat Pryce, 2009
    GOOS
    SINGLE RESPONSIBILITY PRINCIPLE

    View full-size slide

  60. Ouça seus imports
    , Steve Freeman & Nat Pryce, 2009
    GOOS
    SINGLE RESPONSIBILITY PRINCIPLE

    View full-size slide

  61. Ouça seus imports
    , Steve Freeman & Nat Pryce, 2009
    GOOS
    SINGLE RESPONSIBILITY PRINCIPLE

    View full-size slide

  62. Ouça seus imports
    , Steve Freeman & Nat Pryce, 2009
    GOOS
    SINGLE RESPONSIBILITY PRINCIPLE

    View full-size slide

  63. Ouça seus imports
    , Steve Freeman & Nat Pryce, 2009
    GOOS
    SINGLE RESPONSIBILITY PRINCIPLE

    View full-size slide

  64. Ouça seus imports
    SINGLE RESPONSIBILITY

    View full-size slide

  65. Ouça seus imports
    SINGLE RESPONSIBILITY

    View full-size slide

  66. Ouça seus imports
    SINGLE RESPONSIBILITY

    View full-size slide

  67. Ouça seus imports
    SINGLE RESPONSIBILITY

    View full-size slide

  68. Ouça seus imports
    SINGLE RESPONSIBILITY

    View full-size slide

  69. Ouça seus imports
    SINGLE RESPONSIBILITY

    View full-size slide

  70. Ouça seus imports
    SINGLE RESPONSIBILITY

    View full-size slide

  71. Ouça seus imports
    SINGLE RESPONSIBILITY

    View full-size slide

  72. Ouça seus imports
    SINGLE RESPONSIBILITY

    View full-size slide

  73. Ouça seus imports
    SINGLE RESPONSIBILITY

    View full-size slide

  74. Ouça seus imports
    SINGLE RESPONSIBILITY

    View full-size slide

  75. Ouça seus imports
    SINGLE RESPONSIBILITY

    View full-size slide

  76. Ouça seus imports
    SINGLE RESPONSIBILITY

    View full-size slide

  77. Ouça seus imports
    SINGLE RESPONSIBILITY

    View full-size slide

  78. Ouça seus imports
    SINGLE RESPONSIBILITY

    View full-size slide

  79. Ouça seus imports
    SINGLE RESPONSIBILITY

    View full-size slide

  80. SINGLE RESPONSIBILITY

    View full-size slide

  81. SINGLE RESPONSIBILITY

    View full-size slide

  82. DEPENDENCY INVERSION

    View full-size slide

  83. DEPENDENCY INVERSION
    Inverter Dependências?

    View full-size slide

  84. DEPENDENCY INVERSION
    Acoplamento
    , Edward Yourdon & Larry Constantine, 1978
    Structured Design

    View full-size slide

  85. DEPENDENCY INVERSION
    Acoplamento
    , Edward Yourdon & Larry Constantine, 1978
    Structured Design

    View full-size slide

  86. DEPENDENCY INVERSION
    Acoplamento
    , Edward Yourdon & Larry Constantine, 1978
    Structured Design

    View full-size slide

  87. DEPENDENCY INVERSION
    Acoplamento
    , Edward Yourdon & Larry Constantine, 1978
    Structured Design

    View full-size slide

  88. DEPENDENCY INVERSION

    View full-size slide

  89. DEPENDENCY INVERSION

    View full-size slide

  90. DEPENDENCY INVERSION
    Acoplamento Bom
    vs
    Acoplamento Ruim

    View full-size slide

  91. DEPENDENCY INVERSION

    View full-size slide

  92. DEPENDENCY INVERSION
    Alto Nível: regras de negócio
    Baixo Nível: mecanismos de
    entrega, detalhes de implementação

    View full-size slide

  93. DEPENDENCY INVERSION
    , GoF, 1995
    Design Patterns
    Parece familiar...

    View full-size slide

  94. DEPENDENCY INVERSION
    , GoF, 1995
    Design Patterns
    Parece familiar...

    View full-size slide

  95. DEPENDENCY INVERSION
    , GoF, 1995
    Design Patterns
    Parece familiar...

    View full-size slide

  96. DEPENDENCY INVERSION PRINCIPLE
    TÉCNICA

    View full-size slide

  97. DEPENDENCY INVERSION PRINCIPLE
    TÉCNICA
    Libs/APIs são
    baixo nível

    View full-size slide

  98. DEPENDENCY INVERSION

    View full-size slide

  99. DEPENDENCY INVERSION

    View full-size slide

  100. DEPENDENCY INVERSION
    alto nível
    baixo nível baixo nível

    View full-size slide

  101. DEPENDENCY INVERSION
    alto nível
    baixo nível baixo nível

    View full-size slide

  102. DEPENDENCY INVERSION
    alto nível
    baixo nível baixo nível

    View full-size slide

  103. DEPENDENCY INVERSION
    alto nível
    baixo nível baixo nível

    View full-size slide

  104. DEPENDENCY INVERSION
    alto nível
    baixo nível baixo nível

    View full-size slide

  105. DEPENDENCY INVERSION

    View full-size slide

  106. DEPENDENCY INVERSION

    View full-size slide

  107. DEPENDENCY INVERSION

    View full-size slide

  108. DEPENDENCY INVERSION

    View full-size slide

  109. DEPENDENCY INVERSION

    View full-size slide

  110. DEPENDENCY INVERSION
    Abstração
    Implementação (Baixo Nível)

    View full-size slide

  111. DEPENDENCY INVERSION

    View full-size slide

  112. DEPENDENCY INVERSION

    View full-size slide

  113. DEPENDENCY INVERSION
    alto nível baixo nível

    View full-size slide

  114. DEPENDENCY INVERSION
    alto nível baixo nível

    View full-size slide

  115. DEPENDENCY INVERSION
    alto nível baixo nível
    dependência
    de código
    dependência
    de código

    View full-size slide

  116. DEPENDENCY INVERSION
    alto nível baixo nível
    dependência
    de código
    dependência
    de código
    dependência em runtime

    View full-size slide

  117. DEPENDENCY INVERSION PRINCIPLE
    Como ligar os objetos?

    View full-size slide

  118. DEPENDENCY INVERSION PRINCIPLE
    Como ligar os objetos?
    Factory

    View full-size slide

  119. DEPENDENCY INVERSION PRINCIPLE
    Como ligar os objetos?
    Factory
    Service Locator

    View full-size slide

  120. DEPENDENCY INVERSION PRINCIPLE
    Como ligar os objetos?
    Factory
    Service Locator
    Dependency Injection

    View full-size slide

  121. DEPENDENCY INVERSION
    Dependency Injection

    View full-size slide

  122. DEPENDENCY INVERSION
    Dependency Injection

    View full-size slide

  123. DEPENDENCY INVERSION
    Dependency Injection

    View full-size slide

  124. DEPENDENCY INVERSION
    Dependency Injection

    View full-size slide

  125. DEPENDENCY INVERSION
    Dependency Injection
    ComCommonMark

    View full-size slide

  126. DEPENDENCY INVERSION
    Dependency Injection

    View full-size slide

  127. DEPENDENCY INVERSION
    Dependency Injection

    View full-size slide

  128. DEPENDENCY INVERSION
    Dependency Injection

    View full-size slide

  129. DEPENDENCY INVERSION
    Dependency Injection

    View full-size slide

  130. DEPENDENCY INVERSION
    alto nível baixo nível
    baixo nível

    View full-size slide

  131. DEPENDENCY INVERSION
    alto nível baixo nível
    baixo nível

    View full-size slide

  132. DEPENDENCY INVERSION
    alto nível baixo nível
    baixo nível

    View full-size slide

  133. DEPENDENCY INVERSION
    alto nível baixo nível
    baixo nível

    View full-size slide

  134. DEPENDENCY INVERSION
    alto nível baixo nível
    baixo nível

    View full-size slide

  135. DEPENDENCY INVERSION

    View full-size slide

  136. DEPENDENCY INVERSION

    View full-size slide

  137. DEPENDENCY INVERSION
    baixo nível
    alto nível
    baixo nível

    View full-size slide

  138. DEPENDENCY INVERSION
    baixo nível
    alto nível
    baixo nível

    View full-size slide

  139. DEPENDENCY INVERSION
    baixo nível
    alto nível
    baixo nível

    View full-size slide

  140. DEPENDENCY INVERSION
    baixo nível
    baixo nível
    alto nível

    View full-size slide

  141. DEPENDENCY INVERSION
    baixo nível
    baixo nível
    alto nível

    View full-size slide

  142. DEPENDENCY INVERSION
    baixo nível
    baixo nível
    alto nível

    View full-size slide

  143. DEPENDENCY INVERSION
    baixo nível
    baixo nível
    alto nível
    dependência
    invertida

    View full-size slide

  144. DEPENDENCY INVERSION
    baixo nível
    baixo nível
    alto nível
    setinhas apontando
    pro negócio
    dependência
    invertida

    View full-size slide

  145. DEPENDENCY INVERSION

    View full-size slide

  146. DEPENDENCY INVERSION

    View full-size slide

  147. ARQUITETURA HEXAGONAL

    View full-size slide

  148. ARQUITETURA HEXAGONAL

    View full-size slide

  149. PORTS & ADAPTERS

    View full-size slide

  150. PORTS & ADAPTERS

    View full-size slide

  151. PORTS & ADAPTERS

    View full-size slide

  152. PORTS & ADAPTERS

    View full-size slide

  153. PORTS & ADAPTERS
    Código Flexível
    como um
    USB

    View full-size slide

  154. PORTS & ADAPTERS

    View full-size slide

  155. PORTS & ADAPTERS
    driving
    port

    View full-size slide

  156. PORTS & ADAPTERS
    driving
    port
    driven
    ports

    View full-size slide

  157. OPEN CLOSED
    Aberto e Fechado?

    View full-size slide

  158. OPEN CLOSED
    Aberto e Fechado?

    View full-size slide

  159. OPEN CLOSED
    ????

    View full-size slide

  160. OPEN CLOSED
    Variações Protegidas
    , Craig Larman, 2001
    Protected Variation

    View full-size slide

  161. OPEN CLOSED
    Variações Protegidas
    , Craig Larman, 2001
    Protected Variation

    View full-size slide

  162. OPEN CLOSED
    Variações Protegidas
    , Craig Larman, 2001
    Protected Variation

    View full-size slide

  163. OPEN CLOSED
    Em LISP?
    , Abelson & Sussmann, 1996
    SICP 2ed

    View full-size slide

  164. OPEN CLOSED
    Em LISP?
    , Abelson & Sussmann, 1996
    SICP 2ed

    View full-size slide

  165. OPEN CLOSED
    Em LISP?
    , Abelson & Sussmann, 1996
    SICP 2ed

    View full-size slide

  166. OPEN CLOSED
    Em LISP?
    , Abelson & Sussmann, 1996
    SICP 2ed

    View full-size slide

  167. OPEN CLOSED
    TÉCNICA

    View full-size slide

  168. OPEN CLOSED
    TÉCNICA
    Proteger
    implementações
    alternativas
    atrás de abstrações

    View full-size slide

  169. OPEN CLOSED
    novo formato

    View full-size slide

  170. OPEN CLOSED
    novo formato

    View full-size slide

  171. OPEN CLOSED
    novo formato

    View full-size slide

  172. OPEN CLOSED
    novo formato

    View full-size slide

  173. OPEN CLOSED ++
    , Bertrand Meyer, 1997
    Object-Oriented Software Construction 2ed

    View full-size slide

  174. OPEN CLOSED ++
    , Bertrand Meyer, 1997
    Object-Oriented Software Construction 2ed

    View full-size slide

  175. OPEN CLOSED ++
    , Bertrand Meyer, 1997
    Object-Oriented Software Construction 2ed

    View full-size slide

  176. OPEN CLOSED ++
    , Bertrand Meyer, 1997
    Object-Oriented Software Construction 2ed

    View full-size slide

  177. OPEN CLOSED ++
    , Bertrand Meyer, 1997
    Object-Oriented Software Construction 2ed

    View full-size slide

  178. OPEN CLOSED ++
    O Original
    , Bertrand Meyer, 1997
    Object-Oriented Software Construction 2ed

    View full-size slide

  179. OPEN CLOSED ++
    PLUGINS

    View full-size slide

  180. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    cotuba

    View full-size slide

  181. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    cotuba Hooks

    View full-size slide

  182. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    cotuba
    Service Provider Interface (SPI)
    Hooks

    View full-size slide

  183. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    tema-paradizo

    View full-size slide

  184. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    tema-paradizo outro projeto

    View full-size slide

  185. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    tema-paradizo outro projeto

    View full-size slide

  186. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    tema-paradizo outro projeto

    View full-size slide

  187. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    tema-paradizo outro projeto

    View full-size slide

  188. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    tema-paradizo
    Service Provider
    outro projeto

    View full-size slide

  189. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    tema-paradizo

    View full-size slide

  190. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    tema-paradizo

    View full-size slide

  191. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    tema-paradizo

    View full-size slide

  192. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    tema-paradizo

    View full-size slide

  193. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    estatisticas-ebook

    View full-size slide

  194. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    estatisticas-ebook
    outro projeto

    View full-size slide

  195. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    estatisticas-ebook
    outro projeto

    View full-size slide

  196. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    estatisticas-ebook
    outro projeto

    View full-size slide

  197. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    estatisticas-ebook
    outro projeto

    View full-size slide

  198. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    estatisticas-ebook
    Service Provider
    outro projeto

    View full-size slide

  199. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    estatisticas-ebook

    View full-size slide

  200. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    estatisticas-ebook

    View full-size slide

  201. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    estatisticas-ebook

    View full-size slide

  202. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    estatisticas-ebook

    View full-size slide

  203. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    cotuba

    View full-size slide

  204. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    cotuba

    View full-size slide

  205. OPEN CLOSED PRINCIPLE ++
    PLUGINS
    cotuba

    View full-size slide

  206. LISKOV SUBSTITUTION

    View full-size slide

  207. LISKOV SUBSTITUTION

    View full-size slide

  208. LISKOV SUBSTITUTION

    View full-size slide

  209. LISKOV SUBSTITUTION
    , Barbara Liskov, 1987
    Data Abstraction and Hierarchy

    View full-size slide

  210. LISKOV SUBSTITUTION
    , Barbara Liskov, 1987
    Data Abstraction and Hierarchy

    View full-size slide

  211. LISKOV SUBSTITUTION
    , Barbara Liskov, 1987
    Data Abstraction and Hierarchy

    View full-size slide

  212. LISKOV SUBSTITUTION
    , Barbara Liskov, 1987
    Data Abstraction and Hierarchy

    View full-size slide

  213. LISKOV SUBSTITUTION
    , Barbara Liskov, 1987
    Data Abstraction and Hierarchy

    View full-size slide

  214. LISKOV SUBSTITUTION
    , Barbara Liskov, 1987
    Data Abstraction and Hierarchy

    View full-size slide

  215. LISKOV SUBSTITUTION
    , Barbara Liskov, 1987
    Data Abstraction and Hierarchy

    View full-size slide

  216. LISKOV SUBSTITUTION
    , Barbara Liskov, 1987
    Data Abstraction and Hierarchy

    View full-size slide

  217. LISKOV SUBSTITUTION
    , Barbara Liskov, 1987
    Data Abstraction and Hierarchy

    View full-size slide

  218. LISKOV SUBSTITUTION

    View full-size slide

  219. LISKOV SUBSTITUTION

    View full-size slide

  220. LISKOV SUBSTITUTION

    View full-size slide

  221. LISKOV SUBSTITUTION
    Mau sinal: desligando comportamentos da mãe

    View full-size slide

  222. LISKOV SUBSTITUTION
    Herança?

    View full-size slide

  223. LISKOV SUBSTITUTION
    Herança?
    Design Patterns, GoF, 1995:
    Favoreça composição à herança.

    View full-size slide

  224. LISKOV SUBSTITUTION
    Herança?
    Design Patterns, GoF, 1995:
    Favoreça composição à herança.
    Effective Java, Joshua Bloch, 2001:
    Item 14: Prefira composição à herança.

    View full-size slide

  225. LISKOV SUBSTITUTION
    Herança?
    Design Patterns, GoF, 1995:
    Favoreça composição à herança.
    Effective Java, Joshua Bloch, 2001:
    Item 14: Prefira composição à herança.

    View full-size slide

  226. LISKOV SUBSTITUTION
    Herança?
    Design Patterns, GoF, 1995:
    Favoreça composição à herança.
    Effective Java, Joshua Bloch, 2001:
    Item 14: Prefira composição à herança.
    TÉCNICAS (milenares)!

    View full-size slide

  227. LISKOV SUBSTITUTION

    View full-size slide

  228. LISKOV SUBSTITUTION

    View full-size slide

  229. LISKOV SUBSTITUTION
    https://docs.oracle.com/javase/10/docs/api/java/util/Properties.html

    View full-size slide

  230. LISKOV SUBSTITUTION
    https://docs.oracle.com/javase/10/docs/api/java/util/Properties.html

    View full-size slide

  231. LISKOV SUBSTITUTION
    https://docs.oracle.com/javase/10/docs/api/java/util/Properties.html

    View full-size slide

  232. LISKOV SUBSTITUTION
    https://docs.oracle.com/javase/10/docs/api/java/util/Properties.html

    View full-size slide

  233. LISKOV SUBSTITUTION
    https://docs.oracle.com/javase/10/docs/api/java/util/Properties.html

    View full-size slide

  234. LISKOV SUBSTITUTION
    NÃO SÓ HERANÇA de classes

    View full-size slide

  235. LISKOV SUBSTITUTION
    NÃO SÓ HERANÇA de classes

    View full-size slide

  236. LISKOV SUBSTITUTION
    NÃO SÓ HERANÇA de classes

    View full-size slide

  237. LISKOV SUBSTITUTION
    NÃO SÓ HERANÇA de classes

    View full-size slide

  238. LISKOV SUBSTITUTION
    NÃO SÓ HERANÇA de classes

    View full-size slide

  239. LISKOV SUBSTITUTION
    NÃO SÓ HERANÇA de classes

    View full-size slide

  240. INTERFACE SEGREGATION

    View full-size slide

  241. INTERFACE SEGREGATION
    Service Providers tem que implementar
    os dois métodos, mesmo sem usar

    View full-size slide

  242. INTERFACE SEGREGATION

    View full-size slide

  243. INTERFACE SEGREGATION

    View full-size slide

  244. INTERFACE SEGREGATION
    Uma definição útil é
    coesão para interfaces

    View full-size slide

  245. INTERFACE SEGREGATION

    View full-size slide

  246. INTERFACE SEGREGATION

    View full-size slide

  247. INTERFACE SEGREGATION

    View full-size slide

  248. INTERFACE SEGREGATION

    View full-size slide

  249. INTERFACE SEGREGATION

    View full-size slide

  250. https://www.flickr.com/photos/matthiasstiefel/33246568104

    View full-size slide

  251. https://www.flickr.com/photos/matthiasstiefel/33246568104

    View full-size slide

  252. Críticas ao SOLID

    View full-size slide

  253. Críticas ao SOLID
    https://solid-is-not-solid.com/
    Kevlin/solid-deconstruction
    why-solid-principles-are-not-a-solid-solution-for-software-design
    accu.org/journals/overload/22/122/oldwood_1957
    tedinski.com/2019/04/02/solid-critique.html
    tastapod/why-every-element-of-solid-is-wrong
    https://jeremydmiller.com/2022/08/10/putting-solid-into-perspective/

    View full-size slide

  254. SINGLE RESPONSIBILITY

    View full-size slide

  255. SINGLE RESPONSIBILITY
    Agrupar código ao redor da mudança

    View full-size slide

  256. SINGLE RESPONSIBILITY
    CONTRAPONTOS
    Agrupar código ao redor da mudança

    View full-size slide

  257. SINGLE RESPONSIBILITY
    CONTRAPONTOS
    Nome confuso: "única" pode
    levar a granularidade muito fina,
    várias classes com só um
    método
    Agrupar código ao redor da mudança

    View full-size slide

  258. SINGLE RESPONSIBILITY
    CONTRAPONTOS
    Nome confuso: "única" pode
    levar a granularidade muito fina,
    várias classes com só um
    método
    Conceitos vagos:
    responsabilidade, coesão,
    agrupar ao redor de mudança
    Agrupar código ao redor da mudança

    View full-size slide

  259. DEPENDENCY INVERSION

    View full-size slide

  260. DEPENDENCY INVERSION
    Separar negócio de detalhes de
    implementação por meio de abstrações

    View full-size slide

  261. DEPENDENCY INVERSION
    CONTRAPONTOS
    Separar negócio de detalhes de
    implementação por meio de abstrações

    View full-size slide

  262. DEPENDENCY INVERSION
    CONTRAPONTOS
    Proliferação de Interfaces: muitas
    com apenas uma implementação e o
    sufixo "Impl"
    Separar negócio de detalhes de
    implementação por meio de abstrações

    View full-size slide

  263. OPEN CLOSED
    Flexibilidade por meio de
    pontos de extensão

    View full-size slide

  264. OPEN CLOSED
    CONTRAPONTOS
    Flexibilidade por meio de
    pontos de extensão

    View full-size slide

  265. OPEN CLOSED
    CONTRAPONTOS
    Flexibilidade desnecessária: tentando
    antecipar o futuro
    Flexibilidade por meio de
    pontos de extensão

    View full-size slide

  266. OPEN CLOSED
    CONTRAPONTOS
    Flexibilidade desnecessária: tentando
    antecipar o futuro
    Extensibilidade apenas nas fronteiras
    do sistema - Ted Kaminsky
    Flexibilidade por meio de
    pontos de extensão

    View full-size slide

  267. LISKOV SUBSTITUTION

    View full-size slide

  268. LISKOV SUBSTITUTION
    Subtipos não devem mudar
    comportamento do supertipo mas
    adicionar novos comportamentos

    View full-size slide

  269. LISKOV SUBSTITUTION
    CONTRAPONTOS?
    Subtipos não devem mudar
    comportamento do supertipo mas
    adicionar novos comportamentos

    View full-size slide

  270. LISKOV SUBSTITUTION
    CONTRAPONTOS?
    Subtipos não devem mudar
    comportamento do supertipo mas
    adicionar novos comportamentos

    View full-size slide

  271. INTERFACE SEGREGATION

    View full-size slide

  272. INTERFACE SEGREGATION
    Minimizar superfície de contato

    View full-size slide

  273. INTERFACE SEGREGATION
    CONTRAPONTOS
    Minimizar superfície de contato

    View full-size slide

  274. INTERFACE SEGREGATION
    CONTRAPONTOS
    A raiz do problema é uma falha de coesão
    Minimizar superfície de contato

    View full-size slide

  275. INTERFACE SEGREGATION
    CONTRAPONTOS
    A raiz do problema é uma falha de coesão
    Útil apenas quando você não pode alterar
    o código e tem que se conformar
    Minimizar superfície de contato

    View full-size slide

  276. PORTS & ADAPTERS

    View full-size slide

  277. PORTS & ADAPTERS
    CONTRAPONTOS

    View full-size slide

  278. Trocar a persistência
    de PostgreSQL para DynamoDB?
    PORTS & ADAPTERS
    CONTRAPONTOS

    View full-size slide

  279. CONTRAPONTOS
    PORTS & ADAPTERS

    View full-size slide

  280. Desbravando SOLID
    MANDE DM no Twitter
    para um cupom de
    desconto!
    Práticas avançadas
    para códigos de
    qualidade em Java
    moderno
    https://www.casadocodigo.com.br/
    products/livro-desbravando-solid

    View full-size slide

  281. É ISSO!
    @alex_aquiles
    linkedin.com/in/alexandreaquiles

    View full-size slide