Как назвать подклассы? - PullRequest
1 голос
/ 03 июня 2019

Доброе утро,

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

Я имею в виду, я мог бы сделать это:

  • Животное -> Крупный животный -> Крупный животный из мяса
  • Животное -> LargeAnimal -> SimplifiedLargeAnimal

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

Я также могу назвать их так:

  • Животное -> LargeAnimal -> LargeAnimalMeat
  • Животное -> LargeAnimal -> LargeAnimalSimplified

Это лучше, но теперь его труднее читать. Могут быть классы типа «LargeAnimalRed» вместо «RedLargeAnimal», которые гораздо более читабельны.

Итак, я вижу третий вариант:

  • Animal -> Animal_Large -> Animal_Large_Meat
  • Animal -> Animal_Large -> Animal_Large_Simplified
  • Animal -> Animal_Large -> Animal_Large_Red

Теперь у них есть Имя + Группа + Модификация, т. Е. Вы видите все опции и не должны определять, что к чему, но я не видел такого соглашения об именах.

Что вы думаете об этом вопросе и примерах?

Третий вариант приемлем в сообществе?

1 Ответ

0 голосов
/ 09 июня 2019

Что вы думаете об этом вопросе и примерах?

Тот факт, что вы потратили время на то, чтобы задать этот вопрос, хорош, и приведенные вами примеры хорошо поняты.

Является ли третий вариант приемлемым в сообществе?

Нет.Каждый язык имеет свои собственные стандарты кодирования и именования.В этом случае я не знаю ни одного языка, который имеет This_Convention.Если вы говорите о java, то обычный PascalCase должен это делать.

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

  1. Действительно ли LargeAnimal и SmallAnimal имеют разные свойства, которые делают их логически разделимыми?Все ли крупные животные используют одни и те же методы / поля, которых нет у всех мелких животных?

  2. Классы и объекты (обычно) представляют собой концепции и объекты реальной жизни.Если у вас есть экземпляр foo некоторого класса Bar, вы сможете с комфортом сказать «foo - это (тип) Bar».

Можете ли вы сказать, что «foo - это LargeAnimalMeat»?

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

https://en.wikipedia.org/wiki/Composition_over_inheritance

...