Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Paulo Maurício

Uso do delegate .Net / C#

Recommended Posts

Pessoal,

 

Venho do ASP e estou migrando para ASP.Net e ainda tenho algumas dúvidas.

 

Minha dúvida atual é sobre o uso do “delegate”.

 

Programo em camadas e minhas camadas atuais são:

 

- UI

- DTO

- Business

- DAO

 

Até ai eu programei tranqüilo. Pois na DAO eu finalizo o SQL e executo o comando na base. E a minha questão é justamente neste ponto.

 

Quanto eu programava em ASP, eu tinha uma função onde eu passava meu objConn e o SQL e que ficava num arquivo “include”. Assim eu não precisava ficar repetindo para tudo quanto é lado os comandos para execução no banco: create object, open, execute e close. Era o que eu chamava de “minha persistência”.

 

E é isso que eu agora quero fazer no ASP.Net. Criar uma camada de persistência, onde eu digo em qual banco vou executar o comando (stringConnection) e qual o comando a ser executado (stringSQL).

 

No ASP eu usava a concatenação do comando SQL (tratando adequadamente a “injeção de SQL”). Eu passava o SQL para a função e pronto.

Ex.: “SELECT * FROM ESTADOS WHERE NOME=’” & trataInjSQL(vNome) & “’”

 

No ASP.Net eu estou trabalhando com parâmetros na string do SQL.

Ex.: “SELECT * FROM ESTADOS WHERE NOME=@NOME”.

 

Então eu preciso adicionar os parâmetros/valores no objeto command e só depois posso executar.

 

No meu código abaixo, eu tenho o método ExecuteNonQuery, e este eu preciso refatorar transferindo-o para a camada de persistência. Porém este método precisa ser genérico e desta forma a chamada ao método adicionaParameter, precisa ser modificada, acredito eu, já que o método adicionaParameter, precisa ficar na DAO. Disseram-me que posso fazer isso com “delegate”. A questão é: como?

 

Abaixo o meu código na DAO:

+ using ...

namespace DAO
{
    public class PaisesDAO
    {
        private string StrConn;
        private StringBuilder Sql;
        private MySqlParameter param = null;

        public PaisesDAO() { StrConn = ConnectionString.MySqlModelo; }

        public void insertRegistro(PaisesDTO paises)
        {
            montaSqlInsertRegistro();
            ExecuteNonQuery(Sql.ToString(), paises); 
        }

        private void montaSqlInsertRegistro()
        {
            Sql = new StringBuilder();
            Sql.Append("INSERT INTO PAISES (NOME) ");
            Sql.Append("VALUES (?NOME) ");
        }

        private void adicionaParameter(MySqlCommand cmd, PaisesDTO dto)
        {
            param = cmd.CreateParameter();
            param.ParameterName = "?NOME";
            param.Value = dto.Pai_Nome;
        }

        private void ExecuteNonQuery(string sql, PaisesDTO dto)
        {
            MySqlConnection con = new MySqlConnection(StrDsn);
            MySqlCommand cmd = new MySqlCommand(sql, con);
            cmd.CommandType = CommandType.Text;

            adicionaParameter(cmd, dto);

            try
            {
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Dispose(); con.Dispose(); }
        }
    }
}

E ai? Alguém sabe como implementar essa minha idéia usando "delegate". Pode me ajudar?

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

É requisito do seu projeto usar DAO (clássica)???

 

Pq você não considera um ORM? Existem vários na minha opinião o mais maduro é o NHibernate... Se está migrando de ASP pra .NET. Reserve um tempo pra estudar e não programe .NET como ASP....

 

Eu passei por isso em 2002 e se você não tiver uma base boa de OO a curva de aprendizado é dolorosa...

 

Por isso estudo OO se não souber, depois estude o .net

Compartilhar este post


Link para o post
Compartilhar em outros sites

É requisito do seu projeto usar DAO (clássica)???

 

Pq você não considera um ORM? Existem vários na minha opinião o mais maduro é o NHibernate... Se está migrando de ASP pra .NET. Reserve um tempo pra estudar e não programe .NET como ASP....

 

Eu passei por isso em 2002 e se você não tiver uma base boa de OO a curva de aprendizado é dolorosa...

 

Por isso estudo OO se não souber, depois estude o .net

 

Olá Woozio.

 

Grato pela atenção.

 

Sou novato apenas no ASP.Net e Framework. Em OO meu conhecimento é médio. Tenho dúvidas quanto ao delegate entre camadas/projetos. E uma ou outra coisa. Minha formação OO foi na PUC-Rio. Tinha uma professora muito rigorosa. Tipo: pode estar funcionando, mas se o código não estiver perfeito a nota é 0 (zero). :)

 

Já li sobre o NHibernate, inclusive pq algumas empresas o colocam como requisito. Tenho até um pequeno projeto de testes. E tem um outro detalhe quando ao NHibernate... É que ele nasceu com base no Hibernate do JAVA. Linguagem que quero praticar a partir de 2011. Então... NHibernate: é tudo!

 

Cara... Meu ambiente de trabalho é num Windows Server 2008, com VS 2008... Se eu não programasse utilizando todo o poderio dele, eu seria meio doido... OO na veia. :)

 

Problemas pessoais na década de 2000, me fizeram ficar parado no ASP... Por isso, só agora estou evoluindo para o ASP.Net.

 

Quanto à DAO... Sim. É requisito por conta do interesse de criar uma camada/projeto de persistência próprio.

 

Grande Abraço.

 

_______________________________________________________

 

Paulo Maurício - RJ

PauloMau

 

Olá Ivan.

 

Obrigado pela atenção.

 

Eu já havia visto a matéria do link que me passou. Normalmente eu faço uma busca por resposta, antes de postar em fóruns.

 

A informação na matéria não me atende, pq não exemplifica a utilização entre camadas/projetos. Que é o meu caso.

 

Mas como postei em alguns fóruns. Recebi uma resposta sugerindo o uso do Padrão de Projeto: "Strategy"... Inclusive com exemplo. Mas estou relendo meu livro: Padrões de Projeto - Soluções Reutilizáveis de Software Orientado a Objetos - De: Gamma; Helm; Johson; Vlissides, para fixar melhor o padrão sugerido.

 

Valeu!

 

________________________________________________________

 

Paulo Maurício - RJ

PauloMau

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.