Существуют ли какие-либо соглашения об именах для первичных / поступающих классов и их суперклассов? - PullRequest
1 голос
/ 26 января 2010

У меня есть вопрос, касающийся соглашений об именах в C #, который, как мне кажется, не рассматривается ни в большинстве ранее заданных вопросов, ни в обычных ресурсах, таких как Правила именования MSDN . Большинство существующих соглашений об именах фокусируются на платформах и вещах, которые будут использоваться другими классами. Это может быть немного по-другому.

Как назвать класс, в котором находится Main ()? И как это относится к своему суперклассу?

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

// the title of the class happens to be the title of the project

namespace FogCreek {
  public class StackOverflow {
    public static Main() { ... }
  }
}

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

namespace FogCreek.StackSites.StackOverflow {
  public class WhatDoICallThis : StackExchangeSite {
    public static Main() { ... }
  }
}

// elsewhere in another project...

namespace FogCreek {
  public class StackExchangeSite {
    ...
  }
}

Я не решаюсь назвать его StackOverflow, потому что его полное имя будет FogCreek.StackSites.StackOverflow.StackOverflow. Разве это не избыточно?

Кроме того, должен ли StackExchangeSite находиться в своем собственном пространстве имен в FogCreek? Или это должно быть "выше", чем проекты, которые вытекают из этого?

Company.Foobar.Widget
-> Company.Foobar.Widget.RoundWidget
-> Company.Foobar.Widget.SquareWidget

vs

Company.Foobar.Widget.BaseWidget
-> Company.Foobar.Widget.RoundWidget
-> Company.Foobar.Widget.SquareWidget

Я не одобряю второй вариант, потому что я не помню никаких расширяемых классов, которые используют слово «Base».

1 Ответ

5 голосов
/ 26 января 2010

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

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

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