我有一个模型和一个部分模型,它只包含我需要在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
}
}
答案 0 :(得分:1)
您可以重命名PartialUserModel UserModelBase类(或保留原样......这样做更符合逻辑意义)并使UserModel继承它:
public class UserModel : UserModelBase
{
...
}
当然,在这种情况下,您需要从UserModel中删除所有重复的属性。
答案 1 :(得分:1)
在进行适当的设计和建立过度杀伤设计之间,这是一条细线。答案取决于许多输入,其中我选择了最重要的项目和模型广度。
希望我的答案更清楚,我不得不说我使用不同的术语。在UI中使用的数据通常称为ViewModel。在您的情况下,您将构建包含必要信息子集的UserViewModel
。
如果我正在进行一次性项目,我会将模型重用为ViewModel。我将通过帮助方法来删除敏感信息,加载或切断从数据库延迟加载的数据并对数据进行其他准备工作。所有这些都是用相同的模型类完成的。
如果它不是一个短期项目,我希望创建单独的ViewModel类,我从模型数据映射。然后,如果我正在使用大多数平面数据,我使用AutoMapper tool自动复制数据,而不是编写自己的映射器。
正如另一个答案所述,您在UI中编写了一个包含所需数据的基本类,并将其与其他模型数据一起扩展,但由于多种原因,这不是一个好方法。
要尽快尝试,请重用模型类或创建ViewModel。遗憾的是没有聪明的解决方案。如果你找到一个,请发表评论,因为我想听听它:)