{"id":2953,"date":"2017-03-16T06:58:49","date_gmt":"2017-03-16T13:58:49","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2953"},"modified":"2023-06-19T03:19:59","modified_gmt":"2023-06-19T10:19:59","slug":"fakeit-series-shared-data-dependencies","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/fakeit-series-shared-data-dependencies\/","title":{"rendered":"FakeIt S\u00e9rie 2 de 5: Dados compartilhados e depend\u00eancias"},"content":{"rendered":"<p>Aaron Benton \u00e9 um arquiteto experiente, especializado em solu\u00e7\u00f5es criativas para desenvolver aplicativos m\u00f3veis inovadores. Ele tem mais de 10 anos de experi\u00eancia em desenvolvimento de pilha completa, incluindo ColdFusion, SQL, NoSQL, JavaScript, HTML e CSS. Atualmente, Aaron \u00e9 Arquiteto de Aplicativos da Shop.com em Greensboro, Carolina do Norte, e \u00e9 um <a href=\"https:\/\/developer.couchbase.com\/experts-and-champions\">Campe\u00e3o da comunidade do Couchbase<\/a>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2974\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/03\/aaronb-benton-headshot_1000x1000-300x300.jpg\" alt=\"Aaron Benton\" width=\"300\" height=\"300\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/aaronb-benton-headshot_1000x1000-300x300.jpg 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/aaronb-benton-headshot_1000x1000-150x150.jpg 150w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/aaronb-benton-headshot_1000x1000-768x768.jpg 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/aaronb-benton-headshot_1000x1000-65x65.jpg 65w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/aaronb-benton-headshot_1000x1000-50x50.jpg 50w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/aaronb-benton-headshot_1000x1000-20x20.jpg 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/aaronb-benton-headshot_1000x1000.jpg 1000w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<h2><strong>FakeIt S\u00e9rie 2 de 5: Dados compartilhados e depend\u00eancias<\/strong><\/h2>\n<p>Em <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/fakeit-series-generating-fake-data\/\">FakeIt S\u00e9rie 1 de 5: Gera\u00e7\u00e3o de dados falsos<\/a>\u00a0aprendemos que a FakeIt pode gerar uma grande quantidade de dados aleat\u00f3rios com base em um \u00fanico arquivo YAML e enviar os resultados para v\u00e1rios formatos e destinos, incluindo o Couchbase Server. Hoje vamos explorar o que torna a FakeIt realmente \u00fanica e poderosa no mundo da gera\u00e7\u00e3o de dados.<\/p>\n<p>H\u00e1 muitos geradores de dados aleat\u00f3rios dispon\u00edveis, um simples <u><a href=\"https:\/\/www.google.com\/webhp?sourceid=chrome-instant&amp;ion=1&amp;espv=2&amp;ie=UTF-8#q=random+data+generator&amp;*\" target=\"_blank\" rel=\"noopener noreferrer\">Pesquisa do Google<\/a><\/u>\u00a0lhe dar\u00e3o mais do que o suficiente para escolher. No entanto, quase todos eles t\u00eam a mesma falha frustrante, que \u00e9 o fato de s\u00f3 poderem lidar com um \u00fanico modelo. Raramente, como desenvolvedores, temos o luxo de lidar com um \u00fanico modelo; na maioria das vezes, estamos desenvolvendo v\u00e1rios modelos para nossos projetos. \u00c9 nesse ponto que o FakeIt se destaca: ele permite v\u00e1rios modelos e que esses modelos tenham depend\u00eancias.<\/p>\n<p>Vamos dar uma olhada nos poss\u00edveis modelos que teremos em nosso aplicativo de com\u00e9rcio eletr\u00f4nico:<\/p>\n<ul>\n<li>Usu\u00e1rios<\/li>\n<li>Produtos<\/li>\n<li>Carrinho<\/li>\n<li>Pedidos<\/li>\n<li>Coment\u00e1rios<\/li>\n<\/ul>\n<p>Usu\u00e1rios, o primeiro modelo que definimos, n\u00e3o tem nenhuma depend\u00eancia, e o mesmo pode ser dito do modelo Produtos, que definiremos a seguir. No entanto, seria l\u00f3gico dizer que o nosso modelo Orders dependeria dos modelos Users e Products. Se realmente quisermos dados de teste, os documentos criados pelo nosso modelo Orders dever\u00e3o ser os dados aleat\u00f3rios reais gerados pelos modelos Users e Products.<\/p>\n<h3><strong>Modelo de produtos<\/strong><\/h3>\n<p>Antes de analisarmos como as depend\u00eancias de modelo funcionam na FakeIt, vamos definir como ser\u00e1 o nosso modelo de produtos.<\/p>\n<pre class=\"lang:default decode:true\">name:\u00a0Products\r\ntype:\u00a0object\r\nkey:\u00a0_id\r\nproperties:\r\n\u00a0 _id:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The document id\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 post_build:\u00a0`product_${this.product_id}`\r\n\u00a0 doc_type:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The document type\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 value:\u00a0product\r\n\u00a0 product_id:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0Unique identifier representing a specific product\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.random.uuid()\r\n\u00a0 price:\r\n\u00a0 \u00a0 type:\u00a0double\r\n\u00a0 \u00a0 description:\u00a0The product price\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0chance.floating({ min: 0, max: 150, fixed: 2\u00a0})\r\n\u00a0 sale_price:\r\n\u00a0 \u00a0 type:\u00a0double\r\n\u00a0 \u00a0 description:\u00a0The product price\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 post_build:\u00a0|\r\n\u00a0 \u00a0 \u00a0 \u00a0let sale_price = 0;\r\n\u00a0 \u00a0 \u00a0 \u00a0if (chance.bool({ likelihood: 30 })) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0sale_price = chance.floating({ min: 0, max: this.price * chance.floating({ min: 0, max: 0.99, fixed: 2 }), fixed: 2 });\r\n\u00a0 \u00a0 \u00a0 \u00a0}\r\n\u00a0 \u00a0 \u00a0 \u00a0return sale_price;\r\n\u00a0 display_name:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0Display name of product.\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.commerce.productName()\r\n\u00a0 short_description:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0Description of product.\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.lorem.paragraphs(1)\r\n\u00a0 long_description:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0Description of product.\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.lorem.paragraphs(5)\r\n\u00a0 keywords:\r\n\u00a0 \u00a0 type:\u00a0array\r\n\u00a0 \u00a0 description:\u00a0An array of keywords\r\n\u00a0 \u00a0 items:\r\n\u00a0 \u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 \u00a0 min:\u00a00\r\n\u00a0 \u00a0 \u00a0 \u00a0 max:\u00a010\r\n\u00a0 \u00a0 \u00a0 \u00a0 build:\u00a0faker.random.word()\r\n\u00a0 availability:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The availability status of the product\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0|\r\n\u00a0 \u00a0 \u00a0 \u00a0let availability = 'In-Stock';\r\n\u00a0 \u00a0 \u00a0 \u00a0if (chance.bool({ likelihood: 40 })) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0availability = faker.random.arrayElement([ 'Preorder', 'Out of Stock', 'Discontinued' ]);\r\n\u00a0 \u00a0 \u00a0 \u00a0}\r\n\u00a0 \u00a0 \u00a0 \u00a0return availability;\r\n\u00a0 availability_date:\r\n\u00a0 \u00a0 type:\u00a0integer\r\n\u00a0 \u00a0 description:\u00a0An epoch time of when the product is available\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.date.recent()\r\n\u00a0 \u00a0 \u00a0 post_build:\u00a0new Date(this.availability_date).getTime()\r\n\u00a0 product_slug:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The URL friendly version of the product name\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 post_build:\u00a0faker.helpers.slugify(this.display_name).toLowerCase()\r\n\u00a0 category:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0Category for the Product\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.commerce.department()\r\n\u00a0 category_slug:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The URL friendly version of the category name\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 post_build:\u00a0faker.helpers.slugify(this.category).toLowerCase()\r\n\u00a0 image:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0Image URL representing the product.\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.image.image()\r\n\u00a0 alternate_images:\r\n\u00a0 \u00a0 type:\u00a0array\r\n\u00a0 \u00a0 description:\u00a0An array of alternate images for the product\r\n\u00a0 \u00a0 items:\r\n\u00a0 \u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 \u00a0 min:\u00a00\r\n\u00a0 \u00a0 \u00a0 \u00a0 max:\u00a04\r\n\u00a0 \u00a0 \u00a0 \u00a0 build:\u00a0faker.image.image()<\/pre>\n<p>Esse modelo \u00e9 um pouco mais complexo do que o modelo anterior de Usu\u00e1rios. Vamos examinar algumas dessas propriedades em mais detalhes:<\/p>\n<ul>\n<li><strong>_id<\/strong>: Esse valor est\u00e1 sendo definido depois que cada propriedade do documento foi criada e est\u00e1 dispon\u00edvel para a fun\u00e7\u00e3o de p\u00f3s-compila\u00e7\u00e3o. Esse contexto \u00e9 o do documento atual que est\u00e1 sendo gerado<\/li>\n<li><strong>pre\u00e7o de venda<\/strong>: Para isso, \u00e9 necess\u00e1rio definir uma chance de pre\u00e7o de venda e, se houver um pre\u00e7o de venda, garantir que o valor seja menor do que o da propriedade de pre\u00e7o<\/li>\n<li><strong>palavras-chave<\/strong>: \u00c9 uma matriz. Definido de forma semelhante ao Swagger, definimos nossos itens de matriz e como queremos que eles sejam constru\u00eddos usando as fun\u00e7\u00f5es build \/ post_build. Al\u00e9m disso, podemos definir os valores m\u00ednimo e m\u00e1ximo, e o FakeIt gerar\u00e1 um n\u00famero aleat\u00f3rio de elementos de matriz entre esses valores. H\u00e1 tamb\u00e9m uma propriedade fixa que pode ser usada para gerar um n\u00famero definido de elementos de matriz.<\/li>\n<\/ul>\n<p>Agora que constru\u00edmos nosso modelo de produtos, vamos gerar alguns dados aleat\u00f3rios e envi\u00e1-los ao console para ver como eles se parecem usando o comando:<\/p>\n<pre class=\"lang:default decode:true\">fakeit console models\/products.yaml<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5702 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/03\/blog2-example1-1-compressor.gif\" alt=\"Blog 2 example1-1\" width=\"800\" height=\"448\" \/><\/p>\n<h3><strong>Modelo de pedidos<\/strong><\/h3>\n<p>Para nosso projeto, j\u00e1 definimos os seguintes modelos:<\/p>\n<ul>\n<li>users.yaml<\/li>\n<li>produtos.yaml<\/li>\n<\/ul>\n<p>Vamos come\u00e7ar definindo o modelo Orders sem nenhuma propriedade e especificando suas depend\u00eancias:<\/p>\n<pre class=\"lang:default decode:true\">name:\u00a0Orders\r\ntype:\u00a0object\r\nkey:\u00a0_id\r\ndata:\r\n\u00a0 dependencies:\r\n\u00a0 \u00a0 -\u00a0products.yaml\r\n\u00a0 \u00a0 -\u00a0users.yaml\r\nproperties:<\/pre>\n<p>Definimos duas depend\u00eancias para o nosso modelo Orders e as referenciamos pelo nome do arquivo. Como todos os nossos modelos s\u00e3o armazenados no mesmo diret\u00f3rio, n\u00e3o h\u00e1 motivo para especificar o caminho completo. No tempo de execu\u00e7\u00e3o, a FakeIt analisar\u00e1 primeiro todos os modelos antes de tentar gerar documentos e determinar\u00e1 uma ordem de execu\u00e7\u00e3o com base em cada uma das depend\u00eancias dos modelos (se houver).<\/p>\n<p>Cada uma das fun\u00e7\u00f5es de compila\u00e7\u00e3o em um modelo FakeIt \u00e9 um corpo de fun\u00e7\u00e3o, com os seguintes argumentos passados a ele.<\/p>\n<pre class=\"lang:default decode:true\">function\u00a0(documents, globals, inputs, faker, chance, document_index, require) {\r\n\u00a0return\u00a0faker.internet.userName();\r\n}\r\n\r\n<\/pre>\n<p>Depois que a ordem de execu\u00e7\u00e3o \u00e9 estabelecida, cada uma das depend\u00eancias \u00e9 salva na mem\u00f3ria e disponibilizada para o modelo dependente por meio do argumento documents. Esse argumento \u00e9 um objeto que cont\u00e9m uma chave para cada modelo, cujo valor \u00e9 uma matriz de cada documento que foi gerado. Para o nosso exemplo da propriedade documents, a apar\u00eancia ser\u00e1 semelhante a esta:<\/p>\n<pre class=\"lang:default decode:true\">{\r\n\u00a0\"Users\": [\r\n\u00a0 \u00a0...\r\n\u00a0],\r\n\u00a0\"Products\": [\r\n\u00a0 \u00a0...\r\n\u00a0]\r\n}\r\n\r\n<\/pre>\n<p>Podemos tirar proveito disso para recuperar documentos aleat\u00f3rios de produtos e usu\u00e1rios, atribuindo suas propriedades \u00e0s propriedades do nosso modelo Orders. Por exemplo, podemos recuperar um user_id aleat\u00f3rio dos documentos gerados pelo modelo Users e atribu\u00ed-lo ao user_id do modelo Orders por meio de uma fun\u00e7\u00e3o de compila\u00e7\u00e3o<\/p>\n<pre class=\"lang:default decode:true\">user_id:\r\n\u00a0 \u00a0 type:\u00a0integer\r\n\u00a0 \u00a0 description:\u00a0The user_id that placed the order\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.random.arrayElement(documents.Users).user_id;<\/pre>\n<p>Vamos definir como ser\u00e1 o restante do nosso modelo de Orders:<\/p>\n<pre class=\"lang:default decode:true\">name:\u00a0Orders\r\ntype:\u00a0object\r\nkey:\u00a0_id\r\ndata:\r\n\u00a0 dependencies:\r\n\u00a0 \u00a0 -\u00a0products.yaml\r\n\u00a0 \u00a0 -\u00a0users.yaml\r\nproperties:\r\n\u00a0 _id:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The document id\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 post_build:\u00a0`order_${this.order_id}`\r\n\u00a0 doc_type:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The document type\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 value:\u00a0\"order\"\r\n\u00a0 order_id:\r\n\u00a0 \u00a0 type:\u00a0integer\r\n\u00a0 \u00a0 description:\u00a0The order_id\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0document_index + 1\r\n\u00a0 user_id:\r\n\u00a0 \u00a0 type:\u00a0integer\r\n\u00a0 \u00a0 description:\u00a0The user_id that placed the order\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.random.arrayElement(documents.Users).user_id;\r\n\u00a0 order_date:\r\n\u00a0 \u00a0 type:\u00a0integer\r\n\u00a0 \u00a0 description:\u00a0An epoch time of when the order was placed\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0new Date(faker.date.past()).getTime()\r\n\u00a0 order_status:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The status of the order\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.random.arrayElement([ 'Pending', 'Processing', 'Cancelled', 'Shipped'\u00a0])\r\n\u00a0 billing_name:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The name of the person the order is to be billed to\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0`${faker.name.firstName()} ${faker.name.lastName()}`\r\n\u00a0 billing_phone:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The billing phone\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.phone.phoneNumber().replace(\/x[0-9]+$\/, '')\r\n\u00a0 billing_email:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The billing email\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.internet.email()\r\n\u00a0 billing_address_1:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The billing address 1\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0`${faker.address.streetAddress()} ${faker.address.streetSuffix()}`\r\n\u00a0 billing_address_2:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The billing address 2\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0chance.bool({ likelihood: 50\u00a0}) ? faker.address.secondaryAddress() : null\r\n\u00a0 billing_locality:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The billing city\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.address.city()\r\n\u00a0 billing_region:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The billing region, city, province\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.address.stateAbbr()\r\n\u00a0 billing_postal_code:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The billing zip code \/ postal code\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.address.zipCode()\r\n\u00a0 billing_country:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The billing region, city, province\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 value:\u00a0US\r\n\u00a0 shipping_name:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The name of the person the order is to be billed to\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0`${faker.name.firstName()} ${faker.name.lastName()}`\r\n\u00a0 shipping_address_1:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The shipping address 1\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0`${faker.address.streetAddress()} ${faker.address.streetSuffix()}`\r\n\u00a0 shipping_address_2:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The shipping address 2\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0chance.bool({ likelihood: 50\u00a0}) ? faker.address.secondaryAddress() : null\r\n\u00a0 shipping_locality:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The shipping city\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.address.city()\r\n\u00a0 shipping_region:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The shipping region, city, province\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.address.stateAbbr()\r\n\u00a0 shipping_postal_code:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The shipping zip code \/ postal code\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.address.zipCode()\r\n\u00a0 shipping_country:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The shipping region, city, province\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 value:\u00a0US\r\n\u00a0 shipping_method:\r\n\u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 description:\u00a0The shipping method\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0faker.random.arrayElement([ 'USPS', 'UPS Standard', 'UPS Ground', 'UPS 2nd Day Air', 'UPS Next Day Air', 'FedEx Ground', 'FedEx 2Day Air', 'FedEx Standard Overnight'\u00a0]);\r\n\u00a0 shipping_total:\r\n\u00a0 \u00a0 type:\u00a0double\r\n\u00a0 \u00a0 description:\u00a0The shipping total\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0chance.dollar({ min: 10, max: 50\u00a0}).slice(1)\r\n\u00a0 tax:\r\n\u00a0 \u00a0 type:\u00a0double\r\n\u00a0 \u00a0 description:\u00a0The tax total\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 build:\u00a0chance.dollar({ min: 2, max: 10\u00a0}).slice(1)\r\n\u00a0 line_items:\r\n\u00a0 \u00a0 type:\u00a0array\r\n\u00a0 \u00a0 description:\u00a0The products that were ordered\r\n\u00a0 \u00a0 items:\r\n\u00a0 \u00a0 \u00a0 type:\u00a0string\r\n\u00a0 \u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 \u00a0 min:\u00a01\r\n\u00a0 \u00a0 \u00a0 \u00a0 max:\u00a05\r\n\u00a0 \u00a0 \u00a0 \u00a0 build:\u00a0|\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0const random = faker.random.arrayElement(documents.Products);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0const product = {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 product_id:\u00a0random.product_id,\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 display_name:\u00a0random.display_name,\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 short_description:\u00a0random.short_description,\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 image:\u00a0random.image,\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 price:\u00a0random.sale_price || random.price,\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 qty:\u00a0faker.random.number({ min: 1, max: 5\u00a0}),\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0};\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0product.sub_total = product.qty * product.price;\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0return product;\r\n\u00a0 grand_total:\r\n\u00a0 \u00a0 type:\u00a0double\r\n\u00a0 \u00a0 description:\u00a0The grand total of the order\r\n\u00a0 \u00a0 data:\r\n\u00a0 \u00a0 \u00a0 post_build:\u00a0|\r\n\u00a0 \u00a0 \u00a0 \u00a0let total = this.tax + this.shipping_total;\r\n\u00a0 \u00a0 \u00a0 \u00a0for (let i = 0; i &lt; this.line_items.length; i++) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0total += this.line_items[i].sub_total;\r\n\u00a0 \u00a0 \u00a0 \u00a0}\r\n\u00a0 \u00a0 \u00a0 \u00a0return chance.dollar({ min: total, max: total }).slice(1);\r\n\r\n<\/pre>\n<p>E envie-o para o console usando o comando:<\/p>\n<pre class=\"lang:default decode:true\">fakeit console models\/orders.yaml<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5703 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/03\/blog2-example2-1-compressor.gif\" alt=\"blog example2-1\" width=\"800\" height=\"448\" \/><\/p>\n<p>Como voc\u00ea pode ver na sa\u00edda do console, os documentos foram gerados para os modelos Usu\u00e1rios e Produtos, e esses documentos foram disponibilizados para o modelo Pedidos. No entanto, eles foram exclu\u00eddos da sa\u00edda porque tudo o que foi solicitado para sa\u00edda foi o modelo Orders.<\/p>\n<p>Agora que definimos tr\u00eas modelos com depend\u00eancias (Usu\u00e1rios, Produtos e Pedidos), precisamos ser capazes de gerar v\u00e1rios documentos para cada um deles e envi\u00e1-los ao Couchbase Server. At\u00e9 este ponto, especificamos o n\u00famero de documentos a serem gerados por meio do argumento de linha de comando -count. Podemos especificar o n\u00famero de documentos ou um intervalo de documentos usando a propriedade data: na raiz do modelo.<\/p>\n<pre class=\"lang:default decode:true\">users.yaml\r\n\r\nname:\u00a0Users\r\ntype:\u00a0object\r\nkey:\u00a0_id\r\ndata:\r\n\u00a0 min:\u00a01000\r\n\u00a0 max:\u00a02000<\/pre>\n<pre class=\"lang:default decode:true\">products.yaml\r\n\r\nname:\u00a0Products\r\ntype:\u00a0object\r\nkey:\u00a0_id\r\ndata:\r\n\u00a0 min:\u00a04000\r\n\u00a0 max:\u00a05000<\/pre>\n<pre class=\"lang:default decode:true\">orders.yaml\r\n\r\nname:\u00a0Orders\r\ntype:\u00a0object\r\nkey:\u00a0_id\r\ndata:\r\n\u00a0 dependencies:\r\n\u00a0 \u00a0 -\u00a0products.yaml\r\n\u00a0 \u00a0 -\u00a0users.yaml\r\n\u00a0 min:\u00a05000\r\n\u00a0 max:\u00a06000<\/pre>\n<p>Agora podemos gerar conjuntos aleat\u00f3rios de modelos de documentos relacionados e enviar esses documentos diretamente para o Couchbase Server usando o comando:<\/p>\n<pre class=\"lang:default decode:true\">fakeit couchbase --server 127.0.0.1 --bucket ecommerce --verbose models\/\r\n<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5700 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/03\/blog2-example3-1-compressor.gif\" alt=\"Blog 2 Example 3-1\" width=\"800\" height=\"440\" \/><\/p>\n<h3><strong>Conclus\u00e3o<\/strong><\/h3>\n<p>Vimos, por meio de tr\u00eas modelos simples do FakeIt YAML, como podemos criar depend\u00eancias de modelos, permitindo que dados gerados aleatoriamente sejam relacionados entre modelos e transmitidos para o Couchbase Server. Tamb\u00e9m vimos como podemos especificar o n\u00famero de documentos a serem gerados por modelo usando a propriedade data: na raiz de um modelo.<\/p>\n<p>Esses modelos podem ser armazenados no reposit\u00f3rio de projetos, ocupando muito pouco espa\u00e7o e permitindo que os desenvolvedores gerem as mesmas estruturas de dados com dados completamente diferentes. Outra vantagem de poder gerar documentos por meio de relacionamentos de v\u00e1rios modelos \u00e9 explorar diferentes modelos de documentos e ver o desempenho deles com v\u00e1rias consultas N1QL.<\/p>\n<h4><strong>Pr\u00f3ximo<\/strong><\/h4>\n<ul>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/fakeit-series-3-5-lean-models-through-definitions\/\">S\u00e9rie FakeIt 3 de 5: Modelos Lean por meio de defini\u00e7\u00f5es<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/fakeit-series-working-existing-data\/\">FakeIt S\u00e9rie 4 de 5: Trabalhando com dados existentes<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/fakeit-series-5-5-rapid-mobile-development-sync-gateway\/\">FakeIt Series 5 de 5: Desenvolvimento m\u00f3vel r\u00e1pido com o Sync-Gateway<\/a><\/li>\n<\/ul>\n<h4><strong>Anterior<\/strong><\/h4>\n<ul>\n<li>FakeIt S\u00e9rie 1 de 5: <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/fakeit-series-generating-fake-data\/\">Gera\u00e7\u00e3o de dados falsos<\/a><\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-2966 aligncenter\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/03\/brand.devCommChampionLogo.champion.FINAL_-300x300.png\" alt=\"Couchbase Champion\" width=\"300\" height=\"300\" \/>\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/community\/community-writers-program\/\"><em>Esta postagem faz parte do Programa de Reda\u00e7\u00e3o da Comunidade Couchbase<\/em><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>H\u00e1 muitos geradores de dados aleat\u00f3rios dispon\u00edveis, uma simples pesquisa no Google lhe dar\u00e1 mais do que o suficiente para escolher. Entretanto, quase todos eles t\u00eam a mesma falha frustrante, que \u00e9 o fato de s\u00f3 poderem lidar com um \u00fanico modelo. Raramente, como desenvolvedores, temos o luxo de lidar com um \u00fanico modelo; na maioria das vezes, estamos desenvolvendo v\u00e1rios modelos para nossos projetos. \u00c9 nesse ponto que o FakeIt se destaca: ele permite v\u00e1rios modelos e que esses modelos tenham depend\u00eancias.<\/p>","protected":false},"author":53,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,1819],"tags":[1883,1884],"ppma_author":[9026],"class_list":["post-2953","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-data-modeling","tag-data-modelling","tag-document-patterns"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>FakeIt Series 2 of 5: Shared Data and Dependencies - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/fakeit-series-shared-data-dependencies\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"FakeIt Series 2 of 5: Shared Data and Dependencies\" \/>\n<meta property=\"og:description\" content=\"There are tons of random data generators available, a simple Google Search will give you more than enough to choose from. However, almost all of these have the same frustrating flaw, which is they can only ever deal with a single model. Rarely as developers do we have the luxury of dealing with a single model, more often than not we are developing against multiple models for our projects. This is where FakeIt stands out, it allows for multiple models and those models to have dependencies.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/fakeit-series-shared-data-dependencies\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-03-16T13:58:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-19T10:19:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/03\/aaronb-benton-headshot_1000x1000-300x300.jpg\" \/>\n<meta name=\"author\" content=\"Laura Czajkowski, Developer Community Manager, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Laura Czajkowski, Developer Community Manager, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/\"},\"author\":{\"name\":\"Laura Czajkowski, Developer Community Manager, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220\"},\"headline\":\"FakeIt Series 2 of 5: Shared Data and Dependencies\",\"datePublished\":\"2017-03-16T13:58:49+00:00\",\"dateModified\":\"2023-06-19T10:19:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/\"},\"wordCount\":1058,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"data modelling\",\"document patterns\"],\"articleSection\":[\"Couchbase Server\",\"Data Modeling\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/\",\"name\":\"FakeIt Series 2 of 5: Shared Data and Dependencies - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-03-16T13:58:49+00:00\",\"dateModified\":\"2023-06-19T10:19:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"FakeIt Series 2 of 5: Shared Data and Dependencies\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220\",\"name\":\"Laura Czajkowski, Developer Community Manager, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/9deb07d5daaa00220534c31768bc4409\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g\",\"caption\":\"Laura Czajkowski, Developer Community Manager, Couchbase\"},\"description\":\"Laura Czajkowski is the Snr. Developer Community Manager at Couchbase overseeing the community. She\u2019s responsible for our monthly developer newsletter.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/laura-czajkowski\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"S\u00e9rie FakeIt 2 de 5: Dados compartilhados e depend\u00eancias - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/fakeit-series-shared-data-dependencies\/","og_locale":"pt_BR","og_type":"article","og_title":"FakeIt Series 2 of 5: Shared Data and Dependencies","og_description":"There are tons of random data generators available, a simple Google Search will give you more than enough to choose from. However, almost all of these have the same frustrating flaw, which is they can only ever deal with a single model. Rarely as developers do we have the luxury of dealing with a single model, more often than not we are developing against multiple models for our projects. This is where FakeIt stands out, it allows for multiple models and those models to have dependencies.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/fakeit-series-shared-data-dependencies\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-03-16T13:58:49+00:00","article_modified_time":"2023-06-19T10:19:59+00:00","og_image":[{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/03\/aaronb-benton-headshot_1000x1000-300x300.jpg","type":"","width":"","height":""}],"author":"Laura Czajkowski, Developer Community Manager, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Laura Czajkowski, Developer Community Manager, Couchbase","Est. reading time":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/"},"author":{"name":"Laura Czajkowski, Developer Community Manager, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220"},"headline":"FakeIt Series 2 of 5: Shared Data and Dependencies","datePublished":"2017-03-16T13:58:49+00:00","dateModified":"2023-06-19T10:19:59+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/"},"wordCount":1058,"commentCount":2,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["data modelling","document patterns"],"articleSection":["Couchbase Server","Data Modeling"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/","url":"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/","name":"S\u00e9rie FakeIt 2 de 5: Dados compartilhados e depend\u00eancias - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-03-16T13:58:49+00:00","dateModified":"2023-06-19T10:19:59+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/fakeit-series-shared-data-dependencies\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"FakeIt Series 2 of 5: Shared Data and Dependencies"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220","name":"Laura Czajkowski, gerente da comunidade de desenvolvedores, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/9deb07d5daaa00220534c31768bc4409","url":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g","caption":"Laura Czajkowski, Developer Community Manager, Couchbase"},"description":"Laura Czajkowski \u00e9 a Snr. Developer Community Manager da Couchbase, supervisionando a comunidade. Ela \u00e9 respons\u00e1vel pelo nosso boletim informativo mensal para desenvolvedores.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/laura-czajkowski\/"}]}},"authors":[{"term_id":9026,"user_id":53,"is_guest":0,"slug":"laura-czajkowski","display_name":"Laura Czajkowski, Developer Community Manager, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g","author_category":"","last_name":"Czajkowski","first_name":"Laura","job_title":"","user_url":"","description":"Laura Czajkowski \u00e9 a Snr. Developer Community Manager da Couchbase, supervisionando a comunidade. Ela \u00e9 respons\u00e1vel pelo nosso boletim informativo mensal para desenvolvedores."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2953","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/53"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=2953"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2953\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=2953"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=2953"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=2953"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=2953"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}