Одна Вещь - Как далеко взять это правило?

Да, Вы делаете :

платформа .NET считает app.config однажды и никогда не касаться app.config снова. Именно поэтому необходимо перезапустить приложение для взятия изменения.

, Почему платформа .NET не обнаруживает, что app.config изменился, и обновляют все данные конфигурации?

причина проста, это не возможно в целом.

Let’s используют Raymond’s “imagine, это могло быть done” логикой здесь...

7
задан 2 revs, 2 users 100% 28 August 2009 в 12:59
поделиться

9 ответов

По-моему, это нормально. Очевидное имя метода для этого кода - SaveSettings , что указывает на то, что метод выполняет только одно действие. Не о чем беспокоиться.

18
ответ дан 6 December 2019 в 04:45
поделиться

Я бы сохранил их всех в одной функции SaveSettings () - если вы поместите их каждую в отдельную функцию, вам все равно придется вызывать все эти функции из другой функции.

6
ответ дан 6 December 2019 в 04:45
поделиться

Да, каждый метод должен делать только одну вещь. Но что это за один?

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

Справа вверху у вас есть единственный метод / функция main , который также выполняет только одно: всю программу. ..

6
ответ дан 6 December 2019 в 04:45
поделиться

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

Вы правильно поняли - сохранение настроек - это «одно дело», и оно может быть само по себе функция. Помещение каждой настройки в отдельную функцию было бы излишним.

Еще одно указание, которое я слышал, может помочь вам понять концепцию "одного элемента": если функция длиннее одной или двух страниц, ее, вероятно, можно написать лучше. разделив его содержимое на несколько подфункций.

4
ответ дан 6 December 2019 в 04:45
поделиться

Глядя на ваш код изолированно, трудно сказать. Вы можете возразить, что ваша функция выполняет две функции: обновляет настройки и сохраняет изменения. Кроме того, как вы вводите значения, передаются ли они в качестве аргументов вашей функции (предпочтительно) или ваша функция сама получает значения (делая что-то еще)?

Я бы следовал Принципу единой ответственности , который резюмируется как:

У класса никогда не должно быть более одной причины для изменения

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

4
ответ дан 6 December 2019 в 04:45
поделиться

В нашей команде мы стараемся следовать одной цели для каждой функции. Чтобы помочь разработчикам, мы добавили в наши стандарты предложение рассмотреть возможность рефакторинга, если функция превышает 25 строк. Итак, если у вас было 100 строк параметров настройки кода, вы могли бы разделить их по таким категориям, как SaveUserSettings, SaveNetworkSettings и т. Д.

Конечная цель - сделать код более читабельным. Если вы возьмете свой метод и разделите его на 20 вызовов, каждый из которых задает свойство, я бы подумал, что отслеживание и поддержка займет больше времени.

2
ответ дан 6 December 2019 в 04:45
поделиться

Я не читал эту конкретную книгу, но что касается концепции ...

«Одна вещь» не означает «одна строка кода». «Одно» означает, что все в функции должно быть логически связано.

Я бы поспорил с некоторыми из предыдущих плакатов, говоря, что «saveSettings» - это «одно». Может быть, это просто небрежность с формулировками, но я воспользуюсь возможностью указать на потенциальную ловушку. В вашем случае это больше похоже на «saveCommunicationSettings», что, как мне кажется, легко соответствует определению «одно». Если вы добавили " Для расчета суммы заказа требуется простой цикл по всем элементам, складывая их цены, а затем взять ставку налога с продаж из таблицы и умножить, я бы, вероятно, сделал все это в одной функции. Если есть нечто большее, чем это - например, система, над которой я работаю в настоящее время, расчет цен включает запасы по сравнению с индивидуальными заказами, поиск всевозможных возможных скидок, добавление гарантий и т.д. вверх.

4
ответ дан 6 December 2019 в 04:45
поделиться

Пример кода лучше подошел бы с вопросом, когда использовать свойства, а когда использовать параметры в конструкторе или методе для установки состояния объекта. Я знаю, что в руководстве .NET framework есть раздел об этом, где обсуждается базовый шаблон компонента (многие свойства и внутреннее состояние компонентов могут быть недопустимыми между первым и последним назначениями) по сравнению с другим шаблон (множество параметров конструктора и параметров методов, а также внутреннее состояние объектов допустимо после выполнения каждой строки кода.

1
ответ дан 6 December 2019 в 04:45
поделиться

Следующий раздел книги, Один уровень абстракции на функцию , дает долгий путь к ответу на этот вопрос. Все эти операторы находятся на одном уровне абстракции, поэтому эта функция уже выполняет одно действие, сохраняя настройки.

Один уровень абстракции на функцию имеет большое значение для ответа на этот вопрос. Все эти операторы находятся на одном уровне абстракции, поэтому эта функция уже выполняет одно действие, сохраняя настройки.

Один уровень абстракции на функцию имеет большое значение для ответа на этот вопрос. Все эти операторы находятся на одном уровне абстракции, поэтому эта функция уже выполняет одно действие, сохраняя настройки.

19
ответ дан 6 December 2019 в 04:45
поделиться
Другие вопросы по тегам:

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