【问题标题】:Generic comparison logic for objects对象的通用比较逻辑
【发布时间】:2015-05-23 05:33:03
【问题描述】:

我正在处理 REST API 的后端 -
对于 POST 请求(在其中一种情况下),我需要验证用户发送的对象是否与 Db 中存储的对象相同。

比较两者的有效方法是什么C# 中的对象?

PS - 我希望比较逻辑经得起时间的考验,即作为一个庞大的团队,我不依赖人们在 IComparable 逻辑中添加新字段。任何人都可以向对象添加新属性,如果他们不将新属性添加到比较逻辑中,则会跳过验证测试。

我正在考虑反序列化存储在我们数据库中的对象,并将其与用户发布的反序列化版本进行比较。

有什么想法吗?

【问题讨论】:

  • 对象是否具有唯一标识每个实例的属性?类似于数据库中的主键?或者是否有任何属性必须是唯一的?
  • 是的,有。这有什么帮助?
  • 这很有帮助,因为您只需要比较属于主键的属性以确定唯一性。
  • 啊,好吧,我当时没有解释清楚。让我们说一个场景,如果您尝试更新对象中的任何属性,我想进行验证。由于这是一个 POST 调用,因此如果在我的对象恰好处于终端状态时修改了任何属性,我不想调用更新存储过程。所以,它不仅仅是主键。
  • 从API的角度来看,我想让用户知道他不能修改处于终端状态的子资源。

标签: c# object serialization comparison


【解决方案1】:

T 上为 ValueObjects(其标识是其所有字段的对象)自动实现 IComparable<T> 是面向方面编程 (AOP) 的一种形式。

There are various Aspect frameworks for C#.

在这种情况下,我建议您使用PM> Install-Package Equals.Fody

使用起来非常简单。

[Equals]
public class Foo
{
    public int X { get; set; }
    public int Y { get; set; }        
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    相关资源
    最近更新 更多