É melhor ter ações Criar e Editar separadas ou combinar Criar e Editar em uma?

15

Estamos usando a ASP.NET MVC 2 com uma Camada de Apresentação / Modelo de Controlador / Visualização que consiste em Camada de Lógica Empresarial, Camada de Acesso a Dados [Procedimentos Armazenados e classes / métodos para conversar com os procedimentos armazenados].

Na camada de negócios e acima, para a maioria das finalidades, o Edit parece ser capaz de representar tanto a criação de um objeto quanto a edição de um objeto. Isso coincide bem com o nosso Padrão de Design de Repositório que define um método "Salvar". Podemos simplesmente verificar o procedimento armazenado se o ID for 0 e, em seguida, criar um novo objeto, se for 0, caso contrário, poderemos apenas atualizar o objeto existente, já que o ID da categoria deve corresponder a um.

O principal ponto de discussão é se faz mais sentido dividir Editar que inclui a Criação em partes separadas de Criar e Editar além da camada DAL.

Um exemplo óbvio pode ser mostrado como rotas:

Criar - link

Editar - link

vs.

Criar - link

Editar - link

Existem padrões ou práticas recomendadas em relação a isso?

Eu sei que este é um pequeno detalhe, mas acho que é logisticamente importante.

    
por Joshua Enfield 29.08.2011 / 15:46
fonte

2 respostas

5

Eu definitivamente diria que vale a pena separar Criar / Editar, se não for por obedecer o princípio da responsabilidade única .

Pode-se afirmar que há melhor SEO para ter a ação correta no URL também.

Não separar os dois também tornaria o código mais difícil para o teste unitário.

Um novo programador que lê o código provavelmente não acha o código muito intuitivo tendo que criar objetos em um método de "edição", simplesmente não faz sentido semanticamente. No entanto, posso simpatizar com o método Save () no DAL.

Pensando nisso, não vejo os benefícios de colocar tudo em um método Edit.

    
por 29.08.2011 / 20:18
fonte
3

Geralmente, prefiro criar um método Save no DAL, mas, na verdade, implementar o Create / Edit / Delete separadamente.

Por exemplo, meu método Save verificaria o estado do objeto e chamaria o método Criar / Editar / Excluir dependendo do que fosse necessário

switch(obj.State)
{
    case ObjectState.New:
        CreateObject(obj);
        break;
    case ObjectState.Modified:
        UpdateObject(obj);
        break;
    case ObjectState.Deleted:
        DeleteObject(obj);
        break;
}

Isso me permite apenas chamar um método genérico para salvar qualquer objeto, mas ainda mantém a implementação de cada um (Create, Edit, Delete) separada.

    
por 29.08.2011 / 16:41
fonte