Je suis un peu confus au sujet de la couche de service et en utilisant la validation.Questions sur la couche de service en tant que validation dans asp.net mvc
Je cherche donc à travers ce tutoriel: http://www.asp.net/learn/mvc/tutorial-38-cs.aspx
Tout d'abord si vous regardez la liste 3
using System.Collections.Generic;
using System.Web.Mvc;
namespace MvcApplication1.Models
{
public class ProductService : MvcApplication1.Models.IProductService
{
private ModelStateDictionary _modelState;
private IProductRepository _repository;
public ProductService(ModelStateDictionary modelState, IProductRepository repository)
{
_modelState = modelState;
_repository = repository;
}
protected bool ValidateProduct(Product productToValidate)
{
if (productToValidate.Name.Trim().Length == 0)
_modelState.AddModelError("Name", "Name is required.");
if (productToValidate.Description.Trim().Length == 0)
_modelState.AddModelError("Description", "Description is required.");
if (productToValidate.UnitsInStock < 0)
_modelState.AddModelError("UnitsInStock", "Units in stock cannot be less than zero.");
return _modelState.IsValid;
}
public IEnumerable<Product> ListProducts()
{
return _repository.ListProducts();
}
public bool CreateProduct(Product productToCreate)
{
// Validation logic
if (!ValidateProduct(productToCreate))
return false;
// Database logic
try
{
_repository.CreateProduct(productToCreate);
}
catch
{
return false;
}
return true;
}
}
public interface IProductService
{
bool CreateProduct(Product productToCreate);
IEnumerable<Product> ListProducts();
}
}
Ils même interface juste avec un nom différent essentiellement pourquoi ne pas simplement utiliser un?
public interface IProductRepository
{
bool CreateProduct(Product productToCreate);
IEnumerable<Product> ListProducts();
}
public interface IProductService
{
bool CreateProduct(Product productToCreate);
IEnumerable<Product> ListProducts();
}
Dans mon livre, si (l'auteur qui je pense a écrit ce tutoriel) a changé d'avoir IProductRepository d'annuler. Cela me rend encore plus confus.
Alors quelqu'un peut-il expliquer pourquoi j'ai besoin de 2 interfaces qui semblent faire la même chose?
Mes questions suivantes sont mon référentiel a une fonction de suppression. Est-ce que je mets aussi celui-ci dans ma couche Service (je suppose que c'est obligatoire si vous utilisez une interface mais si vous utilisez 2 comme ça, alors ça pourrait être optinal).
Alors qu'est-ce que j'aurais dans ma couche de service? Serait-il juste appeler la fonction de suppression dans le référentiel? Est-ce que ce devrait juste être une méthode nulle ou devrait-elle retourner bool? Je ne pense pas que pour cette méthode toute validation devrait être faite? Donc je ne suis pas sûr si un bool serait nécessaire.
Désolé je ne suis pas. Je ne vois toujours pas pourquoi vous ne pouvez pas utiliser la même interface et faites à la place 2 interfaces différentes qui ont exactement les mêmes méthodes. Toujours pas sûr de la supprimer soit il devrait être de retour quelque chose ou non? – chobo2
chobo2, j'ai édité ma réponse pour expliquer ce que cela signifie pour vous (il m'a fallu si longtemps pour écrire LOL) – Cleiton
Cela aide beaucoup. Et si vous deviez appeler un autre référentiel? L'appelleriez-vous dans la couche de service ou l'appelleriez-vous dans votre contrôleur? – chobo2