quarta-feira, 29 de outubro de 2014

Considerações importantes durante a criação de um projeto em C#

Classes
Principais convenções:
  1. Criar uma pasta chamada Models para armazenar todos as classes do modelo de Negócio. As classes armazenadas nesta pasta não devem possuir métodos, apenas atributos e anotações.
  2. Criar uma pasta chamada Facade ou DAO para armazenar todas as classes do modelo de Negócio que implementam métodos. Basicamente, toda classe armazenada dentro da pasta Models terá uma classe implementada dentro da pasta Facade que irá possuir os métodos do negócio aplicados.
  3. Para nomear os atributos deverão ser utilizados substantivos. Para nomear os métodos deverão ser utilizados, de preferência, verbos no infinitivo.
  4. Tanto os nomes de atributos, métodos e classe deverão iniciar sempre com a primeira letra maiúscula. Cada palavra que compõe o nome também deve iniciar com a primeira letra maiúscula. Exemplo: ContaCorrente, ContaPoupança e ContaSocial.
  5. Quando a Classe possuir um atributo de agregação sempre adicione a chave estrangeira como um atributo da Classe.
  6. Quando a Classe possuir um atributo do tipo ICollection, inicialize a ICollection no método construtor da classe.
  7. O Entity Framework define as seguintes regras para criação do banco de dados a partir das Classes de Negócio armazenadas na pasta Models:
    1. o nome da tabela a ser criada utilizará a forma pluralizada do nome da classe de entidade seguindo as regras da gramatica inglesa, ou seja, se temos uma classe chamada Livro será criada uma tabela chamada Livroes no banco de dados.
    2. os nomes de atributo da entidade serão utilizados para nomear as colunas da tabela.
    3. o atributo da entidade cujo nome for ID ou ClassNameID será reconhecido como chave primária da tabela.
    4. Em cada relação de cardinalidade a chave estrangeira a ser definida será o nome da classe associada acompanhada do prefixo ID, ou seja, ClassNameAssociadoID

Recursos e configurações interessantes do Visual Studio
  1. O snippet “prop” pode ser utilizado para gerar os métodos ge/set de uma classe;
  2. Para numerar as linhas no editor basta clicar no item “Tools” da barra de menus, selecione “Options”, expanda o nó “Text Editor” e, em seguida, selecione “All Languages”. Nas opções a direita marque “Line Numbers”.
  3. Ao criar um atributo privado inicie o seu nome com o sinal “_”. Você pode gerar os métodos get/set clicando com o botão direito no nome do atributo privado, selecione “Refactor” e após “Encapsulate Field...”
  4. Algumas teclas de atalho do editor:
F12
Go To Definition (ir para a definição do objeto selecionado)
CTRL+ “-“ (hífen)
Voltar para a posição anterior do cursor (inverso do F12)
CTRL+M+O
Outlining > Collapse To Definitions
CTRL+K+C
(CTRL+E+C)
Comentar linhas selecionadas
CTRL+K+U
(CTRL+E+U)
Descomentar linhas selecionadas
CTRL+K+D
Indentar código selecionado (caso não tenha nenhuma linha selecionada, indenta o arquivo todo)
CTRL+SHIFT+S
Salvar solução completa
CTRL+S
Salvar o arquivo atual
SHIFT+F6
Build Project
F6
(CTRL+SHIFT+B)
Build Solution
CTRL+Pause
Cancel Build (apenas durante os processos de Build Project ou Build Solution)
F9
Adicionar BreakPoint
CTRL+SHIFT+F9
Remover todos os BreakPoints da solução
F10
Step Over (Debug)
F11
Step Into (Debug)
SHIFT+F12
(CTRL+K+R)
Find All References (ou Find Symbol Results)

Entity Framework Code First Data Annotations
  1. Para instalar o Entity e o CF execute no Package Manager Console (Tools –> Library Package Manager –> Package Manager Console):
# Install-Package EntityFramework
# Enable-Migrations

  1. Sempre que atualizar o modelo execute:
# Add-Migration <nomeparaamigracao>
# Update-Database - verbose

  1. Links interessantes sobre o EntityFramework:

  1. Para recriar o arquivo do banco de dados execute no Package Manager Console (Tools –> Library Package Manager –> Package Manager Console):
# sqllocaldb.exe stop v11.0
# sqllocaldb.exe delete v11.0
# Update-Database

Outra forma:
# Update-Database -TargetMigration: $InitialDatabase
# Update-Database

Criando o ProjetoIESB
  1. Instalar o Entity Framework (Tools –> Library Package Manager –> Package Manager Console):
# Install-Package EntityFramework
  1. Criar a pasta Models

  1. Na pasta Models criar a classe Professor com o seguinte conteúdo:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace ProjetoIESB.Models {
public class Professor{
[Key]
public long ProfessorID { get; set; }

[Required(ErrorMessage = "Digite o nome do professor.")]
[MinLength(5, ErrorMessage = "O tamanho mínimo do nome são 5 caracteres.")]
[StringLength(200, ErrorMessage = "O tamanho máximo são 200 caracteres.")]
public string Nome { get; set; }

[Display(Name = "Idade")]
[DisplayFormat(DataFormatString = "{0:n2}", ApplyFormatInEditMode = true, NullDisplayText = "Não informado")]
[Range(10, 125, ErrorMessage = "A idade deverá ser entre 10 e 25.")]
public double Idade { get; set; }

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
[Display(Name = "Data de Cadastro")]
public DateTime DataCadastro { get; set; }
}
}

  1. Na pasta Models criar a classe ApplicationDbContext com o seguinte conteúdo:
using Microsoft.AspNet.Identity.EntityFramework;
using System;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration;
using System.Data.Entity.ModelConfiguration.Conventions;
namespace ProjetoIESB.Models {
public class ApplicationDbContext :DbContext {
// Adicionar o objeto para acesso
public virtual IDbSet<Professor> Professores{ get; set; }
public ApplicationDbContext(): base("DefaultConnection"){ }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
if (modelBuilder == null) {
throw new ArgumentNullException("modelBuilder");
}
// Desligar o comando de Pluralizacao
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
}
  1. Adicionar uma conexão a um banco de dados (No Visual Studio Express, clicar em View -> Other Windows - Database Explorer. No Visual Studio Professional, clicar em View -> Server Explorer ). Criar um banco de dados chamado ProjetoIESB.

  1. Adicionar ao arquivo app.config (obs: trocar o valor de |DataDirectory| para o caminho completo onde será armazenado o arquivo de banco de dados):
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\ProjetoIESB.mdf;Initial Catalog=ProjetoIESB;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>

  1. Configurar a primeira migração (Tools –> Library Package Manager –> Package Manager Console)
# Enable-Migrations
# Add-Migration <Inicial>
# Update-Database -Verbose


  1. Atualizar a classe program como seguinte conteúdo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ProjetoIESB.Models;
using System.ComponentModel.DataAnnotations;
namespace ProjetoIESB {
class Program{
static void Main(string[] args){
try{
ApplicationDbContext db = new ApplicationDbContext();
// ---- Adicionar um objeto -----
Professor p1 = new Professor ();
p1.Nome = "Marcelo";
p1.Idade = 36;
p1.DataCadastro = DateTime.Now;
//Realizar as validacoes das anotacoes da classe e criar um objeto de erro
var validationResults = new List<ValidationResult>();
var validationContext = new ValidationContext(p1, null, null);
Validator.TryValidateObject(p1, validationContext, validationResults, true);
foreach (var error in validationResults) {
Console.WriteLine(error.ErrorMessage);
}
db.Professores.Add(p1);
db.SaveChanges();
// ---- Fim Adicionar um Objeto ----
// ---- Inicio Listagem de todos os objetos cadastrados
List<Professor > professores1 = db.Pessoas.ToList<Professor >();
foreach (Professor  p in professores) {
Console.WriteLine(p.Nome);
}
// ---- Fim Listagem de todos os objetos cadastrados ----
// ---- Inicio buscar o objeto cujo Id = 1 ----
Pessoa p2 = db.Professores.Find(1);
Console.WriteLine(p2.Nome);
// ---- Fim buscar o objeto cujo Id = 1 ----
// ---- Inicio remover objeto cujo Id = 1 ----
Pessoa p3 = db.Professores.Find(1);
db.Professores.Remove(p3);
db.SaveChanges();
// ---- Fim remover objeto cujo Id = 1 ----
// ---- Inicio Listar todos os objetos cujo Nome = Marcelo ----
var professores2 = db.Professores.ToList().Where<Professor>(a =>a.Nome == "Marcelo");
foreach (var p in professores2) {
Console.WriteLine(p.Nome);
}
// ---- Fim Listar todos os objetos cujo Nome = Marcelo ----
}
catch (Exception ex) {
Console.WriteLine("Erro: " + ex.Message);
}
Console.ReadKey();
}
}
}

Nenhum comentário:

Postar um comentário