Определение правильных классов - PullRequest
5 голосов
/ 20 февраля 2009

Я прочитал все книги о том, почему нужно создавать класс и что-то вроде «ищите существительные в ваших требованиях», но этого недостаточно. Мои занятия кажутся мне грязными. Я хотел бы знать, есть ли какие-то метрики или что-то, с чем я могу сравнить свои классы и посмотреть, хорошо ли они разработаны. Если нет, то кто самый уважаемый гуру OO, где я могу получить правильные советы по дизайну класса?

Ответы [ 7 ]

4 голосов
/ 20 февраля 2009

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

2 голосов
/ 20 февраля 2009

Попробуйте сосредоточиться на поведении, а не на структуре. Объекты - это «живые» существа с поведением и обязанностями. Вы говорите им делать вещи. Взгляните на подход CRC-карты, чтобы помочь вам моделировать этот путь.

2 голосов
/ 20 февраля 2009

Если вы знакомы с дизайном базы данных, в частности с концепцией нормализации, тогда ответ прост: класс, ориентированный на данные, должен представлять сущность в третьей нормальной форме

если это не поможет, попробуйте вместо этого:

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

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

0 голосов
/ 20 февраля 2009

Метрики? Не так, чтобы вы доверяли им.

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

Если да, у тебя все хорошо.

Если нет, спросите себя, почему нет, а затем измените то, что не работает.

0 голосов
/ 20 февраля 2009

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

Но тогда это субъективная точка зрения не-гуру. Я бы предложил щепотку соли в меню.

0 голосов
/ 20 февраля 2009

Самым уважаемым гуру OO, которого я лично знаю, является StackOverflow. Поставьте здесь свои имена классов, и я думаю, вы получите большое количество отзывов.

0 голосов
/ 20 февраля 2009

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

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