Именование классов? Добрый день. При разработке одной системы столкнулся с вопросом именования классов в сложных случаях. Проблема заключается в том, что в иерархии классов отдельный элемент не всегда имеет только одного «предка» (не только в смысле наследования («цветок наследуется от растения»), но и в более общем «цветок имеет листики»). Собственно, вопрос заключается в следующем — по какому правилу именовать данные элементы? Несколько примеров классов, с именами которых возникает проблема (прошу прощения за дурацкие примеры): — Лилия, наследуемая от цветка (B, наследуемый от A) — Лепесток, который может быть только у лилии (C, который используется только в B) — Лист, который может быть и у лилии, и у цветка вообще (D, который используется и в B, и в A) — Тычинка, которая может быть и у лилии, и у мака, но необязательно она есть у цветка вообще (E, который используется и F (который, в свою очередь, наследуется от A), и в B, но в A он не используется) И крайний случай: есть квартира, в которой есть какая-то красивая фигня. Лилию, в принципе, можно использовать в качестве красивой фигни. Как назвать адаптер «Лилия as Красивая фигня», чтобы он не потерялся среди всех классов (т.к. теоретически он принадлежит группе «квартира», но также зависит и от группы «цветы»)? Абстрактно — есть G, которая использует H; как назвать I, который ползволяет использовать B как H? Заминка возникла из-за строго иерархической файловой системы и привычки называть классы a-la папки (т.е. Fuston_Http_Response_Cookie_Marked). Эта привычка как раз и не дает ответа на вопрос «как назвать интерфейс, который позволит Testing_Database_Cache_Cookies использовать посторонний класс Fuston_Http_Response_Cookie как свой собственный Testing_Database_Cache_Cookies_Cookie?».
В данной ситуации можно использовать следующие стратегии для именования классов:
Используйте более общие термины в названиях классов, чтобы отразить их общие характеристики. Например, вместо названия "Лилия as Красивая фигня" можно использовать "Растение as Декоративный элемент".
Используйте композицию или делегирование вместо наследования, чтобы избежать сложных иерархий классов. Например, вместо того, чтобы создавать адаптер "Лилия as Красивая фигня", можно создать класс "Декоративный элемент", который содержит экземпляр класса "Лилия".
Придумайте более абстрактные названия для классов, которые отражают их функциональное назначение. Например, вместо названия "I, который ползволяет использовать B как H" можно использовать название "AdapterInterface".
Используйте наименования классов, которые являются составными словами из их функциональных частей. Например, "Testing_Database_Cache_Cookies_Accessor" для класса, который позволяет использовать класс "Fuston_Http_Response_Cookie" внутри класса "Testing_Database_Cache_Cookies".
Важно помнить, что четкое и понятное именование классов способствует более легкому пониманию кода другими разработчиками и улучшает общую читаемость и поддерживаемость системы.
В данной ситуации можно использовать следующие стратегии для именования классов:
Используйте более общие термины в названиях классов, чтобы отразить их общие характеристики. Например, вместо названия "Лилия as Красивая фигня" можно использовать "Растение as Декоративный элемент".
Используйте композицию или делегирование вместо наследования, чтобы избежать сложных иерархий классов. Например, вместо того, чтобы создавать адаптер "Лилия as Красивая фигня", можно создать класс "Декоративный элемент", который содержит экземпляр класса "Лилия".
Придумайте более абстрактные названия для классов, которые отражают их функциональное назначение. Например, вместо названия "I, который ползволяет использовать B как H" можно использовать название "AdapterInterface".
Используйте наименования классов, которые являются составными словами из их функциональных частей. Например, "Testing_Database_Cache_Cookies_Accessor" для класса, который позволяет использовать класс "Fuston_Http_Response_Cookie" внутри класса "Testing_Database_Cache_Cookies".
Важно помнить, что четкое и понятное именование классов способствует более легкому пониманию кода другими разработчиками и улучшает общую читаемость и поддерживаемость системы.