Страницы

среда, 22 февраля 2012 г.

Метафоры против наукообразия.

  Я устал. Устал читать однообразно-наукообразный псевдопонятный многобуквенный код. Эту фразу было неудобно читать, да? Она по сути ничего не значащая, зато насыщена “умными” словами.  Вот один из скромных образцов кода, который вызывает у меня столько нелестные чувства:

public interface ITimeService
{
    DateTime Now { get; }
}

  На первый взгляд ничего особенного в нём нет. Но у меня есть один маленький вопрос: какую метафору из жизни олицетворяет ITimeService? Городскую службу по обслуживанию уличных часов? Службу времени 09? Первая ссылка в поиске по time service показывает на сайт мастерской по ремонту часов, а гугл-переводчик  переводит как “срок службы” Улыбка Думаю многие из вас уже догадались, какая метафора правильная:

public interface IClock
{
    DateTime Now { get; }
}

  Намного ближе к жизни, нежели мутный ITimeService, и отражает суть того, как 99% из нас узнают время. (Ладно, у многих сейчас нет часов, и время узнают из телефона. Но как вы назовёте то место в телефоне, где видны заветные цифры текущего времени? Зуб даю – часы). Чтобы сделать различие более явным, приведу куда более прижившийся пример:

public interface IRepository
{
    void Save(object entity);
    object Get(object id);
}

  Полагаю, что-то вроде этого каждый приличный программист видел тысячу раз. Давайте выкинем метафору репозитория, и назовём это “по научному”:

public interface IPersistenceService
{
    void Save(object entity);
    object Get(object id);
}

  Выглядит ужасно, да? К счастью, такого я никогда не видел. И надеюсь никто не видел этого ужаса. И чтобы убедить окончательно, приведу еще один, контрольный пример – NUnit – MSTest. Отцом-идеологом  NUnit был Кент Бек (Kent Beck). Человек с живым умом, выражающий мысли простым ясным языком. И вот его метафоры:



  • TestFixture – испытательный стенд.
  • Setup – cборка; настройка; монтаж.
  • Test – проверка; испытание.
  • TearDown – демонтаж.

    А вот что родили в недрах Microsoft, в муках изобретая новые термины для уже устоявшихся понятий:



  • TestClass.
  • TestInitialize
  • TestMethod
  • TestCleanup

  В переводе не нуждается. Ни намека на метафору. Наименование противоречит даже простому правилу: названия переменных/классов/методов и т.д. должны говорить об их назначении, а не о деталях реализации. Не говоря уже о том, что громадьё атрибутов начинающихся на Test даст под дых любому Intellisense’у.


  Итого: давайте простые названия своим классам, ищите метафоры из реального мира. Никто не называет рот “телесным отверстием для приёма пищи”. Это смешно.  Не делайте таких глупостей.

Комментариев нет:

Отправить комментарий