Количество классов в крупных проектах - PullRequest
2 голосов
/ 18 октября 2008

Мне просто интересно узнать о крупных проектах - скажем, система бронирования авиакомпаний, сколько классов / объектов она может иметь.

Объекты: заказчик, самолет, аэропорт, маршрут, билет, заказ. Это обо всем, что я могу придумать. Проект, вероятно, будет состоять из сотен тысяч строк кода, так что, вероятно, будет больше классов (которые делают вещи, не связанные с объектами)?

Если так, сколько классов там (приблизительно) может быть? Сколько объектов (согласно моему списку, а не 10000 объектов-клиентов, сколько разных имен ), вероятно, будет?

Ответы [ 7 ]

7 голосов
/ 18 октября 2008

Там действительно нет волшебной формулы для расчета оптимального количества классов. Архитектура, которую вы описали выше, может создать очень и очень простую систему бронирования авиабилетов. Поскольку вы продолжаете рефакторинг, добавляете больше возможностей и учитываете особые случаи, вы можете получить много классов, например, MealPreference, CouponCode, Terminal, Gate, Airline, Baggage, BaggageTransfer, RainCheck, FlightUpgrade и т. Д. .

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

3 голосов
/ 18 октября 2008

Для реальной системы бронирования авиабилетов? Тысячи. Легко.

Я бы предположил, что около половины из них являются "инфраструктурными" классами - в основном, связанными с постоянством, ведением журнала, интеграцией и т. Д. Может быть, несколько сотен классов доменов (Авиакомпания, Самолет, Полет, Пассажир, FrequentFlyer, MaintenanceSchedule, WeatherDelay и т.д. ). И тогда другая половина будет связана с пользовательским интерфейсом - контроллеры, представления, модели представлений и т. Д. Для поддержки как пользовательских, так и внутренних приложений.

1 голос
/ 18 октября 2008

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

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

Так что кроме удовлетворения вашего любопытства число не имеет значения.

0 голосов
/ 31 октября 2008

Все остальные ответы, которые вы получили, мудры: в основном, «Это зависит».

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

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

Итак, вопрос в следующем: сколько у меня будет блоков кода?

На это отвечают другие ответы, которые вы получили: это зависит.

Для получения дополнительной информации см. Теорию инкапсуляции здесь: www.EdmundKirwan.com

С уважением,

Ed.

0 голосов
/ 18 октября 2008

Это полностью зависит от используемой вами абстракции. По моему опыту, чем ближе вы следите за проблемной областью (чем ближе вы пытаетесь сделать свой код читаемым так, как сказал бы деловой человек), тем больше у вас будет классов.

0 голосов
/ 18 октября 2008

Я согласен, что это очень зависит от многих вещей; язык кода, архитектура приложения, количество сторонних расширений (которые обычно содержат множество классов, которые на самом деле никогда не вызываются приложением, но включаются в файлы .dll или .jar), и многие по привычке разработчик и, если они склонны использовать гигантские монолитные классы, или разбить все на интерфейс, абстрактную, простую / заглушку и реальную реализацию.

Однако, если вы просто ищете статистику, я недавно работал над большим проектом для General Motors, в котором было бы примерно 3000 классов, плюс 200 страниц JSP и несколько десятков файлов CSS и JS, поддерживающих пользовательский интерфейс. К этому у вас есть драйверы БД, Spring Framework, пара библиотек Apache Commons, Hibernate ORM, Mule, JSTL, возможно, некоторые другие основные компоненты ... сам веб-сервер ...

0 голосов
/ 18 октября 2008

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

Например, в простом консольном приложении, которое складывает два числа вместе, вы можете получить от 1 до 10 (грубое предположение) в зависимости от используемой реализации и абстракции.

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

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