返回一个Azure Table实体;更好地使用DTO或解构元组?

时间:2019-02-26 19:45:42

标签: c# azure-table-storage

阅读deconstructing时,我注意到您可以将对象中的select属性拉到元组中。这似乎是从Azure表查询返回对象子集的好方法,否则它将用您可能不需要的属性(即eTag,PartitionKey,RowKey等)填充查询对象。

过去,我创建了我的类,并在其中创建了一个DTO,以表示要从Web API查询返回的属性的子集,如下所示:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button type="button" name="btnOcultarEncabezadoFactura" class="btn btn-xs btn-primary" id="OcultarEncabezadoFactura" data-row-id="0">Ocultar Encabezado</button>
<fieldset id="fsEncabezado"></fieldset>

当我使用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。这有意义吗?它是定义DTO的可行选择吗?如果没有,后果是什么?我不喜欢为DTO管理一个单独的类,它实际上只是Azure表中原始实体的属性的子集。

PersonDTO

这样称呼:

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(); 的重载,而无需使用如下扩展方法:

Deconstruct

这样称呼:

public void Deconstruct(out someValue1, out someValue2)
{
    someValue1 = SomeValue1;
    someValue2 = SomeValue2;
}

上面的语法可能略有偏离(从内存中写入而不是实际的工作代码示例)。

0 个答案:

没有答案