6 maneiras de fazer a mesma coisa, o que é considerado boas práticas?

As vezes tem tantas maneiras diferentes de fazer o mesmo código que nós ficamos na dúvida quanto a qual maneira usar. O que seria considerado "boa prática" pela comunidade e o que sua equipe entenderia melhor. Suponhamos que você esteja trabalhando dentro de um método de um Domain Service chamado UmDomainServiceChique(objetoDoDominio) que será chamado por uma API. Você tem uma regra de negócio chique para ser verificada que por enquanto chamarei de VerificaMinhaRegraChiqueComplexa(). Você chama UmDomainServiceChique(objetoDoDominio) e caso VerificaMinhaRegraChiqueComplexa() retorne true você vai querer que UmDomainServiceChique faça o que tem que fazer e a api retornar Ok 200, caso contrário você quer que a API responda um erro qualquer, tipo BadRequest, e retornar uma mensagem dizendo que VerificaMinhaRegraChiqueComplexa deu ruim. Eu vejo 6 maneiras de fazer isso, gostaria de saber a opinião de outrs devs sobre qual seria a maneira menos gambiarr

O que você melhoraria no Delphi? - parte 2

Na parte 1 desse post, há muito tempo, fiz uma pequena descrição do que eu acho que poderia ser melhorado no Delphi.

Resumindo:
1) Alguns componentes e bibliotecas mais comuns "nativos" em vez de "incorporados".
2) Literatura orientada mais a POO e a boas práticas da Engenharia de Software do que a RAD. A literatura disponível nos helps, exemplos, snippets e consequentemente nos blogs e fóruns é toda voltada a RAD, arrastar e  soltar componentes. E como todos sabemos RAD é bom para protótipos e projetos pequenos, ou com requisitos fixos, com baixa frequencia de manutenção.
3) O aspecto que eu acho mais importante é (a falta de) um framework de persistência nativo da Embarcadero, para se fazer o mapeamento objeto relacional de maneira padronizada e ao mesmo tempo rápida.


Continuando, uma coisa que eu acho muito importante são as ações de marketing. No Brasil parece que o Delphi está queimado justamente com quem mais deveria acreditar nele: os professores.
Digo isso por experiência própria, pois meu projeto de conclusão de curso da pós graduação passou por esse problema.
Minha monografia era para ser "frameworks de mapeamento objeto relacional em Delphi". Meu orientador, professor de engenharia de software e outras matérias. Delpheiro de carteirinha e especialista em Delphi me perguntou "Por Que Delphi?". Ele questionou que meu trabalho, focado em Delphi, seria para um público muito restrito e que o Delphi está fadado a cair no desuso (nas palavras dele).
Não concordo com o ponto de vista dele sobre o Delphi, mas concordei que eu teria que expandir meus horizontes se quisesse fazer um trabalho academicamente mais amplo. Por isso meu tema foi trocado para "Processo de criação de frameworks de mapeamento objeto relacional em ambientes open-source".

O ponto em questão é que os professores, em vez de recomendar Delphi, estão "des-recomendando" (se é que esse termo existe). E agora como convencê-los do contrário?

Outro ponto é quanto ao preço do Delphi, mais caro que a concorrência. Quando saiu a edição "starter" do Delphi realmente o preço saiu bastante tentador. Mais barato que uma licença do windows 7 ultimate. Mas meu interesse na versão starter despencou quando eu soube que esta verão não possui dbexpress. Qual a utilidade do Delphi, para se fazer sistemas de informação, sem o dbExpress? Se conectar com MySql através de ADO+ODBC? BDE? Não, obrigado. Terei que comprar a suíte de componentes Unidac (que eu recomendo, muito boa).

Conversando com uns amigos no evento de lançamento da Embarcadero no Brasil chegamos a seguinte conclusão: por que não vender o Delphi "pelado", apenas IDE e compilador, por um preço simbólico e vender os componentes e add-ons sob demanda? Pense nisso:
Hoje em dia estão na moda as AppStores, onde você compra uma aplicação a um preço justo, e esta aplicação é sua, sendo sincronizada em seus dispositivos com o mesmo sistema operacional. Se você formata / reseta seu sistema, suas aplicações já pagas/compradas da appStore são baixadas e instaladas novamente. Tudo é re-sincronizado automaticamente. O mundo da Apple funciona assim, com o iPhone, iPad, iPod  e com o iMac. O mundo do Google Android também funciona assim, e até a Intel entrou na brincadeira.
Qual é o maior problema quando um desenvolvedor Delphi tem que formatar sua máquina? Ele perde um dia inteiro, ou dias, reinstalando, além do Delphi, todos os componentes, open-source ou não, bibliotecas e adds que precisa para trabalhar produtivamente. Muitos tentam exportar chaves de registro, e copiar diretórios de bpl's e dcp's a fim de criar uma instalação do Delphi personalizada para poder instalar depois, ou fazem ghost da máquina. A situação se torna pior se a empresa tem vários programadores Delphi, com várias máquinas diferentes e várias licenças pra instalar. Pior ainda se lida com versões diferentes do Delphi.
Solução: por que não criar um instalador mínimo do Delphi e um appStore de componentes e bibliotecas? Assim, bastaria instalar o Delphi e logar-se com a sua conta na Embarcadero para re-instalar e sincronizar todos os componentes. E isso serviria quem sabe para você publicar um componente seu e ganhar com ele, porque não? Até mesmo para se fazer "Component Contests".
Isso poderia ajudar a garantir o controle de qualidade, testes etc de um componente, além da procedência, e garantir, principalmente para os não-open-source, uma sobrevida e um tempo de suporte maior, além de tornar a instalação do Delphi muito mais fácil e a busca, aquisição e instalação de componentes muito mais fácil.
Quando eu digo componentes me refiro à bibliotecas "normais" também, daquelas que você precisa instanciar uma classe, ou usar uma função, mas que não tem um componente em uma paleta pra colocar na form.
A maioria dos componentes precisam que arquivos sejam colocados em certos diretórios, e que certos caminhos sejam adicionados ao library path e browsing path do windows. Além disso os instaladores dos componentes são todos diferentes, quando há instalador, pois a maioria você deve compilar a partir dos dpk's.
Agora imagine um ambiente com um gerenciador de componente que encontra o componente que você precisa, faz as devidas inclusões dos paths, compila e instala se for open-source ou simplesmente instala se não  for, e te livra de todos os passos chatos, demorados ou complicados.

Essas são algumas coisinhas que eu acho que poderiam ser melhoradas. E vocês, o que acham?

Comentários

  1. Esse é um recurso já existe no Visual Studio, chamado NuGet... realmente é preciso que a Embarcadero aplique esses diferenciais...

    ResponderExcluir
  2. É desse tipo de coisa que estou falando.Programador quer (e gosta de) programar, não de ficar instalando e configurando. Mesmo que você configure um ambiente novo para iniciar o desenvolvimento de um novo projeto, o tempo gasto com o preparo do ambiente é tido como desperdício, até pelo programador, que fica com um sentimento de que não fez nada naquele dia.

    Além disso não adianta a Embarcadero correr atrás do prejuizo, agora deve criar diferenciais.

    Outra coisa que eu penso, por que a Embarcadero colocou um plugin para SVN? A maioria dos projetos open-source de maior destaque e maior impacto, como o kernel do linux, por exemplo, saiu do SVN e migrou para o GIT, que permite uma criação de clones, forks e branches mais fácil, com um acompanhamento melhor, além de ajudar a fazer o merge disso. O git é uma ferramenta colaborativa que funciona muito bem, como uma rede social de programação.
    Com relação à adoção de qualquer coisa na área de software livre, metodologias ou versionamento, sou bem pragmático: siga o kernel do linux.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Busca de CEP com o Lazarus - Parte 1 - UrlEncode

Botão Add This para adicionar seu post em qualquer rede

Uso de memória no SQL Server