Ich bin ein wenig verwirrt über die Service-Schicht und die Verwendung Validierung.Fragen über die Service-Schicht als Validierung in asp.net mvc
Ich suche dieses Tutorial So: http://www.asp.net/learn/mvc/tutorial-38-cs.aspx
zuerst, wenn Sie auf Liste aussehen 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();
}
}
Sie gleiche Schnittstelle nur mit einem anderen Namen, warum im Grunde nicht nur eine verwenden?
public interface IProductRepository
{
bool CreateProduct(Product productToCreate);
IEnumerable<Product> ListProducts();
}
public interface IProductService
{
bool CreateProduct(Product productToCreate);
IEnumerable<Product> ListProducts();
}
In meinem Buch aber (der Autor, denke ich schrieb dieses Tutorial) hat sie sich verändert IProductRepository müssen erlöschen. Das verwirrt mich noch mehr.
Also kann jemand erklären, warum ich 2 Schnittstellen brauche, die das gleiche zu tun scheinen?
Meine nächste Frage ist, mein Repository hat eine Löschfunktion. Setze ich dieses auch in meine Service-Ebene (ich denke, obligatorisch, wenn Sie eine Schnittstelle verwenden, aber wenn Sie 2 wie etwa verwenden, dann könnte es optional sein).
Also was hätte ich in meiner Serviceebene? Wäre es nur Löschen Funktion im Repository? Sollte es nur eine leere Methode sein oder sollte es bool zurückkehren? Ich denke nicht, dass für diese Methode eine Validierung erforderlich wäre.
So bin ich mir nicht sicher, ob ein Bool benötigt würde.
Sorry, ich folge nicht. Ich verstehe immer noch nicht, warum Sie nicht dieselbe Schnittstelle verwenden können und stattdessen zwei verschiedene Schnittstellen mit genau denselben Methoden erstellen. Immer noch nicht sicher über das Löschen eines sollte es entweder etwas zurückgeben oder nicht? – chobo2
chobo2, ich habe meine Antwort bearbeitet, um zu erklären, was es für dich bedeutet (es ist so lange Zeit von mir, LOL aufzuschreiben) – Cleiton
Das hilft viel. Wie wäre es, wenn Sie ein anderes Repository aufrufen müssen? Würdest du es in der Serviceebene nennen oder würdest du es in deinem Controller nennen? – chobo2