0

我有一个模型和一个部分模型,其中仅包含我需要在 JSON 中公开的属性。

但是模型和他的部分模型之间的属性是多余的。

我怎样才能避免这种情况或改进我的方法?

namespace Dashboard.Models.UserModels
{
    public class UserModel
    {
        public int id { get; set; }
        public string dbName { get; set; }
        public string firstname { get; set; }
        public string lastname { get; set; }
        public int idExternal { get; set; }
        public int idInstance { get; set; }
        public string login { get; set; }
        public string password { get; set; }
        public DateTime? dtContractStart { get; set; }
        public DateTime? dtContractEnd { get; set; }
        public string emailPro { get; set; }
        public string emailPerso { get; set; }

        public LuccaUserModel()
        {
            idInstance = -1;
        }

        // partial model for json result
        // not sure is the best way or have to be here
        public class PartialUserModel
        {
            public int id { get; set; }
            public string firstname { get; set; }
            public string lastname { get; set; }
            public string emailPro { get; set; }
            public string emailPerso { get; set; }
            public DateTime? dtContractStart { get; set; }
            public DateTime? dtContractEnd { get; set; }
            public string url { get; set; }
        }

        // UserModel Methods
    }
}
4

2 回答 2

1

您可以重命名 PartialUserModel UserModelBase 类(或保持原样......这样做更符合逻辑)并使 UserModel 继承它:

public class UserModel : UserModelBase
{
    ...
}

当然,在这种情况下,您需要从 UserModel 中删除所有重复的属性。

于 2012-11-29T16:55:39.307 回答
1

做一个正确的设计和建立一个矫枉过正的设计之间只有一线之隔。答案取决于许多输入,其中我选择项目和模型广度最重要。

为了让我的答案更清楚,我不得不说我使用了不同的术语。UI中采用的数据通常称为ViewModel。在您的情况下,您将构建UserViewModel包含必要信息子集的内容。

如果我正在处理一次性项目,我会将模型重用为 ViewModel。我将通过帮助方法删除敏感信息、加载或切断从数据库中延迟加载的数据以及对数据进行其他准备来做到这一点。所有这些都是使用相同的模型类完成的。

如果这不是一个短期项目,我希望创建从模型数据映射的单独 ViewModel 类。然后,如果我使用的大多是平面数据,我会使用AutoMapper 工具自动复制数据,而不是编写自己的映射器。

正如此处的另一个答案所述,您使用 UI 中所需的数据编写了一个基本类,并使用其他模型数据对其进行了扩展,但是由于多种原因,这不是一个好方法。

  1. 如果违反了关注点分离。处理模型和持久性的项目不应该知道您的 ViewModel
  2. 您可能需要将相关对象中的数据展平为 ViewModel 对象。在这种情况下,您的模型对象将具有不应该存在或多余的字段。
  3. 您可能需要 ViewModel 中的计算字段和辅助方法,它们会再次出现在模型中,从而使没有更新设计的每个人感到困惑。
  4. 您可能希望对同一个 ViewModel 类采用几个不相关的模型类

简而言之,可以重用模型类或创建 ViewModel。不幸的是,没有聪明的解决方案。如果你找到了,请发表评论,因为我想听听:)

于 2012-11-29T17:00:50.447 回答