Должен ли я полностью объявить одноразовые объекты? - PullRequest
1 голос
/ 30 июля 2010

Если мне нужно сделать что-то вроде этого:

var connection = new Connection(host);
connection.Execute(Commands.Delete);

Есть ли что-то неправильное в этом:

(new Connection(host)).Execute(Commands.Delete);

Первый пример может быть более читабельным, но второй работаетлучше, если мне нужно сделать это несколько раз:

(new Connection(anotherHost)).Execute(Commands.Create);
(new Connection(someOtherHost)).Execute(Commands.Update);
(new Connection(host)).Execute(Commands.Delete);

Ответы [ 4 ]

3 голосов
/ 30 июля 2010

Ваш класс Connection реализует IDisposable? Тогда:

using (var connection = new Connection(host))
{
    connection.Execute(Commands.Delete);
}
1 голос
/ 30 июля 2010

Чем больше вы многословны, тем легче будет отладка.

Влияние на удобочитаемость вашего кода действительно зависит от того, сколько вы пытаетесь заключить в одну строку - если у вас есть одна идея, которая просто требует много разных слов для выражения, поместить ее в одну строку На мой взгляд, большое дело. Но если вы попытаетесь объединить несколько идей в одну строку, вы потеряете ясность.

Например. Мы начнем с простой идеи, которая просто требует некоторого пространства для выражения:

transactionTime = generationTime + retrievalTime + processingTime + loggingTime

И здесь у нас есть более сложная идея, которую мы можем выразить в одной строке:

logTransactionData(processTransaction(retrieveTransaction(generateTransactionQuery())))

Я думаю, что первый пример легче понять с первого взгляда, чем второй, хотя длина его символов примерно одинакова.

Итак, в общем: подумайте, насколько вероятно, что вам понадобится отладить строку, а также ваше отношение сложности идеи к строке.

1 голос
/ 30 июля 2010

Во-первых, я человек Java, и я не использовал C # Но, основываясь на вашем коде и зная сходство с Java, я могу сказать -

Если ваш класс Connection поддерживает информацию о состоянии, то имеет смысл каждый раз создавать новый объект. Но если он не имеет состояния, то создавать несколько объектов довольно неэффективно. Вы можете создать и повторно использовать то же самое.

т.е. Если вы не можете установить «хост» для соединения после создания, то оба упомянутых подхода не должны иметь никакого значения.

0 голосов
/ 30 июля 2010

Да, вы инициализируете новый объект, используете его и теряете его! Вы не можете использовать его снова, и он будет где-то там, пока GC не соберет его! Таким образом, нет ничего плохого в том, чтобы хранить новые инициализированные объекты в переменной, а объявление их в другой строке делает ваш код более читабельным.

...