Должно ли это быть пространство имен или класс? - PullRequest
3 голосов
/ 23 октября 2011

Когда у вас есть набор функций, которые не взаимодействуют между ними, вы помещаете их в пространство имен. (Например, пространство имен math.)

Если у вас есть некоторые открытые атрибуты и, возможно, набор функций, которые действуют на эти атрибуты, они должны стать классом.

Но как быть, когда у вас есть набор связанных функций, но нет открытых атрибутов? Примером может служить менеджер событий: у вас могут быть только subscribe(), post() и dispatch() и нет открытых атрибутов; однако у вас есть скрытые атрибуты, такие как список подписчиков и очередь событий, на которые действуют три функции. Это должен быть класс или пространство имен?

Ответы [ 4 ]

8 голосов
/ 23 октября 2011

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

2 голосов
/ 23 октября 2011

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

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

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

2 голосов
/ 23 октября 2011

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

2 голосов
/ 23 октября 2011

класс.У вас есть состояние, пусть и внутреннее, поэтому вы можете создать два менеджера событий (две очереди).

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