Доброго времени суток !
Хочу научиться правильно проектировать свои приложения. Чтобы код был читаемым для других программистов. Знаю, что существуют паттерны проектирования, но я не умею ими пользоваться.
Хочу, чтобы вы помогли понять, как мне лучше спроектировать данную задачу:
Есть класс, который конвертирует XML файл и возвращает List<> с этими данными.
Есть класс, который делает манипуляции с изображением (в параметре метода путь к файлу берется из XML), и этот метод должен возвратить n-ное количество картинок (их очень много), так как одну большую обрезаю несколько раз. Можно ли сделать какой-нибудь метод в этом классе, чтобы фабрично создавать картинки?
И класс, который записывает эти картинки в базу данных.
Есть идея реализовать потоки (Threads) в момент деления картинки на части и записи их в БД.
Какие паттерны подходят больше под мою задачу? И объясните новичку, каким образом Вы, профессионалы, их выбираете?
Код уже написан, но его я бы назвал плохим кодом. Хочу научиться делать все правильно! Спасибо за понимание.
Ответ
Тема применимости паттернов проектирования тянет на весьма объёмную статью или даже книгу, уложить всё это в ответ на форуме невозможно. Но, раз уж вы спросили, вот несколько советов:
Если плохо даётся понимание паттернов проектирования - читайте Паттерны проектирования Фрименов, Сьерры и Бейтса. В этой книге очень доходчиво объясняются самые распространённые паттерны.
Почитайте классический труд на эту тему - Приемы объектно-ориентированного проектирования. Паттерны проектирования "Банды Четырёх". Эту книгу удобнее всего использовать как справочник, в котором описаны назначение, области применения, детали реализации и выгоды от использования конкретных паттернов.
Помимо классических паттернов, описанных в этих книгах, существуют паттерны, применяющиеся в конкретных областях: enterprise, параллельное программирование, веб-разработка и т. д. Существуют каталоги паттернов, в которых вы можете с ними ознакомиться.
Подумайте, точно ли вам нужны именно паттерны. Существует множество приёмов рефакторинга, позволяющих сделать код более чистым, красивым, читаемым, надёжным. Вы называете свой код плохим - задумайтесь, почемы вы так считаете. Много повторяющихся участков - выносите в отдельные методы. Много switch/case или многступенчатые if/else - выносите в отдельные классы. Метод в пару сотен строк - разбивайте на более короткие, делающие осмысленные и законченные куски работы. Об этом можно подробно почитать в книге Рефакторинг. Улучшение существующего кода Фаулера и компании, либо кратко - в этой шпаргалке
Ещё раз подумайте, нужны ли вам паттерны. Основная задача паттернов проектирования - делать код легко расширяемым и изменяемым. Подумайте, будет ли ваше приложение изменяться, если будет, то как и в каких местах. Если таких мест мало или нет, возможно, вы занимаетесь overengineering'ом, то есть бессмысленным усложнением кода.
Никогда не думайте "куда бы мне пристроить паттерн в моей программе". Такой подход - прямой путь к бессмысленному усложнению кода. Правильный ход мыслей - "в моей программе есть задача, которая хорошо решается при помощи паттерна". Для верности сверяйте формулировку вашей задачи с областями применимости паттерна в каталогах паттернов.
Грамотное проектирование приложений - вопрос опыта. Чтобы получить этот опыт - максимально критически рассматривайте свой код, ищите проблемы в дизайне, исправляйте их. Со временем вы начнёте чётко видеть "шероховатости" и потенциальные ошибки, а позже - предугатывать их на этапе проектирования.
Посоветовать что-либо более конкретное в рамках ответа сложно. Если у вас есть конкретные вопросы по проектированию приложений, не стесняйтесь их задавать. Вам наверняка помогут, если вы более подробно опишете свою задачу и приведёте свой вариант решения.
Комментариев нет:
Отправить комментарий