none
Ajuda sobre design de aplicação. RRS feed

  • Pergunta

  • Pessoal,

    Últimamente tenho dado atenção especial a arquitetura das aplicações que desenvolvo. Parei simplesmente de resolver o problema e passei a prestar atenção na forma como estou resolvendo estes problemas, e estou tendo uma série de dúvidas simples e gostaria da ajuda(e compreensão) de vcs.

    Preciso inserir um ítem em uma tabela do banco através de um objeto, e esta tabela não aceita registros duplicados. Preciso então verificar se o ítem existe na tabela antes de inseí-lo. Minha dúvida é se eu devo ter um método ExisteItem(item) e um método InserirItem(item), ou se devo chamar somente o método InserirItem(item), e a própria procedure se encarrega de checar a sua existência. Caso já exista, não executa nada.(Em meu caso o usuário também não precisa de feedback da operação).

    Dúvidas como esta aparecem a todo instante quando começo a questionar a qualidade de cada linha de código.

    Além da dúvida que deixo, existe algum livro, artigo e etc, que compacta todas estas dúvidas de inciante sobre as melhores práticas da POO.
    Arquitetura e design de aplicações é um assunto que está "na moda", mas gostaria de conhece mais material sobre tudo isso na prática, como são aplicados todos os conceitos com o framework na prática, e que mostrem ao mesmo tempo seus benefícios.

    Obrigado pela ajuda e atenção.
    terça-feira, 14 de julho de 2009 19:04

Respostas

  • Fabio,

    Se o seu usuário não precisa de feedback da operação de inclusão, eu iria tranquilamente com a opção dois, ou seja, tenta incluir, e se já existir retorna sem fazer nada. Se esse é o processo de negócio esperado pelo cliente, é o que o seu código deve refletir.
    Só mudaria o nome do método. Em vez de "Cadastrar", mudaria para "CadastraSeNaoExiste".
    Giovanni Bassi, Microsoft MVP, MCSD, MCPD, CSM, Arquiteto de software - http://www.giovannibassi.com
    • Marcado como Resposta Fábio Moggi sexta-feira, 17 de julho de 2009 12:35
    quinta-feira, 16 de julho de 2009 04:34
    Moderador

Todas as Respostas

  • Fábio,

    Fica difícil sugerir uma solução pontual sem conhecer o cenário, como a sua aplicação está estruturada.

    Em relação à boas práticas OO, é justamente isto o que vai te dar a base necessária para saber onde ganha-se e onde perde-se a cada decisão tomada no design da aplicação.

    Pesquise sobre princípios S.O.L.I.D.
    Pode ajudar bastante.

    []'s
    Rafael Noronha
    http://rafanoronha.net/
    follow me: @rafanoronha
    quarta-feira, 15 de julho de 2009 15:35
  • Um livro que indico para todos que conheço é o Use a Cabeça! Análise e Projeto Orientado ao Objeto ( veja no link: http://www.submarino.com.br/produto/1/1948835/use+a+cabeca!+analise+e+projeto+orientado+ao+objeto ).

    Para mim as séries desta editora é uma das mais didáticas.


    Tiago de Marchi Nunes - Consultor .Net
    quarta-feira, 15 de julho de 2009 19:19
  • Olá Rafael,

    Vou dar mais detalhes do cenário, mas minha dúvida foi com uma intensão mais genérica.

    Minha aplicação utiliza stored procedures para trabalhar as informações no banco de dados. Eu preciso executar uma tarefa simples de adicionar um cliente em uma base de dados. Para isto tenho o objeto Cliente com o método Cadastrar(). 
    Na tabela de clientes eu tenho uma Unique Key que não permite cadastrar 2 clientes iguais.
    A dúvida surgiu no momento da validação, se o cliente já existe ou não. 
    Aqui vejo 2 caminhos:

    1. Criar o método ExisteCliente() retornando um bool indicando se o cliente existe, para depois executar o Cadastrar().
    2. Utilizar somente o método Cadastrar(), e deixar que a stored procedure se encarregue de checar se o cliente existe ou não no banco.

    Considerações sob meu ponto de vista:

    1. Utilizar a primeira opção, vou adicionar mais uma procedure no banco de dados somente para checar a existencia do cliente, em seguida vou novamente no banco de dados para criá-lo caso não existe. Sob o ponto de vista de performance, neste caso seria melhor executar tudo de uma vez, indo apenas uma vez ao banco de dados.

    2. Utilizando a segunda opção, estou abstraindo uma regra de criação do objeto Cliente. Sob o ponto de vista de arquitetura, eu deveria ter os 2 métodos citados acima(minha opiniao).

    A questão que fica é performance X design.
    Na empresa onde trabalho sempre temos um impasse como o caso acima. Uns dizem para simplesmente resolver o problema e deixar na procedure, eu acredito que mesmo indo no banco de dados duas vezes, é melhor manter a validação na aplicação.

    Qual a opinião de vcs nestes casos??

    Obrigado pela ajuda!
    quarta-feira, 15 de julho de 2009 20:15
  • Fabio,

    Se o seu usuário não precisa de feedback da operação de inclusão, eu iria tranquilamente com a opção dois, ou seja, tenta incluir, e se já existir retorna sem fazer nada. Se esse é o processo de negócio esperado pelo cliente, é o que o seu código deve refletir.
    Só mudaria o nome do método. Em vez de "Cadastrar", mudaria para "CadastraSeNaoExiste".
    Giovanni Bassi, Microsoft MVP, MCSD, MCPD, CSM, Arquiteto de software - http://www.giovannibassi.com
    • Marcado como Resposta Fábio Moggi sexta-feira, 17 de julho de 2009 12:35
    quinta-feira, 16 de julho de 2009 04:34
    Moderador