假设我正在创建一个表单,您可以在其中编辑人员记录。人员记录可能看起来像这样:
public class Person
{
public string Id {get; set;}
public string Name {get; set;}
public string JobId {get; set;}
public string JobName {get; set;}
}
假设 JobName 属性仅在表单中显示。在数据库中,作业名称是通过 JobId 计算出来的。
负载:
public Person GetPerson(string id)
当有人编辑表单并保存它时,理想情况下我只需要将前三个属性发送到 Save 函数,以避免关于是否需要提供 JobName 属性的任何歧义:
public class PersonToSave
{
public string Id {get; set;}
public string Name {get; set;}
public string JobId {get; set;}
}
保存:
public void SavePerson(PersonToSave person)
像这样拆分模型以便拥有“加载”模型和“保存”模型是个好主意吗?还是这太复杂了?
我对重用相同模型的主要担忧是,如果另一个工作流程需要保存人物模型,他们将不知道哪些属性需要填写,哪些属性不需要填写,特别是如果类在问题有更多属性,包括一些复杂的属性。
您提到的模式有一个名称。这称为 CQS(命令-查询分离)。它带来了优点和缺点。最重要的优点是写入和读取数据之间的关注点分离。通过分离这两者,您可以为它们使用不同的技术(例如 ORM)和类模型(用于复杂查询的复杂视图对象)。
如果更进一步,您可以通过引入不同的数据存储来进行读取和写入来应用 CQRS(命令-查询责任分离)。