none
Considerações gerais para um GRANDE projeto RRS feed

  • Discussão Geral

  • Olá amigos, bom dia.

    A mais de 10 anos sou desenvolvedor amador e fiz vários projetos, pra muita gente. Sempre programas para tratar de funcionalidades específicas, escritos dentro de 3 meses. Graças a Deus todos satisfeitos até hoje. Comecei pelo VB, VB.NET, passando pelo C# (windowsform) e finalmente utilizo hoje o WPF.

    Surgiu a necessidade de desenvolver um software que atenderá não apenas um cliente em particular, mas a muitos. Como esses de sites de download, versão shareware. Já defini a plataforma e o banco de dados (C# WPF + SQLite), para poder assim disponibilizar um programa com bom visual e com fácil instalação.

    Comecei a pensar em algumas necessidades, pois planejo criar um site pra promover o produto, entre elas:

    1 - Controle de versão

    2 - Atualizações automáticas

    3 - Segurança contra pirataria

    4 - A melhor forma de desenvolver essa arquitetura, ou seja, um plano de projeto.

     

    O Controle de Versão servirá para que o software verifique automaticamente uma nova versão na web e se atualize. Eu sei sobre o Clikonce mas aí começaram a surgir as primeiras dúvidas. As atualizações deveriam ser feitas até determinado ponto, ou seja, o usuário comprou o software, por exemplo, na versão 1.5.1 e ele terá direito a todas as atualizações até a versão 1.5.9, lançada a versão 1.6 o software não fará essa atualização, será uma versão master e se o usuário quiser, terá q adquirir por fora. Isso pra evitar atualizações para sempre. Por isso a importância do controle de versão e de programar esse tipo de atualização automnática.

    A segurança contra cópia também é fundamental, quais as técnicas utilizadas pra evitar pirataria? Como posso desenvolver um código criptografado, pra dificultar alguem "quebrar" meu programa ou utilizar engenharia reversa, afim de evitar a pirataria?

    E por final, como começar a desenvolver esse projeto, digo, envolve muitos recursos, devo começar pela abordagem tradicional e deixar as implementações de segurança, atualização automática e os demias pro final? Ou devo considerar isso desde o início.

    Nunca desenvolvi algo parecido, vai ser a primeira vez e me sinto ao mesmo tempo inseguro e ancioso pra começar.

    Vamos discutir essas idéias?

    Um grande abraço a todos.


    Se a resposta foi útil, por favor marque como útil. Leia a bíblia.
    sexta-feira, 20 de maio de 2011 11:12

Todas as Respostas

  • As três primeiras coisas podem ser feitas após o programa pronto: 1 e 2 por ClickOnce, 3, por programas obfuscadores e antipirataria.

    4 é fundamental antes de começar a codificar: arquitetura de software (modelos de dados, padrões de projeto, arquiteturas distribuídas ou não, testes, etc). Você terá que manter este projeto, então projete-o para dar pouca dor de cabeça depois.

    Bruno


    MVP Client Development - http://msmvps.com/blogs/bsonnino Twitter @bsonnino
    sexta-feira, 20 de maio de 2011 22:23
  • Grande Bruno, obrigado pela resposta.

    Realmente é um longo caminho a percorrer e como não é um grupo de desenvolvedores, na verdade é uma EUquipe, preciso pensar bem no q vou fazer, qual o momento certo e como vou fazer.

    A idéia é criar um programa q permita uma experiência boa para o usuário, ou seja, facilidade de instalação, facilidade de uso, facilidade de atualização e segurança de software.

    Até hoje me detetive a rabiscar as páginas dos programas q criei antes de efetivamente programar. Não posso chamar isso de um projeto de software, ou um plano para desenvolver. Era mais um rabisco do q poderia ser cada tela do programa, as principais funções, com anotações do q cada uma fazia.

     

    Mas eu já senti q pra este novo desafio vou ter q fazer algo mais profissional. Por exemplo, adotar um padrão de projeto ou mesmo criar um. Aprender um pouco sobre programação modular, pq seria bom se o programa fosse extensível. Saber como eu faria as atualizações, não utilizando o click once em sí, mas um pouco antes disso... como por exemplo implementaria todo o programa, como dividi-lo em módulos, pra q as atualizações fossem menores e mais específicas.

    É muito bom encontrar pessoas q gostem de discutir essas idéias, pq abre mesmo a mente da gente.

    O primeiro passo eu já estou fazendo, procurando discutir idéias, sugestões e formas. Antes de sentar na frente de um papel e ensaiar os primeiros rabiscos.

    :)


    Se a resposta foi útil, por favor marque como útil. Leia a bíblia.
    sábado, 21 de maio de 2011 00:40
  • Sugiro que você dê uma olhada em padrões de projeto, como o MVVM, dê uma olhada no MEF, para extensibilidade, dê uma olhada no WCF, Entity Framework, Linq.

    Bruno


    MVP Client Development - http://msmvps.com/blogs/bsonnino Twitter @bsonnino
    sábado, 21 de maio de 2011 00:48
  • Boa Bruno, o WCF é muito bom principalmente pra quem trabalha com Silverlight, andei lendo sobre isso. O EF é excelente como mapeador de base de dados relacional (já fiz 2 projetos com ele), mas senti q ele pesa um pouquinho nas requisições ao banco., talvez seja só impressão minha ou realmente deverei optar por um acesso mais veloz, o LINQ é excelente, muito, mas muito bom mesmo.

    Sobre o MVVM eu procurei estudar um tempo atraz mas achei a linguagem muito técnica nos artigos q consegui pela internet. Eu não tenho nível superior nessa área e isso dificulta meu entendimento, mas vou continuar me esforçando. O MEF eu nunca ouvi falar, realmente me interessou quando vc colocou a palavra "extensibilidade" alí ao lado. É um design pattern modular?

    Se vc tiver alguns links sobre esses assuntos, te agradeço.


    Se a resposta foi útil, por favor marque como útil. Leia a bíblia.
    sábado, 21 de maio de 2011 01:19
  • O MEF (Managed Extensibility Framework é um framework para criar aplicações extensíveis e é usado no VS 2010. Dê uma olhada em:

    http://mef.codeplex.com/

    Bruno


    MVP Client Development - http://msmvps.com/blogs/bsonnino Twitter @bsonnino
    sábado, 21 de maio de 2011 09:57
  • Bruno, andei vendo o seu blog, gostei d+ dos vídeos de WPF lá.

    Em especial o das treads. Algumas vezes havia trabalhado com backgrounworker, mas não sabia q dava pra atualizar a UI com ele, como vc mostra no vídeo.

    Muito bom.

    Outra parte q também gostei muito foi como aproveitar o poder dos processadores multicore nas aplicações wpf, distribuindo a carga de processamento. Aí me veio uma dúvida, no vídeo vc diz q para processos rápidos não compensa usar processamento distribuido, então queria perguntar quais os cenários no mundo de hoje q dá pra usar isso (acesso a banco de dados retornando muitos registros, por exemplo?) e se você conhece alguma ferramenta para medir a performance do aplicativo.

    Isso pq primeiramente pensei q o palicativo deveria ter uma caracterísita fundamental q é a leveza. Por isso eu estou até lendo aqueles artigos q dizem assim "é melhor loop for do q foreach..." e assim por diante. Pq quero escrever um código rápido, q traga respostas rápidas ao usuário.

    Virei frequentador assíduo do seu blog, vou continuar assistindo os vídeos.


    Se a resposta foi útil, por favor marque como útil. Leia a bíblia.
    sábado, 21 de maio de 2011 13:14
  • Sim, um processo muito pequeno não compensa, pois a sobrecarga para o processamento paralelo irá ser maior que o ganho, mas para processos demorados, com certeza compensa.

    Para bancos de dados, recomendo o PLinq (Parallel Linq), mas você pode usar processamento paralelo para cáclulos demorados, acesso a disco, entre outros.

    Para medir performance, há diversos aplicativos: o próprio Visual Studio tem o profiler, e há o NAnts Profiler, ou o AQTime, que são muito bons

     


    MVP Client Development - http://msmvps.com/blogs/bsonnino Twitter @bsonnino
    sábado, 21 de maio de 2011 14:14