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