Um pouco sobre bicicletas

Uma vez que nos acomodamos com um colega de classe em 2014 para abrir uma startup. O prazo, resultado e foco do produto não são importantes para este texto. O importante é que o cliente era um aplicativo Java móvel para Android e o servidor era um serviço escrito em C # que conversava com o armazenamento de dados. Além disso - uma história de advertência para anciãos de cabelos grisalhos (da programação) para diversão, para jovens sem barba - para edificação.



Para ter certeza de que eu, como desenvolvedor do lado do servidor, tenho tudo sob controle, a primeira versão do servidor foi escrita usando a classe System.Net.Sockets.Socket, como o artigo da Microsoft descreve . Como os soquetes funcionam (em princípio, como todas as outras tecnologias listadas posteriormente na Microsoft, exceto WCF) nos métodos Begin / End, um pequeno invólucro foi escrito que fornecia a capacidade de trabalhar com o modelo baseado em evento. Essa foi a primeira etapa, o cliente e o servidor funcionaram bem.



Como logo precisávamos de SSL, tivemos que passar para um nível mais alto do modelo OSI e reescrever o lado do servidor usando a classe System.Net.Sockets.TcpListener, à qual o SSL estava ligado. Foram os passos dois e dois e meio, o cliente e o servidor funcionaram bem, o cliente nem precisou ser reescrito - a interceptação do pacote mostrou que estava tudo bem, nada havia mudado.



Mais tarde, eu queria um HTTPS completo com todos os seus recursos, para o qual o servidor foi reescrito novamente - agora usando a classe System.Net.HttpListener. Estas são as etapas três e três e meia, e novamente tudo funciona bem, e novamente o cliente não precisa ser refeito. Para fins de justiça, deve-se observar que, além do cliente móvel personalizado, também havia um cliente C # de teste e vários testes - mas eles tiveram que ser reescritos para nada.



A quarta etapa veio quando começamos a dimensionar nosso sistema em todas as direções e nossos próprios invólucros se tornaram o gargalo do projeto. Então li sobre o WCF e em uma noite (bem, quase) reescrevi toda a interação. No lado do cliente (e nos pacotes encaminhados), tudo permanece o mesmo, mas o código do lado do servidor foi reduzido de meia dúzia de classes sérias para apenas algumas linhas.



Esta história tem dois princípios morais.



  1. (obviamente) Inventar bicicletas é ruim. Se eu fosse imediatamente para o Google e não tivesse medo de usar uma nova tecnologia para mim, seria capaz de reduzir o desenvolvimento de servidor em cerca de um terço.
  2. (e isso é o principal) A tarefa de implementar o mesmo mecanismo usando ferramentas diferentes é a melhor forma de aprendizado, permitindo que você alcance um conhecimento profundo do tema. Quando você apenas faz algo algumas vezes, você se lembra. Mas quando, ao mesmo tempo, você complica (altera) as ferramentas usadas a cada vez, a habilidade é aprimorada muito melhor.



All Articles