代码之家  ›  专栏  ›  技术社区  ›  djdd87

ASP.NET MVC-此实体层是否太远了?

  •  0
  • djdd87  · 技术社区  · 14 年前

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

    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 . 它确实使视图的代码更易于阅读,但由于需要映射,显然这是一个额外的工作层。

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

    3 回复  |  直到 14 年前
        1
  •  3
  •   Manfred    14 年前

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

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

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

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

        2
  •  1
  •   Darren Lewis    14 年前

    在我看来,这是浪费时间。除了最简单的解决方案,你会花太多的时间来编写任何东西的映射代码。

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

        3
  •  0
  •   Alex    14 年前

    您将看到一个关系数据结构,它最好保持在第三种正常形式。 我不明白你为什么要分开 FatalHit ZombieDeath . 如果将它们组合在一个类中,它是否会丢失第三个正常形式?其他班有吗 法塔利 成员?

    如果需要两个独立的类来表示这个数据,而第三个组合类只用于视图中的轻松工作,那么我在第三个类中看不到这一点。