0

我有一个域数据模型,它返回如下类:

public class ZombieDeath
{
    public virtual int ZombieId {get;set;}
    public virtual FatalHit {get;set;}
}

public class FatalHit
{
    public virtual int HitId {get;set;}
    public virtual string Zone {get;set;}
    public virtual string Weapon {get;set;}    
}

当将此数据传递回我的网格时,我已经读过最好始终以扁平格式将数据返回到视图。所以我有以下代表网格行的类:

public class ZombieDeathRow
{
    public virtual int ZombieId {get;set;}
    public virtual int HitId {get;set;}
    public virtual string Zone {get;set;}
    public virtual string Weapon {get;set;}
}

所以,当它被渲染时,我只是调用Model.Weapon,而不是Model.FatalHit.Weapon。它确实使视图的代码更易于阅读,但由于需要映射,它显然是额外的工作层。

这真的是一种很好的工作方式,还是只是浪费时间?

4

3 回答 3

3

我认为在域中进行与表示层不同的设计是有好处的。因此,从概念上讲,您实际上正在查看两种不同的模型,一种用于域层,一种用于表示层。每个模型都针对其用途进行了优化。

域层旨在提供独立于您正在使用的用户界面的应用程序域的表示。

表示层中的模型可能会有所不同,具体取决于您使用的用户界面技术或正在使用的客户端。例如,表示层中的模型对于 MVC 和 WebForms 可能看起来不同(有些人同时使用这两者)。移动设备表示层中的模型可能与桌面上运行的浏览器的模型看起来不同。Web 服务可以使用另一种模型来有效地传输数据。如果您在 Web 应用程序中使用 AJAX,您可能更喜欢另一种模型来有效地传输信息,例如使用 JSON。

所以,是的,通常我会说拥有不同的模型是完全可以的,只要它们可以帮助您以易于理解和维护的方式实现您的系统。您提到视图的代码“更易于阅读”。在我看来,这足以作为一个理由!

于 2010-08-02T11:42:43.303 回答
1

浪费时间海事组织。除了最简单的解决方案之外,您将花费太多时间编写映射代码。

你在哪里读到最好扁平化你的 ViewModel?在 ViewModel 上作为属性公开的复杂业务对象可能不会促进完全封装的代码,但根据我对 MVC 项目的经验,一个好的域模型意味着除了纯粹主义者之外,这不会成为问题。

于 2010-08-02T11:40:21.560 回答
0

您正在查看一个关系数据结构,最好保持第 3 范式。从这段代码中我看不出你为什么需要FatalHitZombieDeath. 如果将它们组合在一个类中,它会失去第三范式吗?其他班级有FatalHit成员吗?

如果需要 2 个单独的类来表示此数据,而第三个组合类仅用于在视图中轻松工作,我看不出第三类的意义。

于 2010-08-02T11:40:48.170 回答