我正在研究 MVC3 和 Entity Framework 4.1,我有业务层和数据访问层。
由于我有很多用于业务验证的业务逻辑,我从业务层调用数据访问层并进行验证 b/ci 需要验证来自数据库的数据。
因此,为了进行我的交易,我经历了很多条件,所有条件都在一种方法中(数据库验证的 b/c 我的验证代码也在 DAL 中)我尽可能多地重构了代码,但该方法仍然看起来很大,大约 160线。
谁能告诉我最好的方法应该是什么,所以我的代码将易于管理和扩展。
谢谢
我正在研究 MVC3 和 Entity Framework 4.1,我有业务层和数据访问层。
由于我有很多用于业务验证的业务逻辑,我从业务层调用数据访问层并进行验证 b/ci 需要验证来自数据库的数据。
因此,为了进行我的交易,我经历了很多条件,所有条件都在一种方法中(数据库验证的 b/c 我的验证代码也在 DAL 中)我尽可能多地重构了代码,但该方法仍然看起来很大,大约 160线。
谁能告诉我最好的方法应该是什么,所以我的代码将易于管理和扩展。
谢谢
我建议使用自定义验证。
当您认为您更喜欢可维护性而不是速度时(通常是一个好主意):不应直接从 UI 层访问数据。您的业务层应该包含您的所有业务逻辑,您的验证器应该调用您的业务层。注意这些抽象层,你是在用速度换可维护性(如果你问我,这很值得交易)
这是一个可以让您从这里开始的片段:在 MVC 3 中创建自定义数据注释验证
public class EmployeeViewModel
{
[CustomValidation(typeof(EmployeeViewModel), "ValidateDuplicate")]
[Required(ErrorMessage = "Username is required")]
[DisplayName("Username")]
public string Username { get; set; }
public static ValidationResult ValidateDuplicate(string username)
{
bool isValid;
using(var db = new YourContextName) {
if(db.EmployeeViewModel.Where(e => e.Username.Equals(username)).Count() > 0)
{
isValid = false;
} else {
isValid = true;
}
}
if (isValid)
{
return ValidationResult.Success;
}
else
{
return new ValidationResult("Username already exists");
}
}
}