microsoft students to business - inf.pucrs.br · porque não fazer tudo em assembler? mapeamento...
TRANSCRIPT
Microsoft Students to Business Desenvolvimento de Software – 3ª Fase
Desenvolvendo para internet parte V
Acesso a Dados
NET oferece alternativas de acesso aos dados de um banco de dados relacional: Biblioteca de classes ADO.NET Uma API de acesso e manipulação de “baixo nível” TableAdapters e DataSet Tipado Camada de acesso a dados fornecida por geradores de código do Visual Studio baseado no ADO.NET Entity Framework Framework para mapeamento objeto/relacional LINQ Linguagem embutida de acesso e manipulação de alto nível
Acesso a Dados
Arquitetura em camadas
OO x Relacional
Questões do modelo Relacional Trabalha-se no modelo dos dados Forte acoplamento com os elementos do modelo ER: tabelas, chaves (primária e estrangeira) Objetos apenas para “uso em memória” Como tratar a questão das chaves primárias? Como tratar a questão das chaves estrangeiras?
OO x Relacional
Exemplo: modelo relacional
Editora
PK codigo
nome
Livro
PK codigo
titulo anoFK1 codEditora
Autor
PK codigo
primeiroNome ultimoNome
LivroAutor
PK,FK1 codLivroPK,FK2 codAutor
OO x Relacional
Questões do modelo OO Trabalha-se em um modelo que agrega dados e operações Como representar as associações entre objetos? Como mapear hierarquias de herança? Qual o ciclo de vida de um objeto persistente?
Exemplo: diagrama de classes
codigonome
Editora
codigotituloano
Livro
codigoprimeiroNomeultimoNome
Autor
0..*1..1 0..*0..*
Exemplo: diagrama de classes
Editora
PK codigo
nome
Livro
PK codigo
titulo anoFK1 codEditora
Autor
PK codigo
primeiroNome ultimoNome
LivroAutor
PK,FK1 codLivroPK,FK2 codAutor
codigonome
Editora
codigotituloano
Livro
codigoprimeiroNomeultimoNome
Autor
0..*1..1 0..*0..*
OO x Relacional
Editora
PK codigo
nome
Livro
PK codigo
titulo anoFK1 codEditora
Autor
PK codigo
primeiroNome ultimoNome
LivroAutor
PK,FK1 codLivroPK,FK2 codAutor
codigonome
Editora
codigotituloano
Livro
codigoprimeiroNomeultimoNome
Autor
0..*1..1 0..*0..*
Mapeamento Objeto-Relacional
Mapeamento Objeto Relacional (O/RM) Técnica que mapeia os conceitos de Objetos para Relacional e vice-versa Vantagens: Produtividade Trabalha-se sempre no mesmo paradigma (OO) Manutenção Baixo acoplamento com o modelo de dados Desempenho??? Porque não fazer tudo em assembler?
Mapeamento Objeto-Relacional
Idéia geral:
Classes Objetos
Estado Comportamento
Tabelas e Relacionamentos Registros Colunas DML e SQL
Entity Framework
Entity Framework é um O/RM que separa o modelo conceitual do físico Permite a programação OO, incluindo herança e “consulta sobre objetos” Permite a mudança do modelo físico sem alteração da lógica de negócio Modelo de memória simples, baseado em Concorrência Otimista com armazenamento em memória (isto é, sem conexão aberta) Aderente ao System.Transaction Feito para suportar múltiplos bancos de dados relacionais Mapeia Tabelas, Views e Stored Procedures
Entity Framework - Componentes
Entity Data Model (EDM) Descreve o modelo conceitual (Objetos!) Entity Data Provider Um provedor para o EDM Entity SQL Uma versão estendida do SQL para o EDM Object Services Adiciona rastreamento de mudanças, identidade de objetos, attach / detach LINQ to Entities Uma implementação do LINQ sobre o EDM
Entity Framework - Arquitetura
Entity Client – EDM, Entity SQL
Entity Framework
Runtime
Data Providers (ADO.NET patterns)
SQL Server Relational DBMS
Web Service
Mod
elin
g M
appi
ng
Brow
sing
Bind
ing
Programming Layers
Code
Gen
Reporting
Sync
Analysis
Search
Entity Services
Mapping
Query and Update
Pipelines
Transactions
Metadata Services
Linq to En))es En)ty SQL
Applications
SqlClient
OtherClient
Non-relational
Entity Framework - Abordagens
New Database
Existing Database
Centrada no Projeto Centrada no código
Database First Reverse engineer model in EF Designer Classes auto-generated from model
Model First Create model in EF Designer Generate BD from model Classes auto-generated from model
Code First Define classes and mapping in code EF Power Tools provide reverse engineer
Code First Define classes and mapping in code Database created from code Migrations apply model changes to database
Fonte: https://msdn.microsoft.com/en-us/data/jj590134
Entity Data Model
Conceptual
Mapping
Storage
Entity Data Model
EDM é um conjunto de modelos (especificado em arquivo XML .edmx) que define o mapeamento objeto-relacional Três modelos: Conceitual (CSDL - Conceptual Schema Definition Language) Mapeamento (MSL - Mapping Specification Language) Armazenamento (SSDL - Storage Schema Definition Language)
EDM – Conceitos Principais
Conceptual
Mapping
Storage
Entity Data Model
Entidade (entity): Representa um objeto do domínio da aplicação Possui um nome único Possui uma chave de entidade Possui dados na forma de propriedades Possui propriedades de navegação (associação entre entidades) Possui chaves estrangeiras (associação entre entidades) Conjunto de entidades (entity set): Representa um contêiner lógico para entidades de um mesmo tipo (inclui tipos derivados)
EDM – Conceitos Principais
Exemplo: CourseManager - Tabelas
EDM – Conceitos Principais
Exemplo: CourseManager - Entidades
EDM – Conceitos Principais
Propriedade (property): Define a estrutura e características dos dados de uma entidade Pode conter dados primitivos ou estuturados (definidos em tipos complexos) Possui facetas (facets) que definem restrições e comportamentos adicionais (valor padrão, se aceita null, tamanho máximo, etc) Propriedade de navegação (navigation property): Propriedade que permite a navegação entre entidades associadas Pode ser apenas unidirecional
EDM – Conceitos Principais
Propriedade (property): Define a estrutura e características dos dados de uma entidade Pode conter dados primitivos ou estuturados (definidos em tipos complexos) Possui facetas (facets) que definem restrições e comportamentos adicionais (valor padrão, se aceita null, tamanho máximo, etc) Propriedade de navegação (navigation property): Propriedade que permite a navegação entre entidades associadas Pode ser apenas unidirecional
EDM – Conceitos Principais
Chave de entidade (entity key): Propriedade(s) utilizada para identificar uma entidade única É de um tipo primitivo, não anulável e imutável Chave estrangeira (foreing key): Propriedade que implementa um relacionamento entre entidades
EDM – Conceitos Principais
Associação (association): Representa o relacionamento binário entre entidades (inclusive autorelacionamento) Cada associação possui duas terminações, anotadas com multiplicidades Um : 1, Zero ou um : 0..1, Muitos : * Uma associação pode possui restrições de integridade referenciais Entidades associadas são acessadas via propriedades de navegação ou chaves estrangeiras Conjunto de associações (association set): Representa um contêiner lógico para associações de um mesmo tipo
LINQ to Entities
Consultas - busca
var companyNameQuery = from cust in nw.Customers where cust.City == "London" select cust.CompanyName; foreach(var customer in companyNameQuery) {…}
Consultas
Quando um consulta é executada, algumas expressões são avaliadas no servidor e outras no cliente Nem todos operadores padrão do LINQ são suportados pelo LINQ to Entities! Veja http://msdn.microsoft.com/en-us/library/bb738550.aspx
Consultas
Propriedades de navegação em relacionamentos 1-1, 1-N ou N-N Necessário carregar dados relacionados: Propriedade LazyLoadingEnabled Indica se objetos relacionados serão carregados automaticamente via propriedade de navegação Dispara uma nova consulta para cada navegação Método Load Carregamento explícito quando necessário Dispara uma nova consulta para cada load Método Include Carregamento imediato Dispara uma consulta única Consulta gerada é mais complexa
Consultas
A consulta abaixo não irá funcionar:
var contato = (from contact in awe.Contact where contact.LastName == "Zhou" select contact).First(); foreach (var pedido in contato.SalesOrderHeader) {
Console.WriteLine(pedido.SalesOrderID); }
Coleção está vazia!
Consultas
Include Recebe como parâmetro um query path que especifica as entidades relacionadas que devem ser carregadas com os dados Uma única requisição é realizada ao BD
var customer = (from contact in awe.Contact .Include("SalesOrderHeader.SalesOrderDetail") where contact.LastName == "Zhou" select contact).First();
Consultas
Load Permite carregar explicitamente as entidades relacionadas Várias requisições são realizadas ao BD Se chamado dentro de um laço foreach, o EDM deve estar configurado com MultipleActiveResultSets=True na string de conexão
Contact customer = (from contact in awe.Contact where contact.LastName == "Zhou" select contact).First(); if (!customer.SalesOrderHeader.IsLoaded) { customer.SalesOrderHeader.Load(); }
Inserção
Criar um novo objeto Construtor Adicionar novos objetos sobre o modelo via métodos Add() Executar método SaveChanges()
Customer cust = new Customer(); cust.CompanyName = "SomeCompany"; cust.City = "London"; cust.CustomerID = "98128"; cust.PostalCode = "55555"; cust.Phone = "555-555-5555"; contexto.Customers.Add (cust); contexto.SaveChanges();
Inserção
Para inserir em um relacionamento: 1-N ou N-N utilizar Add() na coleção referenciada EntityCollection 1-1 utilizar propriedade Value na entidade referenciada EntityReference
SalesOrderDetail sod = new SalesOrderDetail(…); … order.SalesOrderDetail.Add(sod); contexto.SaveChanges();
Alteração
Obter um objeto do modelo Garantir que o objeto esteja sob controle do contexto Alterar o objeto Estado do objeto muda de Unchanged para Modified Executar método SaveChanges()
var cust = (from c in contexto.Customers where c.CustomerID == "ALFKI" select c).First(); cust.ContactName = "New Contact"; contexto.SaveChanges();
Remoção
Obter um objeto do modelo Executar método DeleteObject() Marca objeto para remoção Executar método SaveChanges() Relacionamentos também são removidos
var deleteIndivCust = from cust in contexto.Customers where cust.CustomerID == "98128" select cust; if (deleteIndivCust.Count() > 0){ contexto.Customers.Remove (deleteIndivCust.First()); contexto.SaveChanges(); }
Remoção
Cuidado! Regras de remoção em cascata de entidade relacionadas devem ser especificadas tanto no modelo conceitual quanto na base de dados Entity Framework somente remove entidades relacionadas se elas estiverem em memória e sob gerência do contexto
Laboratório 19
Uso do Entity Framework em uma abordagem Code First (código primeiro) Definir classes de “Modelo”, incluir propriedades para chaves e navegação Conexão ao banco de dados Uso de um contexto EF Uso de uma classe de inicialização Definição de consultas utilizando LINQ to Entities
Abordagem Code First
Conexão ao banco de dados
Lab - Code first
<add name="ContatosDB" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Contatos.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />
Uso de um contexto EF
Lab - Code first
public class ContatosDB : DbContext { public DbSet<Contato> Contatos { get; set; } }
EF Context (Repository pattern)
Tabela do BD (operações de CRUD)
classe de inicialização
Lab - Code first
public class ContatosInicializer : DropCreateDatabaseIfModelChanges<ContatosDB> { protected override void Seed(ContatosDB context) { base.Seed(context); var contatos = new List<Contato> { new Contato { Nome="Huginho", Telefone="12345678", HorarioComercial=true }, new Contato { ... }; contatos.ForEach(c => context.Contatos.Add(c)); context.SaveChanges(); } } // Global.asax à Application_Start() Database.SetInitializer<ContatosDB>(new ContatosInicializer());
Laboratório 20
Ferramenta LINQPad http://linqpad.net/ LINQ http://msdn.microsoft.com/en-us/library/bb397926.aspx PLINQ http://msdn.microsoft.com/en-us/library/dd460688.aspx ADO.NET Entity Framework http://msdn.microsoft.com/en-us/library/bb399572.aspx
Aonde Ir?
MSDN http://msdn.microsoft.com Data Developer Center http://msdn.microsoft.com/data
Aonde Ir?
Segurança
Autenticação e Autorização
Autenticação refere-se ao processo de obtenção da credencial do usuário e verificação de sua validade Autorização refere-se ao processo de liberação de acesso a determinados recursos protegidos
Segurança
Arquitetura Os clientes se comunicam com o ASP.NET através do IIS Internet Information Services O ASP.NET fornece recursos de segurança implementados pelo .NET Framework
Segurança no IIS
Autenticação no IIS é uma camada prévia à autenticação no ASP.NET! Mecanismos de autenticação do IIS: Anonymous Solicitações são automaticamente autenticadas Basic Credenciais são transmitidas de forma textual simples pela rede Digest Credenciais são transformadas via hash para serem transmitidas Integrated Windows Credenciais são transformadas de modo semelhante ao login do Windows em um Active Directory
Segurança no IIS
Segurança no ASP.NET
Segurança no ASP.NET Recursos para trabalhar com Autenticação e Autorização Controles específicos API ASP.NET Identity
Autenticação no ASP.NET
Ao criar um novo projeto no Visual Studio deve ser selecionado o mecanismo de autenticação que será configurado
Autenticação no ASP.NET
Opções de configuração do projeto: No Authentication: usuários anônimos Individual User Accounts: ASP.NET Identity (http://www.asp.net/identity) Organizational Accounts: Windows Identity Foundation para usuários com contas no Azure Active Directory ou Windows Server Active Directory Windows Authentication: modulo Windows Authentication do IIS
Autenticação no ASP.NET
Autenticação no ASP.NET
É um subsistema que implementa diferentes mecanismos de autenticação Características: Oferece gerência de usuários, perfis (“profiles”) e grupos (“roles”) Extensível Suporte a Microsoft Account, Google, Facebook, Twitter, etc Suporte a programação assíncrona Baseado no OWIN - Open Web Interface for .NET (http://owin.org/) Diferentes modelos de armazenamento de dados Projeto padrão utiliza o SQL LocalDB com Entity Framework Code First Distribuição de atualizações via NuGet
Autenticação no ASP.NET
Versões: 1.0 – VS 2013 RTM 2.0 – VS 2013 Update 2 2.1 – VS 2013 Update 3
ASP.NET Identity
Estrutura do Template de Projeto padrão no Visual Studio: Configuração: Arquivo Startup.cs: ponto de partida para a configuração do ASP.NET Identity Arquivo App_Start/Startup.Auth.cs: classe parcial (arquivo Startup.cs) com método de configuração do ASP.NET Identity Arquivo App_Start/IdentityConfig.cs: classes para configuração das opções dos elementos de autenticação
ASP.NET Identity
Estrutura do Template de Projeto padrão no Visual Studio: Dados: Arquivo Models/IdentityModels.cs: Classe ApplicationUser define as informações disponíveis sobre o usuário; representa propriedades que serão armazenadas no banco de dados do ASP.NET Identity Classe ApplicationDbContext representa o a base de dados do Entity Framework Classe IdentityHelper possui métodos de utilidade geral
ASP.NET Identity
Objetos básicos:
ASP.NET Identity
Objetos básicos:
Autorização
Configuração via arquivo Web.config Marcação <authorization> dentro de <system.web> com base na identificação de usuário <allow users="..."> para permitir acesso <deny users="..."> para negar acesso com base nos grupos de usuários <allow roles="..."> para permitir acesso <deny roles="..."> para negar acesso Opções Nome do usuário/roles no domínio “*” para todos os usuários “?” para usuários anônimos
Autorização
Exemplo:
<authorization> <allow users="CI"/> <deny users="?"/> </authorization>
Componentes de Autenticação
Exemplo:
Controle Descrição
CreateUserWizard Coletar dados do usuário e criar uma nova conta
Login Controle composto para página de login
LoginStatus Fornece link de loginf ou logout em função do status do usuário
LoginView Permite filtragem de conteúdo em função do status do usuário (se autenticado ou anônimo)
PasswordRecovery Controle composto para página de recuperação de senhas perdidas
ChangePassword Controle composto para página de alteração de senha
Laboratório 21