有关在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

回到顶部