: this() As a constructor

I'm trying to get a better understanding of general practice... specifically deriving this() in a constructor. I understand that its less code, but I consider it less readable. Is it common/good practice to do it this way? Or is it better to write a second constructor that handles it specifically?

public SomeOtherStuff(string rabble) : this(rabble, "bloop") { }

or

Public SomeOtherStuff(string rabble)
{
    //set bloop
}

Any input would be greatly appreciated

10
задан Robert Koritnik 19 August 2010 в 17:49
поделиться

7 ответов

Хорошей практикой является использование this(), когда это возможно. В противном случае вы будете дублировать код, что нарушает принцип DRY (Don't Repeat Yourself). Проблема с повторением заключается в том, что каждый раз, когда вам нужно внести изменение - даже если это простое изменение одной строки кода - вы должны помнить, что нужно внести одно и то же изменение в нескольких местах, и синхронизировать эти копии.

Вы должны "дублировать" код только тогда, когда это необходимо, потому что он должен быть другим, так что он больше не является дубликатом. Таким образом, наличие дубликата является сообщением для читателя, что код действительно отличается, и это не просто так.

17
ответ дан 3 December 2019 в 15:34
поделиться

Проблема с двумя отдельными конструкторами заключается в том, что они часто содержат идентичный код, что может привести к проблемам с последующими рефакторингами, когда один конструктор изменяется, а другой - нет. Таким образом, вы могли видеть цепочку конструкторов с this () как применение принципа DRY .

7
ответ дан 3 December 2019 в 15:34
поделиться

Другой способ DRY - это написать метод инициализации, например Init (rabble, bloop) , и все конструкторы вызывают этот метод.

Это менее запутанно и более гибко, особенно там, где много конструкторов.

0
ответ дан 3 December 2019 в 15:34
поделиться

Мне очень нравится первый способ (цепочка конструкторов), но если вы чувствуете, что второй способ более читабелен, сделайте это, и вы можете поместить любой повторяющийся код, который у вас есть в конструкторах, в частный метод чтобы избежать нарушения принципа СУХОЙ, о котором говорили люди.

Кроме того, я также всегда стараюсь кодировать в стиле кода, над которым я работаю, поэтому, если преобладает тот или иной стиль, я бы выбрал этот стиль для единообразия.

1
ответ дан 3 December 2019 в 15:34
поделиться

Именно так вы выстраиваете цепочки конструкторов, и это совершенно правильная вещь.

1
ответ дан 3 December 2019 в 15:34
поделиться

Списки инициализации - очень распространенная практика в промышленности.

Что касается удобочитаемости ... это вопрос мнения. Но ремонтопригодность - обычно более высокая цель, к которой нужно стремиться.

СУХОЙ - это хорошо :)

2
ответ дан 3 December 2019 в 15:34
поделиться

Меня меньше заботит удобочитаемость, а больше - надежность.

Цепочка конструкторов намного лучше, чем копирование тел методов конструктора.

0
ответ дан 3 December 2019 в 15:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: