Страницы

Поиск по вопросам

четверг, 12 декабря 2019 г.

Правильное проектирование проекта на Java

#java #шаблоны_проектирования


Доброго времени суток !

Хочу научиться правильно проектировать свои приложения. Чтобы код был читаемым для
других программистов. Знаю, что существуют паттерны проектирования, но я не умею ими
пользоваться.

Хочу, чтобы вы помогли понять, как мне лучше спроектировать данную задачу:


Есть класс, который конвертирует XML файл и возвращает List<> с этими данными. 
Есть класс, который делает манипуляции с изображением (в параметре метода путь к
файлу берется из XML), и этот метод должен возвратить n-ное количество картинок (их
очень много), так как одну большую обрезаю несколько раз. Можно ли сделать какой-нибудь
метод в этом классе, чтобы фабрично создавать картинки?
И класс, который записывает эти картинки в базу данных.


Есть идея реализовать потоки (Threads) в момент деления картинки на части и записи
их в БД.

Какие паттерны подходят больше под мою задачу? И объясните новичку, каким образом
Вы, профессионалы, их выбираете?
Код уже написан, но его я бы назвал плохим кодом. Хочу научиться делать все правильно!
Спасибо за понимание.
    


Ответы

Ответ 1



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

Ответ 2



На мой взгляд целью должен быть не столько читаемый код (хотя это не мало важно и идет рука об руку с последующим утверждением), а более дешевый код. Под дешевым - я подразумеваю такой код, который дешевле изменять. Любое приложение меняется со временем, добавляются новые требования, существующие требования меняются и т.п. Программистам приходится менять программу, чтобы она соотвтествовала этим изменениям. Чем быстрее и удобнее эти изменения можно будет внести, чем меньше проблем и ошибок это вызовет - тем дешевле они будут. А чем дешевле - тем конкурентоспособнее. Все эти паттерны и подходы и т.п., ИМХО, как раз направлены на то, чтобы помочь сделать код более дешевым. Поэтому, в процессе разработки, старайтесь оценивать то, что получается на предмет того, как Вам это потом, возможно, придется менять. А паттерны - они просто покажут Вам примеры того, как другие разработчики решают различные проблемы (и с ними стоит познакомится), но они не дадут Вам панацею от всех бед.

Комментариев нет:

Отправить комментарий