ООП: хороший дизайн класса - PullRequest
15 голосов
/ 10 мая 2009

Мой вопрос связан с этим: Инструмент Python, который строит диаграмму зависимостей для методов класса .

После того, как я не нашел никаких инструментов, я сам написал быстрый взлом: я использовал модуль компилятора, я проанализировал исходный код в абстрактном дереве исходного кода и прошел его, чтобы собрать зависимости между методами класса. Мой скрипт сгенерировал входной файл для graphviz, который использовался для генерации графа зависимостей, который выглядит как this .

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

Ответы [ 5 ]

30 голосов
/ 10 мая 2009

При разработке классов мы придерживаемся следующих принципов:

Редактировать: Шаблоны проектирования помогают заставить ваш код соответствовать этим принципам. Мне было очень полезно сначала понять принципы, а затем взглянуть на шаблоны и понять, как шаблоны приводят ваш код в соответствие с принципами.

3 голосов
/ 10 мая 2009

Часто невозможно сказать, что «правильно» или «неправильно», когда дело доходит до дизайна класса. Есть много руководств, шаблонов, рекомендаций и т. Д. По этой теме, но в конце концов, имхо, это много об опыте предыдущих проектов. По моему опыту, лучше не беспокоиться об этом и постепенно улучшать ваш код / ​​структуру небольшими шагами. Поэкспериментируйте и посмотрите, как некоторые идеи / изменения ощущаются / выглядят. И это, конечно, всегда хорошая идея учиться у других. прочитайте много кода и проанализируйте его, попытайтесь понять :).

Если вы хотите прочитать о теории, я могу порекомендовать Крейга Ларманса «Применение UML и шаблонов: введение в объектно-ориентированный анализ, проектирование и итеративную разработку» Amazon . Он охватывает несколько частей вашего вопроса, дает некоторые приблизительные ориентиры и показывает их, используя пример приложения. Мне понравилась книга.

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

1 голос
/ 10 мая 2009

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

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

0 голосов
/ 11 мая 2009

Я рекомендую книгу «Рефакторинг» Мартина Фаулера для множества практических примеров итеративного преобразования плохого дизайна в хороший дизайн.

0 голосов
/ 10 мая 2009

Попробуйте сделать каждый метод легко тестируемым. Я считаю, что это всегда приводит мои проекты к большей читабельности / понятности. Существует множество правил OOAD - SRP, DRY и т. Д. Постарайтесь помнить об этом при рефакторинге.

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