相关疑难解决方法(0)

DDD和客户端验证

假设您有一个使用域模型模式,DDD和许多其他设计模式的应用程序.假设我们有许多解决方案,如下所示:

  • Solution.Model
  • Solution.Repository
  • Solution.Services
  • Solution.Presentation
  • Solution.UI.Web

用户体验层将是Solution.UI.Web,我们假设它将是一个ASP.NET WebForms应用程序.你如何执行客户端验证?

有许多事情需要考虑:

首先,我们不应该点击应用程序/数据库服务器将任何验证错误返回给客户端,但我们也可以实现服务器端验证,但我们还需要客户端验证.

其次,我们不希望在用户体验层上实现验证规则.那是因为如果您的应用程序是WebApp,然后您决定创建一个WinApp客户端,那么您将不得不再次实施验证规则 - >维护噩梦.

一种简单的方法是使用ViewModel对象(将被发送到客户端的域实体的展平视图)实现验证逻辑,然后在命中应用程序/数据库服务器之前验证这些对象.

我见过的另一种方法是在不同的应用程序中多次使用,只是生成一组验证错误消息并将该集合发送给客户端.那没关系,但是有问题.只是一个简单的验证错误摘要消息将不会发生,特别是如果您有大数据输入表单.

现在,ASP.NET MVC框架使生活变得更加容易.您可以使用EF + DataAnnotations,而MVC Scaffolding框架可以为您完成大部分工作.但是如果你想创建一个MVC应用程序并使用jQuery和JavaScript实现验证逻辑就是这种情况.

但是,如果你需要一种更通用的方法来实现一个可以在不同的应用程序中使用和使用的验证框架,比如WinForms和WebForms呢?

只是为了澄清,我正在寻找的是一组设计模式/原则和/或技术/框架,以实现一个验证框架,该框架可以使用您的域模型实现,然后在您的客户端应用程序上实施.并且,我不想只返回关于破坏的规则或任何东西的字符串错误消息的集合,我希望能够在验证失败时更新我的​​数据绑定控件(TextBox,ComboBox,DateTimePicker等),以便用户体验层将更直观(如果您愿意).

我已经看到了一些实现和框架,我已经使用了ASP.NET MVC客户端验证一段时间了,所以我的答案与MVC或JavaScript验证没有任何关系.

.net domain-driven-design client-side-validation n-tier-architecture

7
推荐指数
2
解决办法
1954
查看次数

域对象是否应该暂时无效,该决定如何影响验证技术?

我正在编写一个基于MVVM的VB.NET Winforms项目(使用Winforms绑定).我的直觉是永远不允许域实体处于无效状态.这要求我在构造函数中为新实体和现有实体的每个setter中进行验证检查:

Public Class Product


    Public Sub New(ProductID as Integer, Name as String)

        If ProductID > 0 AndAlso Name.Length > 5 Then

            _ProductID = ProductID
            _Name = Name

        Else
            Throw New InvalidProductException
        End If
    End Sub

    Private _ProductID as Integer
    Public Property ProductID as Integer

        Set(value as String)

            If value > 0 then
                _ProductID = value
            Else
                Throw New InvalidProductException
            End If

        End Set

    End Property

    'Same principle as above for Name setter.


End Class
Run Code Online (Sandbox Code Playgroud)

然后我跑过Data Annotations,看起来很漂亮.我注意到大多数使用数据注释的人允许域实体暂时变为无效,然后在稍后通过调用Validate.ValidateObject来验证实体.此时,实体无效,原始状态已丢失,除非您有其他机制将其回滚.

两个问题:

1)您是否允许域名实体暂时无效?

2)根据您对#1的回答,您使用哪些技术来验证实体?

.net validation domain-driven-design

7
推荐指数
3
解决办法
1546
查看次数

使用扩展方法验证域模型

我一直在研究使用服务层来验证我的域模型,然后再将它们保存到数据库中.

我找到了以下使用扩展方法来验证我的模型的例子,但是想知道这样做是否有任何特定的缺点?我没有看到提到的验证(除了数据注释).

我正在考虑实施以下内容:

public class FooService : IFooService {

    public bool Add(Foo foo) {

        if (!foo.IsValid()) {
            return false
        }

        try ... catch
    }
}
Run Code Online (Sandbox Code Playgroud)
public static class validationExtensions {

    public static bool IsValid(this Foo foo) {

        // Call my validation implementation here
    }
}
Run Code Online (Sandbox Code Playgroud)

我很紧张,因为我没有看到这个建议/实施太多.思考?

asp.net-mvc domain-driven-design

4
推荐指数
1
解决办法
922
查看次数

BL服务:例外或方法结果?

什么是最好的方式和原因?

V1:

try
{
    var service = IoC.Resolve<IMyBLService>();
    service.Do();
}
catch(BLException ex)
{
   //Handle Exception
}
Run Code Online (Sandbox Code Playgroud)

V2:

var service = IoC.Resolve<IMyBLService>();
var result = service.Do();
if (!result.Success)
{
   //Handle exception
}
Run Code Online (Sandbox Code Playgroud)

.net architecture domain-driven-design business-logic n-tier-architecture

3
推荐指数
1
解决办法
631
查看次数