Как избежать одинакового имени для класса и его пространства имен, например Technology.Technology? - PullRequest
19 голосов
/ 21 июля 2009

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

Казалось, имеет смысл иметь пространство имен Models.Technology с десятками классов технологий (например, оружие, сельское хозяйство, технологии переработки) и некоторыми связанными интерфейсами. Я также решил создать в классе имен Technology абстрактный класс Technology, из которого происходят все технологии.

Однако, это заставляет меня использовать такой код:

public Technology.Technology research(Technology.Technology tech) {...}

и аналогично:

public Building.Building build(int count) {...}

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

Ответы [ 5 ]

19 голосов
/ 21 июля 2009

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

Но я предполагаю, что у вас есть эта проблема, когда у вас есть базовый класс в вашем пространстве имен, а другие классы наследуют его. Если это так, вы можете вызвать ваш класс BaseTechnology (базовый класс) или AbstractBuilding (абстрактный класс) или IAnimal (интерфейс). Это даже даст вам больше ясности, поскольку вы указываете в названии своего типа что-то важное об этом.

1 голос
/ 21 июля 2009

Один общий отговорка - назвать ваше пространство имен "Entities" или что-то в этом роде.

1 голос
/ 21 июля 2009

Ну, будь то ваше имя, ваше пространство имен, подобное этому ns MyNamespace, или вы называете себя классом c MyClasse. Я лично за то, чтобы назвать пространство имен, потому что это не то, что вы часто используете в коде.

Вы также можете использовать TechnologyBase или AbstractTechnology для именования вашего основного абстрактного класса, который конфликтует с именем вашего пространства имен, и это то, что я рекомендую придерживаться наиболее логичного соглашения об именах.

0 голосов
/ 23 августа 2009

А как насчет технологии? Техника

или

HumanBeing.Human

или

CocaCola.Coke?

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

Technology.Tegy

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

Надеюсь, это поможет ... По крайней мере, немного ...:)

0 голосов
/ 21 июля 2009

Еще одна проблема, просто позвоните в пространство имен после названия компании, в которой вы работаете.

...