• Nenhum resultado encontrado

Shop Notas de implementação. [Exercício da Disciplina de ADAV]

N/A
N/A
Protected

Academic year: 2021

Share "Shop Notas de implementação. [Exercício da Disciplina de ADAV]"

Copied!
23
0
0

Texto

(1)

Shop

Notas de implementação

[Exercício da Disciplina de ADAV]

(2)

1

(3)

Componente



Componente – Class Library



Entidades de negócio



Customer



Product



Sale



Classes implementadas



Customer.cs



Product.cs



Sale.cs



Factory.cs



UtilDB.cs



User.cs



ShopSatatusEnum.cs

(4)

3



Utilização do componente



Acrescentar referência ao Componente no

projecto (Windows Form, Web Site ou

(5)

Interfaces e Classes



Códigos de ‘Status’ – Retorno de alguns métodos

//

// Definição dos códigos de ‘status’ que poderão ser retornados

public enum ShopStatusEnum

{

OK = 1,

NOT_OK = 0,

INVALID_LOGIN = -1,

INVALID_KEY = -2,

INVALID_CUSTOMER_ID = -3,

INVALID_PRODUCT_ID = -4,

INSUFICIENT_STOCK = -5,

ERROR = -6

}



User

public interface IUser

{

(6)

5

(7)

Interfaces e Classes



Customer

public interface ICustomer

{

// devolve os dados do cliente com um dado id

DataSet GetByID(string user, string pass, long clientID);

// devolve os dados de todos os clientes cujo nome obedeça ao padrão de pesquisa

DataSet FindByName( string user, string pass, string namePattern);

// Adiciona um novo cliente e retorna o respectivo ID gerado automaticamente na BD

long Add( string user, string pass, string name, string address,string phone, string fax, string email, out ShopStatusEnum status);

// actualiza os dados do cliente identificado pelo id

ShopStatusEnum Update( string user, string pass, long custumerID, string name, string address, string phone, string fax, string eMail); }

(8)

7

UtilDB

Código comum: usado pelas outras classes

para acesso à base de dados

(9)

Cliente do componente

1 - ) Usar Classe Customer do componente

//Instanciar classe Customer

ShopClassLibrary.ICustomer customer=

new ShopClassLibrary.Customer();

// chamada ao método GetByID da classe Customer.cs

DataSet ds = customer.GetByID(user, pass,

idcustomer);

// método devolve null se não encontrar

If ( ds!=null )

(10)

9

2 - ) Usar Classe Customer do componente através

da classe Factory

ICustomer customer= Factory.CreateCustomerService();

public class factory {

public static ICustomer CreateCustomerService()

{ return new Customer();

}

public static ISale CreateSaleService()

{

return new Sale();

}

public static ISale2 CreateSale2Service()

{

return new Sale();

}

(11)

DAL - Classe Customer.cs

public DataSet GetByID(string user, string pass,

long clientID)

{

OleDbConnection conn = null;

DataSet ds = null;

try

{

// criar objecto de conexão à base de dados e abrir a conexão

conn = new OleDbConnection(UtilDB.CONN);

conn.Open();

// validar utilizador

ShopStatusEnum status = UtilDB.ValidateUser(conn, null,

user, pass);

if (status != ShopStatusEnum.OK)

return null;

// efectuar pesquisa

ds =

UtilDB.GetByID

(conn, null, "Customers",

"CustomerID", clientID);

}

(12)

11

Classe Customer.cs - GetByID (cont.)

catch(OleDbException ex)

{

// tratar a excepção!!!!

System.Console.WriteLine("EXCEPÇÃO no método

<GetByID> da classe 'Customer': " + ex.Message);

}

finally

{

// fechar a conexão

if (conn.State == ConnectionState.Open)

conn.Close();

}

return ds;

}

(13)

Classe UtilDB.cs - GetByID

static public DataSet GetByID(string table, string keyName, long key)

{

DataSet ds = null; try

{ // criar objecto DataSet ds = new DataSet();

// criar um Datadapter para executar o comando e devolver o dataset string sSqlCmd = "Select * From "+ table + " Where “ +

keyName + " = "+ key.ToString();

OleDbDataAdapter oAdapter = new OleDbDataAdapter(sSqlCmd, conn); oAdapter.SelectCommand.Transaction = tx;

// executar o comando e preencher um Dataset oAdapter.Fill(ds, table);

}

catch(OleDbException ex) {

// tratar a excepção!!!!

System.Console.WriteLine("EXCEPÇÃO no método 'UtilDB.GetByID': " + ex.Message);

ds = null; }

(14)

13

UtilDB



Código genérico para pesquisa por Chave

/// <summary>

/// Obtem um dataset resultante de uma pesquisa por chave

/// </summary>

/// <param name="table">tabela a pesquisar</param>

/// <param name="field">campo chave a usar</param>

/// <param name="key">valor da chave a pesquisar</param>

/// <returns>um dataset do tipo pedido</returns>

static public DataSet GetByID(string table,

string keyName, long key)

{

(15)



Inserir novo cliente



Validar dados de entrada



Criar objecto de conexão à base de dados



Validar utilizador



Criar comando SQL com parâmetros



Definir parâmetros



Executar comando



Verificar resultado



Determinar ID gerado para o novo registo



Devolver novo ID

(16)

15

Inserir novo cliente

public long Add(string user,string pass,

string name, …,out ShopStatusEnum status)

{

long customerID = -1;

OleDbConnection conn = null;

// validar dados de entrada

if (name == null || name.Trim().Length == 0)

{

status = ShopStatusEnum.INVALID_ARGUMENT;

return -1;

}

(17)

Inserir novo cliente

try

{

// criar objecto de conexão à base de dados

e abrir a conexão

conn = new OleDbConnection(UtilDB.CONN);

conn.Open();

// validar o utilizador

//

status = UtilDB.ValidateUser(conn, null,

user, pass);

if (status != ShopStatusEnum.OK)

return -1;

(18)

17

Inserir novo cliente

// criar comando SQL a executar

//

string sqlCmd = "INSERT INTO Customers (Name,

Address, PhoneNb, FaxNb, EMail)

Values (?, ?, ?, ?, ?)";

OleDbCommand cmd = new OleDbCommand(sqlCmd,conn);

// definir parâmetros

cmd.Parameters.AddWithValue("name", name);

if (address.Length == 0)

cmd.Parameters.AddWithValue("address",

DBNull.Value);

else

cmd.Parameters.AddWithValue("address", address);

(19)

Inserir novo cliente

//

// executar o comando

//

int insRows = cmd.ExecuteNonQuery();

//

// verificar o resultado

//

if (insRows == 0)

// não inseriu registo

status = ShopStatusEnum.NOT_OK;

else

(20)

19

Inserir novo cliente

else

{

//

// inseriu registo

// obter novo código de id gerado pela BD

OleDbCommand idCmd = new

OleDbCommand("SELECT @@IDENTITY", conn);

customerID = (int)idCmd.ExecuteScalar();

status = ShopStatusEnum.OK;

}

(21)

Inserir novo cliente

catch (OleDbException ex)

{

//

tratar a excepção!!!!

System.Console.WriteLine("EXCEPÇÃO no método

<AddCustomer> da classe 'Customer': " +

ex.Message);

status = ShopStatusEnum.ERROR;

}

finally

{

// fechar a conexão

if (conn!= null && conn.State==

ConnectionState.Open)

conn.Close();

(22)

21

(23)

public class User : IUser

{

public ShopStatusEnum Validate(string user, string pass)

{

return UtilDB.ValidateUser(user, pass);

}

// validar Login

IUser c = new User();

if (c.Validate(txtUsername.Text, txtPassword.Text) ==

ShopStatusEnum.OK)

public interface IUser

{

ShopStatusEnum Validate(string user, string pass); }

Referências

Documentos relacionados

□ Se o documento não está assinado na base de dados e tem um número atribuído, numa série de documentos tipificada como não assinada, será impresso &#34;CÓPIA DO

public static ResumoExemplares buscarPublicacao(String titulo, String assunto, String autor, TipoPublicacaoEnum tipoDePublicacao) throws ValidateException {

Os seguintes efeitos secundários são muito raros (afectam menos de 1 em cada 10.000 pessoas):. Alterações na análise sanguínea (diminuição de glóbulos vermelhos ou brancos e das

Resumo: O presente trabalho teve por objetivo analisar a biometria de frutos e sementes e o crescimento inicial de mudas de Lafoensia pacari oriundas de duas procedências

Além de possibilitar o escrutínio das “peculiaridades do racismo à brasileira que, como todos os racismos, tem armadilhas que não podem ser evitadas

[r]

O Secretário Geral da OTM-CS fez este pronunciamento durante a cerimónia de abertura da IV Sessão Ordinária do Conselho Nacional do SNEB, realizada em finais de

Fica garantido pelos EMPREGADORES o fornecimento de VALE ALIMENTAÇÃO OU VALE REFEIÇÃO a todos os EMPREGADOS em atividade das categorias albergadas por esta CONVENÇÃO COLETIVA