asp.net mvc 3: etapas necessárias para validação discreta do lado do cliente do conteúdo dinâmico / ajax
<p>qual é o conjunto completo de <strong> etapas necessárias </strong> para que a validação discreta do lado do cliente funcione para campos de formulário inseridos dinamicamente?</p><h2>relevante so postagens</h2><p> <a href="https://stackoverflow.com/questions/6124992/asp-net-mvc-3-unobtrusive-client-side-validation-with-dynamic-content">validação discreta do lado do cliente do asp.net mvc 3 com conteúdo dinâmico</a> - ele precisava dos atributos de validação discreta para aparecer no html gerado e o fazia chamando <code>beginform</code></p><p> <a href="https://stackoverflow.com/questions/5938684/asp-net-mvc-3-validation-on-ajaxform">validação do asp.net mvc 3 no ajaxform</a> - o solicitante estava usando <code>ajax.beginform</code> que usa microsoftajax em vez de jquery.validation.</p><p> <a href="https://stackoverflow.com/questions/4187742/partialview-and-unobtrusive-client-validation-not-working">partialview e validação discreta do cliente não estão funcionando</a> - ele teve o problema de atributos de validação discreta não aparecerem e substituírem <code>viewcontext.formcontext</code> como uma solução alternativa.</p><p> <a href="https://stackoverflow.com/questions/4997269/asp-net-mvc-3-generate-unobtrusive-validation-when-beginform-is-on-the-layout">asp.net mvc 3: gere validação discreta quando beginform estiver no layout</a> - solução alternativa para atributos de validação discretos que não aparecem no html</p><h2>links relevantes</h2><p>brad wilson's <a href="http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html">validação discreta de cliente no asp.net mvc</a> </p><p> <a href="http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-1">o guia completo de validação no asp.net mvc 3 - parte 1</a> </p><p> <a href="http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-2">o guia completo de validação no asp.net mvc 3 - parte 2</a> </p><p> <a href="http://weblogs.asp.net/imranbaloch/archive/2011/03/05/unobtrusive-client-side-validation-with-dynamic-contents-in-asp-net-mvc.aspx">validação discreta do lado do cliente com conteúdo dinâmico no asp.net mvc</a> </p>
<p>neste ponto, acredito que o seguinte é um conjunto completo de requisitos:</p><ol> <li>crie um formulário com <code>html.beginform</code></li> <li>ative <code>clientvalidationenabled</code></li> <li>ative <code>unobtrusivejavascriptenabled</code></li> <li>defina atributos de validação apropriados nas propriedades do modelo (<em> e não </em> campos)</li> <li>se os helpers html usados ​​para criar os elementos do formulário não estiverem no mesmo formulário que a chamada <code>html.beginform</code>, use uma solução alternativa relevante (consulte <a href="https://stackoverflow.com/questions/4187742/partialview-and-unobtrusive-client-validation-not-working">solução alternativa 1</a> e <a href="https://stackoverflow.com/questions/4997269/asp-net-mvc-3-generate-unobtrusive-validation-when-beginform-is-on-the-layout">solução alternativa 2</a> )</li> <li>inclua os arquivos <code>jquery</code>, <code>jquery.validate.js</code> e <code>jquery.validate.unobtrusive.js</code>, nessa ordem</li> <li>verifique se os atributos discretos de validação estão presentes no html</li> <li>se estiver usando validadores personalizados: <ul> <li>verifique se eles foram adicionados a <code>jquery.validator.unobtrusive.adapters</code></li> <li>verifique se eles foram adicionados ao plug-in de validação do jquery chamando <code>jquery.validator.addmethod</code>.</li> <li>verifique se o acima ocorreu antes de <code>$(document).ready()</code>, pois nesse momento é tarde demais</li> </ul> </li> <li>ligue para <code>jquery.validator.unobtrusive.parse</code> ou <code>jquery.validator.unobtrusive.parseelement</code> nos elementos adicionados dinamicamente após o carregamento inicial da página.</li> </ol>
<p>a substituição do controle de um usuário pelo computador sempre será uma interrupção e, muitas vezes, será percebida como uma invasão do fluxo de trabalho desse usuário. o site "não deveria" ter o controle de nossos computadores, portanto, exercer esse controle será pelo menos um pouco alarmante.</p><p>dito isso, você aborda um tópico realmente importante, sendo a importância de informar ao usuário que sua entrada é inválida antes de preencher um conjunto inteiro de campos e enviá-los.</p><p>a abordagem que eu achei menos intrusiva, mas que fornece a resposta mais rápida, é o fluxo abaixo.</p><p><img src="https://i.stack.imgur.com/vxahu.png" alt="alt text"></p><p>essencialmente, espere que eles preencham seu primeiro campo e, à medida que clicam/separam um novo campo (ou um campo que foi invalidado), verifique o campo que acabou de ser concluído. se o campo que acabou de ser preenchido for válido, imprima um ícone "bom" discreto ao lado dele (verde, marca de seleção, sorriso no rosto, você entendeu). se falhar nas regras de validação, imprima discretamente um ícone "ruim" (vermelho, "x" etc.) e uma linha curta sobre o que falhou.</p><p>mas lembre-se, não interrompa o fluxo de trabalho:</p><ul> <li>sem pop-ups</li> <li>sem sobreposições</li> </ul><p>quando terminarem o campo para o qual foram movidos, eles voltarão ao campo inválido ou seguirão em frente e voltarão mais tarde. de qualquer forma, eles verão que têm uma edição para fazer, mas podem fazê-lo em seu próprio tempo.</p><p>no final, eles terão um formulário completamente válido antes de enviá-lo, o que significa</p><ol> <li>eles só terão que enviar uma vez</li> <li>eles não perdem tempo ficando bravos ou frustrados quando a submissão "falha"</li> <li>eles vão gostar mais do seu site</li> <li>todo mundo vai ter bolo</li> </ol> <p>a idéia aqui é que a maioria de nós já <em> já </em> saiba <em> a maioria </em> do que está nesta lista. mas pode haver apenas um ou dois itens que você realmente não analisou antes, que não entende completamente, ou talvez nunca tenha ouvido falar.</p><p><strong> interface e experiência do usuário </strong></p><ul> <li>esteja ciente de que os navegadores implementam os padrões de maneira inconsistente e verifique se o site funciona razoavelmente bem em todos os principais navegadores. em um teste mínimo com relação a um <a href="https://en.wikipedia.org/wiki/gecko\_%28layout\_engine%29">gecko</a> engine recente ( <a href="http://firefox.com/">firefox</a> ), um mecanismo webkit ( <a href="http://www.apple.com/safari/">safari</a> e alguns navegadores móveis) , <a href="http://www.google.com/chrome">chrome</a> , seus navegadores <a href="https://en.wikipedia.org/wiki/internet\_explorer">ie suportados</a> (aproveite as <a href="http://www.microsoft.com/downloads/details.aspx?familyid=21eabb90-958f-4b64-b5f1-73d0a413c8ef&amp;displaylang=en">imagens vpc de compatibilidade de aplicativos</a> ) e <a href="http://www.opera.com/">opera</a> . considere também como <a href="http://www.browsershots.org">browsers processam seu site</a> / em diferentes sistemas operacionais.</li> <li>considere como as pessoas podem usar o site que não seja dos principais navegadores: telefones celulares, leitores de tela e mecanismos de pesquisa, por exemplo. - algumas informações de acessibilidade: <a href="http://www.w3.org/wai/"> wai </a> e <a href="http://www.section508.gov/">section508</a> , desenvolvimento móvel: <a href="http://mobiforge.com/">mobiforge</a> .</li> <li>preparo: como implantar atualizações sem afetar seus usuários. tenha um ou mais ambientes de teste ou teste disponíveis para implementar alterações na arquitetura, no código ou no conteúdo abrangente e garantir que eles possam ser implantados de maneira controlada sem quebrar nada. tenha uma maneira automatizada de implantar alterações aprovadas no site ativo. isso é implementado de maneira mais eficaz em conjunto com o uso de um sistema de controle de versão (git, subversion, etc.) e um mecanismo de compilação automatizado (ant, nant, etc.).</li> <li>não exiba erros hostis diretamente para o usuário.</li> <li>não coloque os endereços de email dos usuários em texto sem formatação, pois eles receberão spam até a morte.</li> <li>adicione o atributo \_<code>rel="nofollow"</code>\_ aos links gerados pelo usuário <a href="https://en.wikipedia.org/wiki/nofollow">para evitar spam</a> .</li> <li> <a href="http://www.codinghorror.com/blog/archives/001228.html">crie limites bem considerados no seu site</a> - isso também pertence a segurança.</li> <li>aprenda a fazer <a href="https://en.wikipedia.org/wiki/progressive\_enhancement">aprimoramento progressivo</a> .</li> <li> <a href="https://en.wikipedia.org/wiki/post/redirect/get">redirecione após um post</a> se esse post foi bem-sucedido, para impedir que uma atualização seja enviada novamente.</li> <li>não se esqueça de levar em consideração a acessibilidade. é sempre uma boa ideia e, em determinadas circunstâncias, é um <a href="http://www.section508.gov/">requisito legal</a> . <a href="http://www.w3.org/wai/intro/aria">wai-aria</a> e <a href="http://www.w3.org/tr/wcag20/">wcag 2</a> são bons recursos nessa área.</li> <li>leia <a href="http://www.sensible.com/dmmt.html">não me faça pensar</a> .</li> </ul><p><strong> segurança </strong></p><ul> <li>é muito difícil de digerir, mas o guia de desenvolvimento <a href="http://www.owasp.org/index.php/category:owasp\_guide\_project">owasp</a> cobre a segurança do site de cima para baixo.</li> <li>saiba mais sobre a injeção, especialmente <a href="https://en.wikipedia.org/wiki/sql\_injection">sql injection</a> e como evitá-la.</li> <li>nunca confie na entrada do usuário, nem em qualquer outra coisa que esteja presente na solicitação (que inclui cookies e valores ocultos do campo do formulário!).</li> <li>hash senhas usando <a href="https://security.stackexchange.com/q/21263/396">salt</a> / e use sais diferentes para suas linhas para evitar ataques do rainbow. use um algoritmo de hash lento, como bcrypt (tempo testado) ou scrypt (ainda mais forte, mas mais recente) ( <a href="http://www.tarsnap.com/scrypt.html">1</a> , <a href="http://it.slashdot.org/comments.pl?sid=1987632&amp;cid=35149842">2</a> ), para armazenar senhas. ( <a href="http://codahale.com/how-to-safely-store-a-password/">como armazenar com segurança uma senha</a> ). o <a href="https://security.stackexchange.com/q/7689/396">nist também aprova o pbkdf2 para senhas de hash</a> "e é <a href="https://security.stackexchange.com/a/2136/396">fips aprovado no .net</a> (mais informações <a href="https://security.stackexchange.com/questions/211/how-to-securely-hash-passwords">aqui</a> ) . <em> evite </em> usar md5 ou a família sha diretamente.</li> <li> <a href="https://stackoverflow.com/questions/1581610/how-can-i-store-my-users-passwords-safely/1581919#1581919">não tente criar seu próprio sistema de autenticação sofisticado</a> . é uma coisa tão fácil cometer erros de maneiras sutis e não testáveis ​​e você nem saberia até <em> depois de </em> ser invadido.</li> <li>conheça as <a href="https://www.pcisecuritystandards.org/">regras para o processamento de cartões de crédito</a> . ( <a href="https://stackoverflow.com/questions/51094/payment-processors-what-do-i-need-to-know-if-i-want-to-accept-credit-cards-on-m">veja também esta pergunta</a> )</li> <li>use <a href="http://www.mozilla.org/projects/security/pki/nss/ssl/draft302.txt">ssl/tls</a> / <a href="https://en.wikipedia.org/wiki/session\_hijacking#prevention"> https </a> para sites em que dados confidenciais são inseridos (como credenciais, informações de identificação pessoal, informações do cartão de crédito). <a href="https://letsencrypt.org">let's encrypt</a> é uma autoridade de certificação gratuita que pode ajudar.</li> <li> <a href="https://en.wikipedia.org/wiki/session\_hijacking#prevention">impedir o seqüestro de sessão</a> .</li> <li>evite <a href="https://en.wikipedia.org/wiki/cross-site\_scripting">scripts entre sites</a> (xss).</li> <li>evite <a href="https://en.wikipedia.org/wiki/cross-site\_request\_forgery">falsificações de solicitação entre sites</a> (csrf).</li> <li>evite <a href="https://en.wikipedia.org/wiki/clickjacking">clickjacking</a> .</li> <li>mantenha seu (s) sistema (s) atualizado (s) com as últimas correções.</li> <li>verifique se as informações de conexão do banco de dados estão protegidas.</li> <li>mantenha-se informado sobre as mais recentes técnicas de ataque e vulnerabilidades que afetam sua plataforma.</li> <li>leia <a href="https://code.google.com/archive/p/browsersec/">manual de segurança do navegador google</a> .</li> <li>leia <a href="https://rads.stackoverflow.com/amzn/click/com/0470170778">manual do hacker de aplicativos da web</a> .</li> <li>considere <a href="https://en.wikipedia.org/wiki/principle\_of\_least\_privilege">o princípio do menor privilégio</a> . tente executar o servidor de aplicativos <a href="https://security.stackexchange.com/questions/47576/do-simple-linux-servers-really-need-a-non-root-user-for-security-reasons">como não raiz</a> . ( <a href="http://tomcat.apache.org/tomcat-8.0-doc/security-howto.html#non-tomcat\_settings">exemplo do tomcat</a> )</li> <li>coloque \_<code>rel="noopener noreferrer"</code>\_ em todos os links fornecidos pelo usuário com \_<code>target="\_blank"</code>\_ para impedir que o javascript na página de destino redirecione sua página para outro lugar, como uma página de login falsa. <a href="https://dev.to/phishing">mais informações</a> </li> <li>considere usar uma <a href="https://csp.withgoogle.com/docs/index.html">política de segurança de conteúdo estrita</a> .</li> </ul><p><strong> desempenho </strong></p><ul> <li>implemente o cache, se necessário, entenda e use <a href="http://www.mnot.net/cache\_docs/">http caching</a> corretamente, bem como <a href="http://www.w3.org/tr/2011/wd-html5-20110525/offline.html">html5 manifest</a> .</li> <li>otimizar imagens - não use uma imagem de 20 kb para um fundo repetitivo.</li> <li>compactar conteúdo para velocidade, consulte <a href="https://www.smashingmagazine.com/2016/10/next-generation-server-compression-with-brotli/">brotli</a> , <a href="http://developer.yahoo.com/performance/rules.html#gzip">gzip/deflate</a> (<strike> <a href="https://stackoverflow.com/questions/1574168/gzip-vs-deflate-zlib-revisited">deflate é melhor</a> </strike>).</li> <li>combine/concatene várias folhas de estilo ou vários arquivos de script para reduzir o número de conexões do navegador e melhorar a capacidade do gzip para compactar duplicações entre arquivos.</li> <li>dê uma olhada no site <a href="http://developer.yahoo.com/performance/">yahoo exceptional performance</a> , muitas ótimas diretrizes, incluindo a melhoria do desempenho do front-end e sua <a href="http://developer.yahoo.com/yslow/">yslow</a> ferramenta (requer firefox, safari, chrome ou opera). além disso, <a href="https://developers.google.com/speed/docs/best-practices/rules\_intro">velocidade da página do google</a> (use com <a href="https://developers.google.com/speed/pagespeed/insights\_extensions">extensão do navegador</a> ) é outra ferramenta para criação de perfil de desempenho e otimiza suas imagens também.</li> <li><strike>use <a href="http://alistapart.com/articles/sprites">css image sprites</a> para imagens relacionadas pequenas, como barras de ferramentas (consulte o ponto "minimizar solicitações http")</strike></li> <li>use <a href="https://24ways.org/2014/an-overview-of-svg-sprite-creation-techniques/">sprites de imagem svg</a> para pequenas imagens relacionadas, como barras de ferramentas. a coloração svg é um pouco complicada. você pode ler sobre isso <a href="http://tympanus.net/codrops/2015/07/16/styling-svg-use-content-css/">aqui</a> .</li> <li>sites ocupados devem considerar <a href="http://developer.yahoo.com/performance/rules.html#split">dividir componentes entre domínios</a> . especificamente...</li> <li>o conteúdo estático (ou seja, imagens, css, javascript e, geralmente, o conteúdo que não precisa de acesso a cookies) deve ir em um domínio separado <em> <a href="http://blog.stackoverflow.com/2009/08/a-few-speed-improvements/">que não usa cookies</a> </em>, porque todos os cookies de um domínio e seus subdomínios são enviados com todas as solicitações para o domínio e seus subdomínios. uma boa opção aqui é usar uma rede de entrega de conteúdo (cdn), mas considere o caso em que essa cdn pode falhar incluindo cdns alternativas ou cópias locais que podem ser veiculadas.</li> <li>minimize o número total de solicitações http necessárias para um navegador renderizar a página.</li> <li>escolha um <a href="http://garann.github.io/template-chooser/">template engine</a> e renderize/pré-compile usando os executores de tarefas como gulp ou grunt</li> <li>verifique se há um arquivo \_<code>favicon.ico</code>\_ na raiz do site, ou seja, \_<code>/favicon.ico</code>\_. <a href="http://mathiasbynens.be/notes/rel-shortcut-icon">os navegadores solicitarão automaticamente</a> , mesmo que o ícone não seja mencionado no html. se você não tiver um \_<code>/favicon.ico</code>\_, isso resultará em muitos 404s, consumindo a largura de banda do servidor.</li> </ul><p><strong> seo (otimização de mecanismos de pesquisa) </strong></p><ul> <li>use urls "compatíveis com o mecanismo de pesquisa", ou seja, use \_<code>example.com/pages/45-article-title</code>\_ em vez de \_<code>example.com/index.php?page=45</code>\_</li> <li>ao usar \_<code>#</code>\_ para conteúdo dinâmico, altere \_<code>#</code>\_ para \_<code>#!</code>\_ e, em seguida, no servidor \_<code>$\_request["\_escaped\_fragment\_"]</code>\_, é o que o googlebot usa em vez de \_<code>#!</code>\_. em outras palavras, \_<code>./#!page=1</code>\_ se torna \_<code>./?\_escaped\_fragments\_=page=1</code>\_. além disso, para usuários que possam estar usando o ff.b4 ou o chromium, <code>history.pushstate({"foo":"bar"}, "about", "./?page=1");</code> é um ótimo comando. portanto, mesmo que a barra de endereço tenha mudado, a página não é recarregada. isso permite que você use \_<code>?</code>\_ em vez de \_<code>#!</code>\_ para manter o conteúdo dinâmico e também informar ao servidor quando você enviar por e-mail o link que estamos após esta página, e o ajax não precisa para fazer outro pedido extra.</li> <li>não use links que digam <a href="https://ux.stackexchange.com/questions/12100/why-shouldnt-we-use-the-word-here-in-a-textlink">"clique aqui"</a> . você está desperdiçando uma oportunidade de seo e isso torna as coisas mais difíceis para as pessoas com leitores de tela.</li> <li>tenha um <a href="http://www.sitemaps.org/">xml sitemap</a> , de preferência no local padrão \_<code>/sitemap.xml</code>\_.</li> <li>use <a href="http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html">\_<code>&lt;link rel="canonical" ... /&gt;</code>\_</a> quando você tiver vários urls que apontam para o mesmo conteúdo, esse problema também pode ser solucionado em <a href="http://www.google.com/webmasters/">ferramentas do google para webmasters</a> .</li> <li>use <a href="http://www.google.com/webmasters/">ferramentas para webmasters do google</a> e <a href="http://www.bing.com/toolbox/webmaster">ferramentas para webmasters do bing</a> .</li> <li>instale <a href="http://www.google.com/analytics/">google analytics</a> logo no início (ou uma ferramenta de análise de código aberto como <a href="http://piwik.org/">piwik</a> /).</li> <li>saiba como <a href="https://en.wikipedia.org/wiki/robots\_exclusion\_standard">robots.txt</a> e as aranhas dos mecanismos de pesquisa funcionam.</li> <li>redirecione solicitações (usando \_<code>301 moved permanently</code>\_) solicitando \_<code>www.example.com</code>\_ para \_<code>example.com</code>\_ (ou o contrário) para impedir a divisão da classificação do google entre os dois sites.</li> <li>saiba que pode haver aranhas mal comportadas por aí.</li> <li>se você tiver conteúdo não textual, procure as extensões de mapa do site do google para vídeos, etc. há algumas informações boas sobre isso em <a href="https://stackoverflow.com/questions/72394/what-should-a-developer-know-before-building-a-public-web-site#167608">tim farley's answer</a> .</li> </ul><p><strong> tecnologia </strong></p><ul> <li>entenda <a href="http://www.ietf.org/rfc/rfc2616.txt"> http </a> e coisas como get, post, sessões, cookies e o que significa ser "sem estado".</li> <li>escreva seu <a href="http://www.w3.org/tr/xhtml1/"> xhtml </a> / <a href="http://www.w3.org/tr/rec-html40/"> html </a> e <a href="http://www.w3.org/tr/css2/"> css </a> de acordo com as especificações <a href="http://www.w3.org/tr/">w3c</a> e certifique-se de que eles <a href="http://validator.w3.org/">validam</a> /. o objetivo aqui é evitar os modos peculiares do navegador e, como bônus, facilitar o trabalho com navegadores não tradicionais, como leitores de tela e dispositivos móveis.</li> <li>entenda como o javascript é processado no navegador.</li> <li>entenda como o javascript, as folhas de estilo e outros recursos usados ​​por sua página são carregados e considere seu impacto no <em> desempenho percebido </em>. agora, é amplamente considerado adequado <a href="https://developer.yahoo.com/blogs/ydn/high-performance-sites-rule-6-move-scripts-bottom-7200.html">mover scripts para o final das páginas</a> das suas páginas, com exceções que normalmente são coisas como aplicativos de análise ou shims html5.</li> <li>entenda como a sandbox javascript funciona, especialmente se você pretende usar iframes.</li> <li>esteja ciente de que o javascript pode e será desativado e que ajax é, portanto, uma extensão, não uma linha de base. mesmo que a maioria dos usuários o deixe ligado agora, lembre-se de que <a href="http://noscript.net/">noscript</a> está se tornando mais popular. embora os robôs de rastreamento modernos suportem a indexação de conteúdo gerado por javascript, considere usar a renderização no servidor para outros robôs ou usuários que desativaram o javascript.</li> <li>aprenda a diferença <a href="http://www.bigoakinc.com/blog/when-to-use-a-301-vs-302-redirect/">entre os redirecionamentos 301 e 302</a> (esse também é um problema de seo).</li> <li>aprenda o máximo possível sobre sua plataforma de implantação.</li> <li>considere usar uma <a href="https://stackoverflow.com/questions/11578819/css-reset-what-exactly-does-it-do">redefinir folha de estilos</a> ou <a href="http://necolas.github.com/normalize.css/">normalize.css</a> .</li> <li>considere estruturas javascript (como <a href="http://jquery.com/">jquery</a> , <a href="http://mootools.net/">mootools</a> , <a href="http://www.prototypejs.org/">prototype</a> , <a href="http://dojotoolkit.org">dojo</a> ou <a href="http://developer.yahoo.com/yui/3/">yui 3</a> ), que ocultará muitas diferenças do navegador ao usar javascript para manipulação de dom.</li> <li>reunindo o desempenho percebido e as estruturas js, considere usar um serviço como a <a href="http://developers.google.com/speed/libraries/devguide">api das bibliotecas do google</a> para carregar estruturas para que um navegador possa usar uma cópia da estrutura que ele já armazenou em cache, em vez de fazer o download de uma cópia duplicada. copiar do seu site.</li> <li>não reinvente a roda. antes de fazer qualquer coisa, procure um componente ou exemplo de como fazê-lo. há 99% de chance de alguém ter feito isso e lançado uma versão oss do código.</li> <li>por outro lado, não comece com 20 bibliotecas antes mesmo de decidir quais são suas necessidades. particularmente na web do lado do cliente, onde quase sempre é mais importante manter as coisas leves, rápidas e flexíveis.</li> </ul><p><strong> correção de erros </strong></p><ul> <li>entenda que você gastará 20% do seu tempo codificando e 80% dele mantendo, portanto, codifique de acordo.</li> <li>configure uma boa solução de relatório de erros.</li> <li>tenha um sistema para as pessoas entrarem em contato com você com sugestões e críticas.</li> <li>documente como o aplicativo funciona para futuras equipes de suporte e pessoas que realizam manutenção.</li> <li>faça backups frequentes! (e verifique se esses backups estão funcionando) tenha uma estratégia de restauração, não apenas uma estratégia de backup.</li> <li>use um sistema de controle de versão para armazenar seus arquivos, como <a href="http://subversion.apache.org/">subversion</a> , <a href="http://mercurial.selenic.com/">mercurial</a> ou <a href="http://git-scm.org">git</a> .</li> <li>não se esqueça de fazer seu teste de aceitação. estruturas como <a href="http://seleniumhq.org/">selenium</a> podem ajudar. especialmente se você automatizar completamente seus testes, talvez usando uma ferramenta de integração contínua, como <a href="http://jenkins-ci.org/">jenkins</a> .</li> <li>verifique se você possui log suficiente usando estruturas como <a href="http://logging.apache.org/log4j/">log4j</a> , <a href="http://logging.apache.org/log4net/">log4net</a> ou <a href="http://log4r.rubyforge.org/">log4r</a> . se algo der errado no seu site ao vivo, você precisará descobrir como.</li> <li>ao fazer o log, certifique-se de capturar as exceções tratadas e não tratadas. relate/analise a saída do log, pois mostrará onde estão os principais problemas em seu site.</li> </ul><p><strong> outros </strong></p><ul> <li>implemente monitoramento e análise do lado do servidor e do cliente (um deve ser proativo em vez de reativo).</li> <li>use serviços como uservoice e intercom (ou qualquer outra ferramenta similar) para manter contato constante com seus usuários.</li> <li>siga <a href="http://nvie.com/about/">vincent driessen</a> 's <a href="http://nvie.com/posts/a-successful-git-branching-model/">git branching model</a> </li> </ul><p>muitas coisas foram omitidas não necessariamente porque não são respostas úteis, mas porque são muito detalhadas, estão fora do escopo ou vão um pouco longe demais para alguém que deseja obter uma visão geral do que deve saber. sinta-se à vontade para editar isso também, provavelmente perdi algumas coisas ou cometi alguns erros.</p> <p>olá, matheus.</p>
<p>você realizou o passo n. 5 dessa 
<a href="https://cursos.alura.com.br/course/spring-mvc-1-criando-aplicacoes-web/task/40599" rel="nofollow">aula</a>?</p> rogerio, aprenda a gostar do google, uma simples pesquisa pelo termo validação jquery formulario já trouxe dezenas de links:[url:descricao=https://www.google.com.br/webhp?sourceid=chrome-instant&io... <p>olá fabio! pelo que entendi tem uma propriedade chamada <code>acceptsslscerts</code> que ao setar como true deveria ajudá-lo nesse cenário. inicialmente parece funcionar para todos os browser mas não é certeza então dependendo do browser que esteja utilizando talvez tenha que utilizar uma propriedade diferente para configurar. </p>
<p>nesse <a href="https://stackoverflow.com/questions/24507078/how-to-deal-with-certificates-using-selenium" rel="nofollow">link</a> tem mais detalhes como exemplo. faz sentido?</p> <p>todas as outras respostas e comentários aqui realmente me impressionaram, porque são muito contrárias à minha primeira reação e muito contrárias à atitude que testemunhei em meus colegas de trabalho. então, eu gostaria de descrever uma abordagem alternativa, mesmo que apenas por ser <a href="https://en.wikipedia.org/wiki/asch\_conformity\_experiments">a voz dissidente</a> .</p><p>o princípio norteador desta resposta é "encantar o cliente". encantar o cliente não significa apenas atender às suas expectativas; significa entender suas solicitações tão profundamente que você pode interpretar o que eles dizem da maneira que querem e entregar acima e além do que eles pedem. outras respostas parecem ser guiadas pelo princípio da conformidade maliciosa, que considero repugnante; além disso, é uma prática comercial questionável, pois é uma maneira ruim de atrair clientes fiéis.</p><p>para mim, quando ouço o cliente dizer: "quero 25% de comentários", é o começo de um diálogo. para mim, está claro que a implicação aqui é "quero muito texto descritivo, para que os recém-chegados a essa base de código possam começar a funcionar rapidamente", não "quero que você adicione aleatoriedade em uma certa categoria sintática", como outras respostas parece estar pegando. eu levaria esse pedido a sério e pretendia escrever muitos comentários úteis e descritivos, orientando um recém-chegado à estrutura do código, apontando decisões de engenharia surpreendentes e descrevendo o raciocínio que lhes era introduzido, além de fornecer um inglês de alto nível descrições de seções de código complicadas (mesmo que não tenham nenhuma surpresa). essa intenção e entendimento é o <em> ponto de partida</em> da discussão - isto é, antes mesmo de começarmos a conversar. para mim, a implicação da solicitação é tão clara que nem precisa desse esclarecimento; mas se para você não está claro, é claro que você deve entrar em contato com eles!</p><p>ok, então para onde vai a caixa de diálogo se esse é o ponto de partida? a próxima parte da caixa de diálogo é assim:</p><ol> <li>eu esperaria que este fosse um esforço adicional sério, possivelmente em uma segunda fase do projeto, que está acima e além da produção da ferramenta que eles querem trabalhar. pode levar vários minutos de discussão para discutir esse processo e por que é um trabalho adicional, mas vou omitir aqui porque, como programador profissional, espero que você <em> saiba</em> quão difícil é faça bons comentários.</li> <li>"um esforço adicional sério" significa que podemos precisar de um orçamento mais longo e de um orçamento monetário maior; <em> ou</em> podemos precisar reduzir o orçamento do recurso; <em> ou</em> podemos precisar comprometer a qualidade e a quantidade dos comentários. esta parte vai ser um pouco de negociação. mas, na minha opinião, você deve ser muito franco quanto aos custos de realizar esse trabalho extra e garantir que seja um recurso tão importante para o cliente que ele esteja disposto a assumir esses custos. e se eles são - ótimos! você ganha tempo e dinheiro extras, e eles recebem comentários de alta qualidade. todo mundo ganha. e, se o recurso de comentários não for tão importante para eles, eles estão dispostos a perder a capacidade de exibir widgets ou a deixar o prazo chegar ao final do granuary, 20x6, e todos ganham novamente: obtêm o produto que desejam deseja e você não precisa gastar o esforço extra necessário para criar comentários de alta qualidade.</li> </ol><p>aqui é onde eu acho que o diálogo deve <em> não</em> ir:</p><ol start="3"> <li>não ameace o cliente com comentários de baixa qualidade. deixe-os ajudá-lo a escolher o nível de esforço que desejam e que estão dispostos a pagar. não prometa a eles 25% dos comentários e informe-os de que pretende cumprir essa promessa, gerando aleatoriamente a aleatoriedade após a construção do projeto.</li> <li>não esconda seus planos. não prometa a eles 25% de comentários e, em seguida, gere a aleatoriedade automaticamente sem dizer a eles que você fará. <em> quando</em> eles percebem (e não se), vocês dois perdem muito tempo: estão descontentes com o produto que adquiriram e você fica boca a boca negativa.</li> <li>não tente convencê-los de que não querem comentários. eles claramente querem comentários. discuta as compensações de várias abordagens: sim! discuta maneiras alternativas de tornar o iniciante da base de código amigável: sim! diga a eles que eles não sabem o que querem: eh, não. você quer trabalhar com eles para conseguir o que eles querem; entenda o que é isso e descubra a melhor forma de entregar isso a eles em um orçamento que eles aprovam, priorizando os recursos de que mais se preocupam se os recursos que eles têm são insuficientes.</li> <li>não dê desculpas sobre a dificuldade de escrever comentários. escrever código é difícil; código de depuração é difícil; escrever comentários é difícil. se fosse fácil, eles não estariam contratando você. basta pular as reclamações e ir direto ao ponto em que elas se importam, a saber, como o esforço extra necessário as afeta.</li> </ol> <p>oi marcos aurélio, tudo bem?</p>
<p>basicamente, é um post impulsionado que é entregue aos usuários no feed, porém não aparecem na timeline oficial da página que está por trás desse anúncio.</p>
<p>eis algumas vantagens ao fazer dark post:</p>
<ul><li><p>precisão do público impactado: isso é muito importante. com o dark post você não só pode criar diferentes anúncios para os diversos públicos da sua página, como também pode personalizar esses posts para cada persona e veicular ambos ao mesmo tempo.
é importante só ficar atento quanto à segmentação. isso porque, se ela estiver errada, é muito provável que sua campanha não tenha os resultados desejados.</p>
</li><li><p>testes a/b: o dark post é uma ótima maneira de testar diferentes posts com o mesmo intuito, ou seja, fazer testes a/b. como eles não ficam na timeline, ninguém irá descobrir que você fez os testes e nem terá acesso aos seus resultados.
solte sua criatividade e comece a testar suas campanhas para ver qual dará mais resultados.</p>
</li><li><p>aperfeiçoamento de conteúdo: com o teste a/b do dark post você irá conseguir avaliar quais conteúdos e tipos de fotos estão performando melhor na sua página. com essas informações, você pode melhorar as postagens que, de fato, irão aparecer na sua linha do tempo.</p>
</li><li><p>conhecimento do seu público: conseguimos enxergar nos resultados da análise final qual público interage mais na página.</p>
</li></ul>
<p>fez sentido?</p> <p>há vários aplicativos da web que validam um documento xml em relação a um esquema específico.</p><ol> <li> <a href="http://tools.decisionsoft.com/schemavalidate/">http://tools.decisionsoft.com/schemavalidate/</a> </li> <li> <a href="http://www.xmlvalidation.com/">http://www.xmlvalidation.com/</a> </li> <li> <a href="http://www.xmlme.com/validator.aspx">http://www.xmlme.com/validator.aspx</a> </li> <li> <a href="http://www.xmlforasp.net/schemavalidator.aspx">http://www.xmlforasp.net/schemavalidator.aspx</a> </li> </ol><p>eu acho que é um caso de escolher e usar a ferramenta que possui a interface que você mais gosta, pois todos fazem o mesmo trabalho.</p> <p>olá leandro, tudo bom?</p>
<p>os pré-requisitos para os cursos são sugestões de conteúdo que podem ser importantes para que você acompanhe o curso mas não são obrigatórios.</p>
<p>caso você se sinta confortável para fazer o curso sem fazer seus pré-requisitos, vá em frente, mas lembre-se que pode sempre parar e iniciar o curso pré-requisito se tiver dificuldades.</p>
<p>no caso do curso de spring, temos como pré-requisito o <a target="\_blank" href="https://cursos.alura.com.br/course/servlet-3-e-fundamentos-web" rel="nofollow">curso de servlets</a>. porém este tem como pré-requisitos outros cursos como o <a target="\_blank" href="https://cursos.alura.com.br/course/http-fundamentos" rel="nofollow">curso de http</a> e o <a target="\_blank" href="https://cursos.alura.com.br/course/java-util-lambdas" rel="nofollow">curso de java, parte 6</a>.</p>
<p>como mencionei acima, se você já tem alguma familiaridade com esses assuntos, é bem tranquilo pular os pré-requisitos e seguir direto para o curso final. mas se tiver alguma dúvida em um assunto ou código do curso, dê uma olhada nos pré-requisitos e veja se algum deles ajuda a resolver o seu problema.</p>
<p>lembre-se também que você pode vir aqui no fórum tirar suas dúvidas sobre o conteúdo do curso &#61;)</p>
<p>espero ter ajudado! um abraço e bons estudos!</p> Olá [@Rafiusk](/c/user/viewprofilepage/user-id/636948),


 


Sou Amália da Shopify - obrigada por fornecer esses detalhes!


 


Pelo que vejo na tela que você compartilhou do seu live view, parece estar funcionando.  O [live view](https://help.shopify.com/pt-BR/manual/reports-and-analytics/shopify-reports/live-view) mostra os acessos e actividade em sua loja em tempo real.  Se você iniciou sua loja recentemente ou se ainda não fez marketing ou publicidade, é possível que ainda não esteja vendo muita atividade lá porque seu público pode ainda não saber que sua loja existe. Falando em seu público, eu dei uma olhada na sua oferta de produtos e notei que você está vendendo uma grande variedade de produtos. Quando se trata de atrair clientes a sua loja, é muito mais fácil quando se concentra em um nicho específico.  Recomendo conferir [este post aqui](https://pt.shopify.com/blog/nichos-de-mercado) que voce deve achar útil com maiores detalhes sobre como você pode restringir a sua oferta e seu publico.


 


Em relação à sua pergunta sobre o Facebook - gostaria de saber mais alguns detalhes para entender melhor o que está acontecendo. Por gentileza, poderia nos dizer por que você acredita que o Facebook está banindo os seus domínios? Você está tentando conectar sua Loja Shopify à sua conto do Facebook para que você possa vender produtos no Facebook também?


 


Aguardo sua resposta!


 


Até ja,



**Amália | Social Care @ Shopify**  
  - A minha resposta foi útil? Clique em **Curtir** para me dizer!  
  - Sua dúvida foi respondida? Clique em **Aceitar Solução**    
 - Para saber mais visite nossa [Central de Ajuda Shopify](https://help.shopify.com/pt-br/?&utm_source=community&utm_medium=web&utm_campaign=signature&utm_content=pt-br) ou nosso [Shopify Blog](https://help.shopify.com/pt-BR/?&utm_source=community&utm_medium=web&utm_campaign=signature&utm_content=pt-br)