none
DAAB - Boa Pratica RRS feed

  • Pergunta

  • Boas

    Estou a remodelar um web service, que neste momento tem cerca de 5000 acesso diarios. A principal alteração a implementar é ao nivel de acesso a dados. (usar Store Procedures e DAAB)

    Pretendo usar DAAB da  EnterPrise Library. A minha principal duvida está relacionada com o uso ou não de Static Class em determinadas camadas

     Desta forma pensei dividir a app nas seguintes camadas

     

    1 Camada só devolve comandos (DbCommand).

    A minha duvida comença aqui, como esta class só devolve comandos posso declarar os metodos com estáticos?

     

    public class Allocation

    {

     

    public static DbCommand SelectOrdersStanding(int workYear)

    {

    Database db = Database .CreateDatabase();

          DbCommand cmd db.GetStoredProcCommand("OrdersStandingAllocation_Get");

     

          db.AddInParameter(cmd, "@WorkYear", DbType.Int32, workYear);

     

               return cmd;

            }

    }

     

    2 Camada devolve Dados(DataSet).

    Nesta camada a class vai executar os commandos, e devolver dados. Deve esta class ser instanciada? ou pode ser estatica?

    class AllocationDB

    { 

    public DataSet GetOrdersStanding(int workYear)

         {

    DataSet dataSet = new DataSet();

              Database db = ConnDBBiz2.CreateDatabase();

              DbCommand cmd = Allocation.SelectOrdersStanding(_workYear);

     

              db.LoadDataSet(Allocation.SelectOrdersStanding(_workYear),

    dataSet, "Allocation");           

     

    return dataSet;

     

        }

    }

     

     

    3 Camada (WebMethod).

    public class WsService : System.Web.Services.WebService

    {

        [WebMethod]

        public string GetOrdersStanding(int workYear)

        {

        AllocationDB all = new AllocationDB();

     

           return all.GetOrdersStanding(workYear);

       }

    }

     

    A minha preocupação tem a ver com o access ao WebService visto que são bastantes e podem ocorrer em simultanio e se o uso de classes estaticas podem fazer com que sejam devolvidos dados errados.

     

    Desta forma gostaria de saber se o uso de classes estáticas na 1 e 2 camada é boa pratica? Ou se para esta situação existe outra forma de estruturar melhor o WebService?

     

    Estou aberto a sugestões.

     

    Obrigado.

     

    Cumprimentos,

     

    Rui Figueiredo

     

     

    quinta-feira, 5 de junho de 2008 11:48

Todas as Respostas


  • Salve Rui!

    Voce está utilizando o design Singleton, e para o que voce precisa, está perfeito! Toda vez que o método
    SelectOrdersStanding é executado, os objetos são criados novamente. Então cada chamada tem objetos únicos para utilizar, sem concorrencia.

    Existem situações em que voce deve tomar alguns cuidados. Por exemplo, se o seu método estático alterasse um valor de uma variavel também estática, ou criasse outros objetos estáticos. Voce teria que garantir que eles são "thread safe", isto é, eles terão seus valores e quantidade de instancias seguros, independente de quantos acessos/threads seu método venha  a ter. Voce poderia utilizar o Monitor.Enter e o Monitor.Exit para ter essa garantia!


    []'s
    sexta-feira, 6 de junho de 2008 00:57