DEV Community

Stefany Repetcki
Stefany Repetcki

Posted on

Arquitetura Front-end com Atomic Design

Este artigo visa a aplicação prática da metodologia Atomic Design, apenas para fins de consulta. Caso você desconheça o método, recomendo uma leitura prévia sobre o tema antes de continuar.

EXEMPLOS PRÁTICOS

Átomos: é a menor unidade que compõe nosso aplicativo.

AtomButton.vue

<template>
  <a
    :href="link.url"    
  >{{ link.name }}</a>
</template>

<script>
export default {
  name: "AtomButton",
  props: ["link"]
};
</script>
Enter fullscreen mode Exit fullscreen mode

AtomImage.vue

<template>
  <img :src="img" :alt="alt" />
</template>

<script>
export default {
  name: "AtomImage",
  props: ["img", "alt"]
};
</script>
Enter fullscreen mode Exit fullscreen mode

AtomText.vue

<template>
  <p>{{ text }}</p>
</template>

<script>
export default {
  name: "AtomText",
  props: ["text"]
};
</script>
Enter fullscreen mode Exit fullscreen mode

AtomTitle.vue

<template>
  <h1>{{ title }}</h1>
</template>

<script>
export default {
  name: "AtomTitle",
  props: ["title"]
};
</script>
Enter fullscreen mode Exit fullscreen mode

Moléculas: são grupos de átomos ligados entre si.

MoleculeBanner.vue

<template>
   <div>
     <header>
       <AtomTitle :title="Atomic Design com Vue.js" />
       <AtomText text="Um exemplo de molecula" />
       <AtomButton :link="{ name: 'Button', url: '#' }"/>
     </header>
   </div>
</template>

<script>
import AtomTitle from "@/components/atoms/AtomTitle";
import AtomText from "@/components/atoms/AtomText";
import AtomButton from "@/components/atoms/AtomButton";

export default {
   name: "MoleculeBanner",
   components: {
     AtomTitle,
     AtomText,
     AtomButton
   }
};
</script>
Enter fullscreen mode Exit fullscreen mode

Organismos: são grupos de moléculas unidas para formar uma seção relativamente complexa e distinta de uma interface, como o cabeçalho e o rodapé.

OrganismHeader.vue

 <template>
     <header>
       <div>
         <AtomLogo/>
         <MoleculeLinks :links="links"/>
       </div>
       <div>
         <AtomButton :link="{ name: 'Button', url: '#' }"/>
       </div>
     </header>
 </template>

 <script>
 import AtomLogo from "@/components/atoms/AtomLogo";
 import AtomButton from "@/components/atoms/AtomButton";
 import MoleculeLinks from "@/components/molecules/MoleculeLinks";

 export default {
     name: “OrganismHeader",
     props: ["links"],
     components: {
       AtomLogo,
       AtomButton,
       MoleculeLinks
     }
 };
 </script>
Enter fullscreen mode Exit fullscreen mode

OrganismFooter.vue

<template>
   <footer>
     <div>
       <MoleculeLinks :links="columnOneLinks"/>
     </div>
     <div>
       <MoleculeLinks :links="columnTwoLinks"/>
     </div>
   </footer>
</template>

<script>
import MoleculeLinks from "@/components/molecules/MoleculeLinks";

export default {
   name: “OrganismFooter",
   props: ["columnOneLinks", "columnTwoLinks"],
   components: {
     MoleculeLinks
   }
};
</script>
Enter fullscreen mode Exit fullscreen mode

Templates: consistem principalmente em grupos de organismos e/ou moléculas para formar a estrutura comum de uma página, o que costumávamos chamar de layout.

LandingPage.vue

<template>
   <section>
     <OrganismHeader :links="links"/>
     <div>
       <MoleculeBanner/>
       <div class="container">
         <OrganismGrid :cards="cards"/>
       </div>
     </div>
     <OrganismFooter 
          :columnOneLinks="columnOneLinks" 
          :columnTwoLin ks="columnTwoLinks" />
   </section>
</template>

<script>
import OrganismHeader from "@/components/organisms/OrganismHeader";
import OrganismFooter from "@/components/organisms/OrganismFooter";
import MoleculeBanner from "@/components/molecules/MoleculeBanner";
import OrganismGrid from "@/components/organisms/OrganismGrid";

export default {
   name: "TemplateLanding",
   components: {
     MoleculeBanner,
     OrganismHeader,
     OrganismFooter,
     OrganismGrid
   },
   data: () => {
     return {
       links: […],
       cards: […],
       columnOneLinks: […],
       columnTwoLinks: […]
     };
   }
};
</script>
Enter fullscreen mode Exit fullscreen mode

Como será sua estrutura visualizada na IDE.

Deixo aqui meu linkedin e github .

Top comments (3)

Collapse
 
cecon profile image
Gabriel Cecon Carlsen

Ótimo conteúdo, parabéns. Teria algumas referências sobre o assunto?

Collapse
 
stefanyrepetcki profile image
Stefany Repetcki

Recomendo o vídeo: O que é Atomic Design? de Chief of Design https://www.youtube.com/watch?v=e8ySLRGdCAQ&t=309s
e o Artigo que explica o que é a teoria do Atomic Design vidadeproduto.com.br/atomic-design/

Collapse
 
cecon profile image
Gabriel Cecon Carlsen

Obrigadoo!