Do One Thing - Как далеко, чтобы принять это правило? - PullRequest
7 голосов
/ 27 августа 2009

Итак, в книге «Чистый код» есть правило «Делай одно». Но как далеко мы действительно должны это сделать.

Например, следующие утверждения:

Settings.Default.BaudRate = baudRate;
Settings.Default.COMPort = port;
Settings.Default.DataBits = dataBits;
Settings.Default.Handshake = handshake;
Settings.Default.Parity = parity;
Settings.Default.ReadTimeout = readTimeout;
Settings.Default.WriteTimeout = writeTimeout;
Settings.Default.CommunicationTimeout = communicationTimeout;
Settings.Default.Save(); 

Хорошо, конечно, здесь есть более одного утверждения, но мне кажется, что они просто делают одно. Сохранение настроек.

У меня есть это в одной функции. Вы действительно взяли бы это приложение? и есть один метод для каждого параметра?

Когда вы придерживаетесь этого правила, а когда нет?

Ответы [ 11 ]

0 голосов
/ 27 июня 2012

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

public void save(){
    mapSettings();
    Settings.Default.Save();
}

private void mapSettings(){
    Settings.Default.BaudRate = baudRate;
    Settings.Default.COMPort = port;
    Settings.Default.DataBits = dataBits;
    Settings.Default.Handshake = handshake;
    Settings.Default.Parity = parity;
    Settings.Default.ReadTimeout = readTimeout;
    Settings.Default.WriteTimeout = writeTimeout;
    Settings.Default.CommunicationTimeout = communicationTimeout;
}

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

В таких случаях я бы не стал утверждать, что оно того стоит, и будет ли я это делать, зависит от моего настроения или количества облаков на небе. Но да, технически здесь есть два уровня, которые можно разделить.

...