Estamos usando o ASP.NET MVC 2 com uma camada e modelo de controlador / exibição de apresentação que consiste em uma camada lógica de negócios, 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 dos propósitos, o Edit parece ser capaz de representar a criação de um objeto e a edição de um objeto. Isso coincide bem com nosso padrão de design de repositório que define um método "Salvar". Podemos simplesmente verificar no procedimento armazenado se o ID é 0 e, em seguida, criar um novo objeto se for 0, caso contrário, podemos apenas atualizar o objeto existente, pois o ID da categoria deve corresponder a um.
O principal ponto de discussão é se faz mais sentido dividir a Edição que inclui a Criação em partes separadas da Criação e Edição além da camada DAL.
Um exemplo óbvio pode ser mostrado como rotas:
Criar - http: // someurl / somearea / edit / 0
Editar - http: // someurl / somearea / edit / 254
vs.
Criar - http: // someurl / somearea / create
Editar - http: // someurl / somearea / edit / 254
Existem padrões estabelecidos ou melhores práticas em relação a isso?
Sei que esse é um pequeno detalhe, mas acho que é logisticamente importante.
fonte
Respostas:
Eu diria que vale a pena separar Criar / Editar, se não for para obedecer ao princípio da responsabilidade única .
Pode-se afirmar que existe um SEO melhor em ter a ação correta no URL também.
Não separar os dois também tornaria o código mais difícil de testar na unidade.
Um novo programador que lê o código provavelmente não achará o código muito intuitivo, tendo que criar objetos em um método de "edição", mas não faz sentido semanticamente. No entanto, posso simpatizar com o método Save () no DAL.
Pensando nisso, não consigo realmente ver os benefícios de colocar tudo em um método de edição.
fonte
Normalmente, prefiro criar um
Save
método no DAL, mas na verdade implemente oCreate
/Edit
/Delete
separadamente.Por exemplo, meu
Save
método verifica o estado do objeto e chama o método Create / Edit / Delete, dependendo do que for necessárioIsso me permite chamar apenas um método genérico para salvar qualquer objeto, mas ainda mantém a implementação de cada um (Criar, Editar, Excluir) separada.
fonte
State
propriedade. Por exemplo, ao clicar noDelete
botão marcaria o objeto como excluídos, em seguida, chamarSaveChanges()