Como eu estava me preparando para uma entrevista # 1

Às vezes acontece que você deseja mudar de emprego. Nesse caso, temos várias opções:



  1. Solicite um aumento para obter motivação adicional para trabalhar
  2. Exija férias para fazer uma pausa nas tarefas enfadonhas e ganhar força.
  3. Mude de emprego postando seu currículo na esperança de receber uma oferta que o satisfaça.


Se você ainda escolheu a terceira opção, você fez o que eu fiz. E recebi uma oferta dos sonhos: minha própria pilha (ultimamente, fui forçado a mudar meu C # favorito, para php, e também o framework bitrix), fintech, e com aumento de salário. Claro, antes de tudo, decidi atualizar meus conhecimentos. Este texto é, antes de tudo, minha folha de referências, compilada a partir do texto vago para o cargo de Engenheiro .NET intermediário dos meus sonhos.



ORM - Entity Framework / NHibernate



Entity framework e NHibernate são frameworks que usam tecnologia ORM (mapeamento orientado a objetos (mapeamento) para mapear objetos (classes) para tabelas no banco de dados. Ou seja, ORM, condicionalmente, é uma camada entre o código e o banco de dados que permite objetos criados no programa adicionar / receber de / para o banco de dados.



Profissionais da EF



  • Permite que você crie uma tabela por código ou usando EF Designer e gere um novo banco de dados
  • Você pode "automatizar" a criação de objetos, bem como rastrear alterações nesses objetos, simplificando assim o processo de atualização do banco de dados
  • Usando uma sintaxe única (LINQ) para qualquer coleção de objetos, seja dados de um banco de dados ou apenas uma lista; é rápido o suficiente, se usado corretamente, e também razoavelmente lacônico.
  • EF pode substituir grandes pedaços de código que você mesmo escreveria.
  • Reduz o tempo de desenvolvimento.
  • Oferece suporte a operações de banco de dados assíncronas.


Contras de EF



  • Usando uma abordagem "não convencional" para processamento de dados que não está disponível em todos os bancos de dados.
  • Para qualquer mudança no esquema do banco de dados, EF se recusará a trabalhar; alterações no código são necessárias.
  • O código SQL é gerado de forma descontrolada, devemos confiar nos próprios desenvolvedores do EF.
  • .


NHibernate



  • .
  • .
  • Unit Of Work.
  • .
  • .
  • .


NHibernate



  • .
  • , , XML — .
  • , .


Writing unit tests frameworks



Os testes de unidade permitem que você teste de forma rápida e automática os componentes individuais de um aplicativo, independentemente do resto do aplicativo. Os testes de unidade nem sempre abrangem todo o código do aplicativo, mas, no entanto, podem reduzir significativamente o número de erros já no estágio de desenvolvimento.



Estruturas populares:



  • xUnit.net
  • Teste MS
  • NUnit


A partir do Visual Studio 2019, três tipos de projetos foram adicionados especificamente para testes: Projeto de teste xUnit (.NET Core), Projeto de teste MSTest (.NET Core) e Projeto de teste NUnit (.NET Core)



. Considerarei os



testes xUnit em xUnit são definidos como métodos aos quais os atributos de fato e teoria são aplicados.

O fato é um teste separado que não possui parâmetros. Teoria - um teste que aceita parâmetros pode ter vários cenários.



Exemplo
[Fact]
    public void Should_do_somthing(){...}

    [Theory]
    [InlineData(20, 180, 80, ”good”)]
    [InlineData(20, 180, 50, ”bad”)]
    public void Should_measure_weight(int age, int height, decimal weight, string expected){...}

      
      







Existe todo um paradigma de teste que o xUnit implementa totalmente: Arrange-Act-Assert.



  • Organizar: define as condições iniciais para a execução do teste
  • Act: executa um teste (geralmente representa uma linha de código)
  • Assert: verifica o resultado do teste


Arrange e Act são códigos C # regulares, enquanto Assert é uma classe separada com um conjunto de métodos estáticos para verificar os resultados.



Métodos básicos
  • All(collection, action): , collection action
  • Contains(expectedSubString, actualString): , actualString expectedSubString
  • DoesNotContain(expectedSubString, actualString): , actualString expectedSubString
  • DoesNotMatch(expectedRegexPattern, actualString): , actualString expectedRegexPattern
  • Matches(expectedRegexPattern, actualString): , actualString expectedRegexPattern
  • Equal(expected, result): result expected
  • NotEqual(expected, result): result expected
  • Empty(collection): , collection
  • NotEmpty(collection): , collection
  • True(result): , true
  • False(result): , false
  • IsType(expected, result): , expected
  • IsNotType(expected, result): , expected
  • IsNull(result): , null
  • IsNotNull(result): , null
  • InRange(result, low, high): , low high
  • NotInRange(result, low, high): , low high
  • Same(expected, actual): , expected actual
  • NotSame(expected, actual): , expected actual
  • Throws(exception, expression): , expression exception




Assim, passamos 2 dos 7 pontos do resumo.



Na próxima parte:



  • Frameworks DI
  • Compreensão de designs de aplicativos (n-Tier, Onion).


Obrigado pela leitura, entendo que não sou o único a preparar algo;)



Materiais: um , dois , três



All Articles