有关在asp.net中验证服务层的问题mvc
我对服务层和使用验证有点困惑。有关在asp.net中验证服务层的问题mvc
因此,我期待通过本教程:http://www.asp.net/learn/mvc/tutorial-38-cs.aspx
首先,如果你看一下表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();
}
}
他们相同的接口只是用不同的名称基本上为什么不用呢?
public interface IProductRepository {
bool CreateProduct(Product productToCreate);
IEnumerable<Product> ListProducts();
}
public interface IProductService
{
bool CreateProduct(Product productToCreate);
IEnumerable<Product> ListProducts();
}
在我的书中(我认为写了本教程的作者)已将其更改为使IProductRepository无效。所以我更加困惑。
那么有人可以解释为什么我需要2个接口似乎做同样的事情?
我的下一个问题是我的存储库具有删除功能。我是否也将这一个放在我的服务层中(如果你使用一个界面,我想这是强制性的,但如果你使用2这样的界面,那么它可能是可选的)。
那么我的服务层会有什么?它会调用存储库中的删除函数吗?它应该是一个无效的方法,还是应该返回布尔值?我不认为这种方法需要进行任何验证?
所以我不确定是否需要布尔。
回答:
从正在阅读的教程:
所以,应用程序流控制逻辑 属于一个控制器和数据 访问逻辑存储库中的所属。 在这种情况下,你把你的 验证逻辑?一种选择是 将您的验证逻辑置于 服务层。
服务层是ASP.NET MVC应用程序中的一个附加层 ,其中 调解控制器和存储库层之间的通信。服务层包含业务逻辑。 特别是,它包含验证 逻辑。
编辑:
我不知道如果我能以明确的方式解释给你(因为我不是英语流利),但我会尝试:
一服务层是ASP.NET MVC应用程序中的一个附加层,用于调节控制器和存储库层之间的通信,因为您可以处理验证和应用程序业务。有时候你的服务需要使用其对应的存储库层的两个或多个方法,所以它不需要有相同的接口。
一个基本的例子,让我们认为你有一个注册表。
,你将有以下接口
public interface IUserService {
bool Register(User mUser);
bool Validate(User mUser);
}
public interface IUserRepository
{
User FindUserByEmail(string Email);
bool Insert(User mUser);
}
所以你最终将有两个类,将做类似: 公共类UserRepository:IUserRepository {
User FindUserByEmail(string Email) {
//do a ninja search and return an user or null
}
bool Insert(User mUser);
{
//Insert user into db
}
}
public class UserService: IUserService
{
public bool Validate(User mUser)
{
//validate user
}
IUserRepository _respository = new UserRepository();
bool Register(User mUser)
{
if(Validate(mUser);
var hasUser = _respository.FindUserByEmail(User.Email);
if(hasUser==null)
return _respository.Insert(mUser);
return false;
}
}
回答:
我想你在这种有限的情况下为单个接口提出了一个论点,但是服务和存储库执行两种非常不同的功能,如果他们共享一个接口,您可能会遇到问题。
如果CreateProduct()或ListProducts()需要在服务或存储库中拥有不同的方法签名,该怎么办?
如果应该在界面中定义ValidateProduct()会怎么样?存储库当然不应该实现。
正如你已经指出的那样,在这个特定的例子中,不需要两个接口来定义相同的事物,但我认为作者的假设是,他们将会不同,因此是必要的。
以上是 有关在asp.net中验证服务层的问题mvc 的全部内容, 来源链接: utcz.com/qa/258553.html