C# 返回Azure表实体;最好使用DTO或解构元组?
在阅读本文时,我注意到您可以将select属性从一个对象提取到一个元组中。这似乎是一种从Azure表查询返回对象子集的好方法,否则将使用您可能不需要的属性(例如eTag、PartitionKey、RowKey等)填充您的查询对象 在过去,我创建了我的类,并在其中创建了一个DTO来表示我希望从web API查询返回的属性子集,如下所示:C# 返回Azure表实体;最好使用DTO或解构元组?,c#,azure-table-storage,C#,Azure Table Storage,在阅读本文时,我注意到您可以将select属性从一个对象提取到一个元组中。这似乎是一种从Azure表查询返回对象子集的好方法,否则将使用您可能不需要的属性(例如eTag、PartitionKey、RowKey等)填充您的查询对象 在过去,我创建了我的类,并在其中创建了一个DTO来表示我希望从web API查询返回的属性子集,如下所示: public class Person : TableEntity { public Person(string firstName, string la
public class Person : TableEntity
{
public Person(string firstName, string lastName)
{
PartitionKey = firstName;
RowKey = lastName;
}
public Person(){} //parameterless constructor needed by Azure Tables
public string SomeValue1 {get; set;}
public string SomeValue2 {get; set;}
}
public class PersonDTO
{
public string SomeValue1 {get; set;}
public string SomeValue2 {get; set;}
}
当我使用我的Person
对象时,我想我可以创建一个扩展方法来返回元组,并完全去掉PersonDTO
。这有意义吗?这是定义DTO的可行替代方案吗?如果不是,后果如何?我不喜欢为DTO管理单独的类,它实际上只是Azure表中原始实体的属性子集
public static (string, string) GetValues(this Person p)
{
return (p.SomeValue1, p.SomeValue2);
}
被称为:
Person person = new Person("Frank", "Rizzo")
{
person.SomeValue1 = "Value1",
person.SomeValue2 = "Value2"
};
var (personValue1, personValue2) = person.GetValues();
Person p = new Person("Frank", "Rizzo")
{
SomeValue1 = "Value1",
SomeValue2 = "Value2"
};
var (someValue1, someValue2) = p;
更新:另一种选择似乎是将重载与解构
名称一起使用,而不需要如下扩展方法:
public void Deconstruct(out someValue1, out someValue2)
{
someValue1 = SomeValue1;
someValue2 = SomeValue2;
}
被称为:
Person person = new Person("Frank", "Rizzo")
{
person.SomeValue1 = "Value1",
person.SomeValue2 = "Value2"
};
var (personValue1, personValue2) = person.GetValues();
Person p = new Person("Frank", "Rizzo")
{
SomeValue1 = "Value1",
SomeValue2 = "Value2"
};
var (someValue1, someValue2) = p;
语法可能稍有偏离(从内存中编写,而不是实际的工作代码示例)。所以看起来主要目标是去掉表存储添加的元数据字段?或者您严格地只想返回几个属性吗?在某些情况下,它可能会删除元数据字段。在其他情况下,有必要对返回的内容进行非常有选择性的选择。你有没有研究过?简单地说。我想我只是想了解这是否是一个可行的替代方案,以及与涉及另一个依赖项的解决方案相比,它的优缺点是什么。当它只是一个包含两个或三个元组元素的元组时,元组方法实际上没有任何缺点(除了结构)。对于更多的元素,由于它们的值语义,它们变得效率低下。