Вернуть сущность Azure Table;лучше использовать DTO или деконструкцию кортежа? - PullRequest
0 голосов
/ 26 февраля 2019

Читая о Деконструкция Я заметил, что вы можете вытащить выбранные свойства из объекта в кортеж.Это отличный способ вернуть подмножество объектов из запроса таблицы Azure, которые в противном случае заполнили бы ваш объект запроса свойствами, которые вам могут не понадобиться (например, eTag, PartitionKey, RowKey и т. Д.).

В прошлом я создавал свой класс, и в нем я создаю DTO для представления подмножества свойств, которые я хочу вернуть из запроса веб-API, следующим образом:

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();

Обновление: Похоже, альтернатива использует перегрузки с именем Deconstruct без необходимости использования метода расширения следующим образом:

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

Вызывается так:

Person p = new Person("Frank", "Rizzo")
{
    SomeValue1 = "Value1",
    SomeValue2 = "Value2"
};

var (someValue1, someValue2) = p;

Синтаксис может быть немного выше (запись из памяти, а не фактический пример рабочего кода).

...