none
Classe de Persistência RRS feed

  • Pergunta

  •  

    Olá,

     

    Tenho a seguinte dúvida:

     

    Estou desenvolvendo uma applicação em  C# (WindowsForms), tenho uma camada DAL na ClassLibrary utilizada pelo sistema. A dúvida é a seguinte minha classe Conexao está com todos os metodos estáticos lá possuo métodos tipo:

    // ------------------------------------------------------------------------

    public static IDbConnection CreateConnection()

    {

    switch (DataBaseType)

    {

    case "SQLSERVER":

    conn = new SqlConnection(ConnectionString);

    break;

    case "ORACLE":

    conn = new OracleConnection(ConnectionString);

    break;

    case "ACCESS":

    conn = new OleDbConnection(ConnectionString);

    break;

    }

    return conn;

    }

     

    public static void Conecta()

    {

    try

    {

    if (conn.State == 0)

    {

    conn.Open();

    }

    }

    catch (Exception ex)

    {

    Dot3.Message.ShowErro("Erro ao Conectar: " + ex.Message.ToString());

    Dot3.Logs.Log.GravaLog("class Conexao - Conecta()" + ex.Message.ToString());

    return;

    }

    }

    // ----------------------------------------------------------------------------------------------------------------------------

    Na minha classe Persistencia possuo métodos do tipo:

     

    public void ExecuteNonQuery(StringBuilder sql)

    {

    IDbCommand cmd = Conexoes.CreateCommand(sql.ToString());

    try

    {

    Conexoes.Conecta();

    cmd.ExecuteNonQuery();

    }

    catch (Exception ex)

    {

    if(Config.LOG_ATIVO)

    Dot3.Logs.Log.GravaLog(Classe,Metodo,ex.Message.ToString(),ex.StackTrace.ToString());

    Dot3.Message.ShowErro("Erro: " + ex.Message.ToString());

    }

    finally

    {

    Conexoes.Desconecta();

    }

    }

     

    // ------------------------------------------------------------------------------

    Na camada BLL eu acesso a Persistencia assim:

     

    public void Update()

    {

    StringBuilder strSQL = new StringBuilder();

    strSQL.Append("UPDATE tblAnticorpos SET ");

    strSQL.Append("Descricao='" + descricao + "', ");

    strSQL.Append("AtivoAnticorpos='" + Dot3.Funcoes.BoolToString(ativa) + "' ");

    strSQL.Append("WHERE CodAnticorpos=" + codigo + "");

     

    p = new Persistencia();

    p.ExecuteNonQuery(strSQL);

    }

     

    // ----------------------------------------------------------------------------------------------------------------------------------

     

    Seria correto eu transformar o método ExecuteNonQuery da Classe Persistencia em um método estático,

    e assim eu chamaria da camda BLL assim ????

     

    public void Update()

    {

    StringBuilder strSQL = new StringBuilder();

    strSQL.Append("UPDATE tblAnticorpos SET ");

    strSQL.Append("Descricao='" + descricao + "', ");

    strSQL.Append("AtivoAnticorpos='" + Dot3.Funcoes.BoolToString(ativa) + "' ");

    strSQL.Append("WHERE CodAnticorpos=" + codigo + "");

     

    Persistencia.ExecuteNonQuery(strSQL);

    }

     

    Se alguém puder me dar uma ajuda ficarei muito grato.

     

    Abraço a todos!

    segunda-feira, 9 de junho de 2008 13:15

Todas as Respostas

  • Olá Marcelo.

    Bom particularmente me agrada mais o método estático, eu acho mais simples de utilizar na regra de negócios, do que ter que ficar instânciando a classe para utilizar o método.

    Sobre isso ser correto ou não isso é complexo, é como arquitetura de software, tem 43243242 mil e cada uma puxando para o seu lado com seus prós e contras, acho que temos que ver o que é melhor no nosso projeto, o que nesse caso que citou, não vejo nenhum problema em usar o método estático. Vai achar gente por ai que abomina os método estáticos, e outros que adoram.

    Eu particularmente já utilizei com instância de classe, e estático, e prefiro o estático mais por facilidade mesmo no uso do método.

     

    Espero ter ajudado.

     

    Abraços.

     

    terça-feira, 10 de junho de 2008 23:44