将域对象中的业务逻辑重用于表示层(或者如何实现此目的的替代方案)

时间:2014-07-10 10:22:59

标签: architecture domain-driven-design

我遇到了一个设计问题,我需要在表示层中提供业务逻辑。逻辑当前在域层中。在其顶部有一个服务层,其中包含域对象的DTO。这些DTO由WPF表示层以WCF代理的形式引用。域对象的一个​​示例:

public class Grade
{
    List<CriterionGrade> children = new List<CriterionGrade>();

    public decimal FinalGrade
    { 
        get
        {
            decimal final = 0;
            foreach (CriterionGrade grade in CriterionGrades)
                final += grade.Grade;

        return final;
        }
    }

    public IEnumerable<CriterionGrade> CriterionGrades
    {
        get { return children; } 
    }

    public void AddCriterionGrade(CriterionGrade grade)
    {
        children.Add(grade);
    }
}

我需要总计逻辑(以及其他),所以在我的UI中,我可以有一个数据网格,在每个单元格更改中,可以计算总数(想想50行15列,最后一列是每行的FG )。我迷失了如何设计这个。我想避免重复逻辑,我不确定直接引用域对象是否正确(从我读到的,它不是)。

我已经问过这个问题(Can I use Domain Objects directly in Presentation Layer)并接受了一个答案(将受影响的行发送到服务层以进行计算处理)但是尝试一下,它真的很慢并且发生了很多快速变化在datagrid中,所以我认为计算应该是本地的。

关于如何实现这一点的任何想法?

1 个答案:

答案 0 :(得分:0)

由于计算非常简单(基本上是总和),所以看到它在客户端重新实现我不会感到震惊。顺便说一下,您使用的数据网格组件可能已经具有该功能。

您可以转移到客户端的域逻辑数量可能会受到安全问题的限制 - 请考虑客户端代码未公开的Web应用程序。但是虽然DDD对基本上是严格的,但我不确定是否具有明确性。类似SPA的应用程序具有胖客户端,其中域层将位于客户端和服务器层之间,不能排除显然是IMO的DDD空间。

关于此的文章:http://blog.jeffshurts.com/2008/10/rich-domain-model-use-on-both-client-and-server-in-an-ria/