Skip to content

Instantly share code, notes, and snippets.

View justiandre's full-sized avatar
:octocat:

André Justi justiandre

:octocat:
View GitHub Profile
2017-04-19 15:16:04
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.77-b03 mixed mode):
"RMI TCP Connection(3)-172.17.0.1" - Thread t@1014
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:170)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)

Componentização

A componentização no âmbito de arquitetura e engenharia de software, pode ser descrita como, uma unidade de software, que pode ser plugada ou agrupada à outras unidades de software, assim, podendo ser reutilizado de inúmeras formas, dessa maneira, várias etapas na construção do software em questão podem ser dispensadas, tornando o processo de desenvolvimento mais produtivo.

As principais vantagens da sua utilização de componentes são:

  • Reutilização - O componente em questão pode ser criado uma vez e reutilizado “N” vezes em vários softwares ou outros componentes
  • Fácil evolução - O componente dever ter, um ciclo de vida, build/pipeline e versionamento independente do software principal, assim pode ser evoluído em paralelo de maneira mais simples, visto que unidades de softwares menores são mais fáceis de manter
  • Qualidade - O componente em si, por ser uma unidade bem isolada e pequena e tende a possuir uma boa qualidade, tendo bom código e possuindo uma grande facilida

DX (Developer Experience) - REST

Desafio

Construir APIs utilizando as boas práticas de mercado, tendo boas documentações que sirvam como SAAS, fazendo a API ser autoexplicativa e bem documentada sem a necessidade de iteração com a equipe criadora para o entendimento e/ou consumo.

Target

O time constrói e faz melhorias nas suas API REST, visando as boas práticas de mercado, níveis de maturidade REST e recomendações da Softplan? Levando em consideração o que se vê por fora (contratos API) para facilitar o consumo e a reutilização das mesmas.

func (h *httpHandler) PostByPrinterType(w http.ResponseWriter, r *http.Request) {
     printerType := server.URLParam(r, "printertype")
     if err := h.validatePrinterType(printerType, r); err == nil {
          if printerRequest, err := h.validatePost(r); err == nil {
               if err = h.service.PrintByWorkstation(r.Context(), printerRequest, printerType); err == nil {
                    logger.Info(endpointLog).Log("PrintByWorkstation Succeeded",
                         "shipment_id", printerRequest.ShipmentID, "workstation_id", printerRequest.WorkstationID,
                         "warehouse_id", printerRequest.WarehouseID, "status", http.StatusOK)
 w.WriteHeader(http.StatusOK)

Nível de indentação e complexidade em funções GO

NOTA: Pense que sua função é como uma piscina, quanto mais longe e quanto mais tempo você fica longe da borda, mais chance você tem de se afogar!!!

Lembre-se, passamos muito mais tempo lendo os códigos do que os escrevendo então, muitas vezes, é justificável gastarmos mais tempo para escrever um código melhor, visto que o mesmo será lido várias vezes.


Problema

Normalmente o nível de indentação de um código está diretamente ligado a sua complexidade e complexidade ciclomática, quanto mais indentado, mais complexo e em GO isso não é diferente, GO ainda possui uma característica particular que pode tornar as funções um pouco mais longas e complexas, é o tratamento de erros. Nos nosso sistemas isso não é diferente, possuímos alguns códigos grandes e complexo e queremos debater algumas práticas evitar isso.

DSLs personalizadas

Nota: Esse conteúdo faz parte de um grupo de estudos sobre Kotlin, descrito aqui!

Conceito

Diferente das linguagens de programação que se propõem à resolverem conjuntos genéricos de problemas, a DSL Domain Specific Language foi criada para resolver um problema específico ou um conjunto de problemas que fazem parte de um mesmo domínio.

Um exemplo de DSL, é a linguagem utilizada nos scripts de Gradle, que serve para configurar o build e dependências de um projeto JVM. Que é feito em Groovy ou Kotlin, percebemos que por mais que tenhamos uma linguagem de programação para fazer isso, a sintaxe se mostra bem diferente e orientada à resolver um pro

@justiandre
justiandre / .golangci.yml
Created June 26, 2020 22:06
Lint`s padrão da equipe YMS/UCS
# This file contains all available configuration options
# with their default values.
# options for analysis running
run:
# include test files or not, default is true
tests: false
# output configuration options
output:
# colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number"
format: colored-line-number
@justiandre
justiandre / ucs-model.puml
Created June 29, 2020 01:02
Model C4 - UCS systems
@startuml
!include <C4/C4_Context.puml>
!include <C4/C4_Container.puml>
!include <office/Users/user.puml>
LAYOUT_WITH_LEGEND()
title UCS - High Level
Person(OperatorMeli, Operator Meli, "<$user>")
@justiandre
justiandre / uc_kotlin_go_java.md
Last active August 7, 2020 16:17
uc_kotlin_go_java

Exemplos (Kotlin, Go, Java)

Aqui descreveremos um problema para ser resolvids por algoritmo usando as features de cada linguagem, nesse caso será resolvido nas linguagens Kotlin, Java e Golang.

UC

Neste cenário, temos uma estrutura lógica (observada abaixo), onde recebemos uma relação de pessoas e precisamos retornar uma lista única, ordenada por Estados, em ordem alfabética. Além disso, também só deverão ser retornados os Estados com população igual ou superior à 100 mil habitantes e maiores de 18 anos.

uc_1

@justiandre
justiandre / mercadolibre-shipping-tech-casos-para-compartir-kotlin.md
Last active November 13, 2020 21:08
Casos para compartir: Kotlin - Mercado Libre / Shipping Tech - André Justi