Что мне следует делать, если у меня одно и то же имя класса в разных пространствах имен?

StackOverflow https://stackoverflow.com/questions/816088

  •  03-07-2019
  •  | 
  •  

Вопрос

Я работаю над проектом и пришел к следующему проблема с именованием.

Я бы хотел реализовать фабричный шаблон, но я не знаю, какие названия классов лучше всего использовать (я меняю одно на другое, и это отнимает довольно много времени: S).

Обычно я предпочитаю разделять пространства имен Группы классов, но мой проблема именно с этим конкретным фрагментом кода:

class Mesh
{
    ...
};
namespace Factory
{
    class Mesh
    {
        ...
    };
}
...
Factory::Mesh meshFactory;
Mesh *mesh = meshFactory.create(...);

Мой проблема заключается в том, что если я использую эту структуру, я могу перепутать классы сетки (будь то фабричный класс или фактический класс сетки).На самом деле, это упрощение, моя проблема связана с еще несколькими пространствами имен, и классы с одинаковыми именами используются в обоих пространствах имен.

Я думал о том, чтобы, возможно, использовать суффиксы для разделения классов и поместить их, например, в одно пространство имен:

class Mesh
{
     ...
};
class MeshFactory
{
     ...
};
MeshFactory meshFactory;
Mesh *mesh = meshFactory.create(...);

Так что нет никакой путаницы в том, что делает каждый класс.

Мне не нравится простое решение, которое заключается в использовании разных пространств имен и изобретении разных имен, потому что в конечном итоге я бы использовал имя пространства имен, чтобы дифференцировать их:

class Mesh
{
    ...
};
namespace Factory
{
    class MeshFactory // I can't figure a better different name
    {
        ...
    };
}

Я предпочитаю второй вариант.

Есть ли веская причина, почему лучше первый вариант?Или есть другой способ?Что говорят по этому поводу лучшие практики?

Это было полезно?

Решение

По каким причинам вы назвали класс Mesh "Mesh"?

У класса фабрики, который создает экземпляр Mesh, одни и те же причины?

Если это так, то они должны быть одного класса с одинаковым именем.

Если это не так, то это должны быть разные классы с разными именами.

Поскольку вполне вероятно, что единственной целью фабричного класса будет создание экземпляров класса Mesh, я предлагаю вам назвать его MeshFactory.

Пространство имен не имеет отношения.

Другие советы

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

Вы должны полностью соответствовать требованиям при использовании.Используйте псевдонимы, если ваши полные имена слишком длинные.

a.Сетка b.Сетка

В целом и в .NET (особенно в C #) я бы переназначил класс, если бы не было никакого способа обойти его (а именно, от третьей стороны):

using MyMesh = My.Mesh;
using FooMesh = Foo.Mesh;

За исключением того, что вы явно НЕ говорите на C # (вопрос должен быть помечен c ++), я бы использовал полное пространство имен при обращении к ним. Хотя неудобно набирать его, достаточно одной ошибки, чтобы быть хлопотом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top