Использование глаголов в именах классов - PullRequest
7 голосов
/ 23 декабря 2011

Я читаю книгу Роберта С. Мартинса «Чистый код».Он пишет о соглашении не использовать глаголы в именах классов.

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

public class XmlProcesser
{
public XmlProcesser(string filePathAndName)
{
}

public bool Validate()
{
}
}

Но дядя Бобс не рекомендует использовать «Процессор» в имени класса.

Но как мне это назвать?Xml не годится, потому что в коде я часто использую класс .net xml.Я думал о XmlHandler, но думаю, что он хуже, чем Processor, поскольку «обработчик» - это нечто другое для программиста.

Как поживаете?Вы используете глаголы в именах своих классов?

Ответы [ 2 ]

30 голосов
/ 23 декабря 2011

Именование важно.Хек, Т.С. Элиот и Эндрю Ллойд Уэббер заработали целое состояние от Имена кошек .Но точка зрения Мартинса не в том, чтобы не использовать глаголы, а в объектно-ориентированном мышлении.Классы - это шаблоны для создания объектов.Объекты есть вещи.Подобные вещи лучше описываются их поведением или их именами?

Я хищник?Ага.Но я также пишу программы.Я программист?Ага.Но я также голосовал за Обаму.Я сторонник Обамы?Ага.Но ... В конце концов, я человек.Вернее, я экземпляр класса [1] HomoSapiensSapiens.И у HomoSapiensSapiens есть много-много МНОГИХ методов, каждый из которых имеет глаголоподобные имена.Как HomoSapiensSapiens.EatBacon().Как HomoSapiensSapiens.WriteGoodCode().Как HomoSapiensSapiens.VoteDemocratic(). и т. Д.

Мартином важно то, что если ваши классы лучше называть как глаголы, вы думаете о своих классах совершенно неправильно.

[1] «класс» в ОО-значении, а не в Царстве / Типе / Классе биологического значения.

9 голосов
/ 23 декабря 2011
  1. Как уже упоминалось в комментариях: Процессор образован от глагола, а не от глагола.Поэтому Processor - это правильное имя для класса.

  2. XmlProcessor на самом деле мало что говорит о классе.Хорошо, это имеет дело с XML, но что это делает?Подтвердить это?Направить его?Разобрать это?Поэтому весьма вероятно, что за углом есть более подходящее имя

  3. Серьезно принимая принципы SOLID, вы часто сталкиваетесь с такими классами, как XmlProcessor {public void process () {...}}

или

CalvinTransmogrifier{
    public Calvin transmogrify(Calvin c){ ...}
}

В этот момент вы как бы достигли границы между ООП и функциональным программированием.И можно привести аргумент, что

Transmogrify{
    public Calvin do(Calvin c){ ... }
}

является приемлемым способом называть вещи.Если это действительно так, зависит от вашего выбора языка.Например, в Scala, если вы можете использовать «apply» вместо «do» и на самом деле называть «apply» mothed следующим образом

Transmogrify(new Calvin)

, который, по крайней мере, я считаю более приятным, чем

Transmogrifier.do(new Calvin)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...