Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在事务中只更新大业务对象的一个字段的最佳方法是什么?_C#_Asp.net_Architecture_Business Objects - Fatal编程技术网

C# 在事务中只更新大业务对象的一个字段的最佳方法是什么?

C# 在事务中只更新大业务对象的一个字段的最佳方法是什么?,c#,asp.net,architecture,business-objects,C#,Asp.net,Architecture,Business Objects,我所处的情况是,我必须执行交易主详细记录(删除以前的详细信息,插入新的详细信息,更新主状态) 主业务对象有20个 字段 详细说明业务对象 只有4个字段 现在我只需要更新主表中的1个字段和详细信息表中的4个字段来进行插入 如果我初始化一个新的主对象,一次简单的更新会浪费19个字段。我该如何有效地处理这种情况 我是否可以创建一个新对象并仅从主业务对象继承一个字段?请给我一个小的工作例子,如果你建议我一个DTO或与继承的东西。谢谢。我想你的意思是公开这4个字段,而不是继承它们,因为你不能真正继承字段,

我所处的情况是,我必须执行交易主详细记录(删除以前的详细信息,插入新的详细信息,更新主状态

  • 主业务对象有20个 字段
  • 详细说明业务对象 只有4个字段
  • 现在我只需要更新主表中的1个字段和详细信息表中的4个字段来进行插入

    如果我初始化一个新的主对象,一次简单的更新会浪费19个字段。我该如何有效地处理这种情况


    我是否可以创建一个新对象并仅从主业务对象继承一个字段?请给我一个小的工作例子,如果你建议我一个DTO或与继承的东西。谢谢。

    我想你的意思是公开这4个字段,而不是继承它们,因为你不能真正继承字段,只能继承一个类

    您可以创建一个更小、更简单的“更新对象”,但我只会在模型中逻辑上也存在这个更小的对象时这样做。理想情况下,您确实不希望创建只更新部分业务对象的特殊对象。相反,持久层的任务是足够聪明地知道哪些字段已经更改并相应地采取行动(即只更新那些字段)

    总而言之:

    • 仅当更新对象也是域模型的逻辑部分时,才创建更新对象
    • 信任您的持久层以查看发生了什么变化

    使用这4个字段创建DTO。UI将把这个DTO发送到业务层,业务层将使用新的值来修改业务对象。而不是持久化修改后的业务对象

    感谢Sam的回复。我可以用4个字段创建一个更简单的业务对象,但它会创建冗余(两个对象中的字段相同)。您所说的“在您的模型中逻辑存在”是什么意思?在master child中,每当更新child时,我必须更新master中的“上次更新字段”。我的意思是,在理想的设计世界中,您的对象将按照您的“真实世界”业务概念建模,而不是按照您的技术要求建模。当然,这并非总是100%可能的(例如,某些持久性层将要求您使用一些属性来修饰业务对象,以指示它们应如何保存到数据库)。即便如此,我也不太喜欢使用“reduced”对象,例外可能是如果你必须进行大量序列化(例如wcf服务),序列化所有这些空字段会对你的性能产生影响。嗯,谢谢Sam,这是有意义的。我从来没有想过序列化,但在我的情况下,它不会是必需的。是否建议将我的大型业务对象分解为小型对象,并在需要时返回它们的组合?这将使我的工作更容易。你可以做到这一点,但是如果你必须将你的业务对象分割成更小的(逻辑的),也许你应该考虑到你的业务对象设计得太宽了以至于不可用。在这种情况下,将其拆分为更小的对象确实是有意义的。谢谢Sam,我现在将业务对象拆分为两个对象。我将等待更多的建议一段时间,如果没有,我会标记你的答案。对不起,我的坏,我是这个持久层的新手。DTO不会被带到单独的DB层进行更新吗?另外,修改业务对象是什么意思?如果我将其放在DTO中,我可能不会弄乱主业务对象,因为这将意味着初始化所有字段。