Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шустрый Программист vs ОО Архитектор, program to an interface? 
:(
    Опции темы
niasilil
Дата 16.7.2007, 06:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.6.2007
Где: USA

Репутация: 8
Всего: 9



Stampede в одной из соседних тем писал 
Цитата(Stampede)
...
А вообще в борьбе внутреннего Шустрого Программиста и ОО Архитектора внутри себя, программист должен доминировать безоговорочно, и если что - не стесняясь бить архитектора по рукам, чтоб не терял чувства реальности smile
...

А как же принцип "program to an interface"? 
Писать ли интерфейс для каждого класса или экономить время? Утрирую, конечно. Но как поступаете вы? 

Это сообщение отредактировал(а) niasilil - 16.7.2007, 06:36


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
Stampede
Дата 16.7.2007, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 24
Всего: 144



Тут на самом деле нет противоречия.

Во-первых, далеко не все подлежит "интерфейсению". Например, классы типа бинов, в которых больше данных, чем логики, вряд ли есть смысл дополнительно описывать интерфейсом.

Во-вторых, когда прототип некой функциональной сущности написан, проверен и работает, выделить эту функциональность и оформить ее в виде интерфейса, при нынешних-то средствах рефакторинго - дело ровно двух тыков мышкой.

В общем, не вижу, ради чего поднимать шум smile


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
y3u
Дата 16.7.2007, 07:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 5
Всего: 13



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


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
niasilil
Дата 16.7.2007, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.6.2007
Где: USA

Репутация: 8
Всего: 9



Цитата(Stampede @ 16.7.2007,  07:01)
Тут на самом деле нет противоречия.

Во-первых, далеко не все подлежит "интерфейсению". Например, классы типа бинов, в которых больше данных, чем логики, вряд ли есть смысл дополнительно описывать интерфейсом.

Во-вторых, когда прототип некой функциональной сущности написан, проверен и работает, выделить эту функциональность и оформить ее в виде интерфейса, при нынешних-то средствах рефакторинго - дело ровно двух тыков мышкой.

В общем, не вижу, ради чего поднимать шум smile

То ж не шум, просто сидим вот, полуношничаем. smile

Дело ж не в том как писать интерфейс (ясен пень что сначала класс, потом интерфейс по классу), а в том писать ли его во время написания классов? Вот положил все интерфейсы в одну папку, имплементейшнс в другую и строчи себе дальше. А можно написать программу, потом стукнуло по голове - надо новую функциональность - давай рефакторить, выделять интерфейсы. Чем дальше, тем сложнее рефакторить. 


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
powerOn
Дата 16.7.2007, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата(niasilil @  16.7.2007,  08:32 Найти цитируемый пост)
ясен пень что сначала класс, потом интерфейс по классу

это почему это? Я вот сначала интерфейсы катаю, потом только классы. Т.е. сначала предполагаю "что" должно быть, а потом "как" должно работать. Хотя может это только я так поступаю.  smile 

Цитата(y3u @  16.7.2007,  08:21 Найти цитируемый пост)
интерфейсы нужны тлоько на программных и логических стыках, когда надо соединить два функциональных или логических модуля через некий АПИ, чтобы, если что, АПИ остался, а реализация этого АПИ могла бы меняться. Т.е. если предполагается или есть большая вероятность изменения, мигрирования, логики или бизнеспроцесса с точки зрения алгоритмики или, если хотите, дальнейшей оптимизации кода, то надо делать интерфейс. ИМХО.
Не стоит подходить к этому процессу фанатично. Во сем должна быть мера. 

всецело согласен.

Это сообщение отредактировал(а) powerOn - 16.7.2007, 13:09


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
nornad
Дата 16.7.2007, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(niasilil @  16.7.2007,  10:32 Найти цитируемый пост)
А можно написать программу, потом стукнуло по голове - надо новую функциональность - давай рефакторить, выделять интерфейсы. Чем дальше, тем сложнее рефакторить.  

Потому и сложнее, что структура программы не была продумана изначально. Если бы первым делом думали, какие есть логические блоки, что и как должно взаимодействовать друг с другом и выделили бы это в интерфейсы - рефакторить стало бы явно проще.
Цитата(y3u @  16.7.2007,  10:21 Найти цитируемый пост)
Не стоит подходить к этому процессу фанатично. Во сем должна быть мера.

Присоединяюсь. smile


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
nornad
Дата 16.7.2007, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(niasilil @  16.7.2007,  10:32 Найти цитируемый пост)
А можно написать программу, потом стукнуло по голове - надо новую функциональность - давай рефакторить

Кстати, если "потом стукнуло" и нужна "новая функциональность" - это уже ен рефакторинг, а доработка. Рефакторинг подразумевает изменение внутреннего содержания кода без изменения функциональности.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
COVD
Дата 16.7.2007, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

Я вот сначала интерфейсы катаю, потом только классы. 


Так это вроде и есть реализация принципа "program to an interface". Наверное, только так и можно, если над проектом работают больше одного человека. А некоторые рекомендует начинать с тестов. У совершенства нет пределов. smile
 
PM MAIL   Вверх
niasilil
Дата 17.7.2007, 00:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.6.2007
Где: USA

Репутация: 8
Всего: 9



Что первично яйцо или курица зависит от того имею ли я представление о том что получится в результате. Если все продумано, то пишу интерфейс, если нет, то класс. Но это не так уж принципиально. Вопрос ведь был немного в другом. Вот в теме JSP, откуда я выдрал цитату, писали классы. Я бы не думая в паре мест поставил интерфеймы, так на всякий случай -  если вдруг расширить придется, и тут уже на тебе, все готовенько. Поставил фабрику и заменяй что хошь. И фраза про Шустрого программиста меня сильно удивила. В ней есть железная логика, но она немного отличается от другой логики построить заранее гибкое приложение. Вобщем, как в том случае с exceptions - кто то пытается обходиться совсем без них, кто то пользует направо и налево, лучше всего середина. Только вот хз где эта серидина для каждого из нас. 
Спасибо всем за обсуждение. 


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
AndreQ
Дата 19.7.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.1.2006

Репутация: нет
Всего: нет



Интересная тема, с которой у меня большие проблемы.

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

Но когда я недавно стал делать достаточно стандартное web-приложение - веб-интерфейс к веб-приложению,
принимаюшее тучу параметров, я понимаю что ни хрена не шарю в проектировании...

У меня просто глаза разбегаются - что должно оставаться в Java коде, что передавать в Velocity, как генерить JavaScript?
Где располагать параметры и констаны, которые должны быть доступны и для отдельных классов, и для Velocity- шаблона.
Когда пишу java классы, то всегда надо держать в голове: а как из JavaScript-а придут параметры, что делать если опция не
указана, и вобще, то ли я пишу если потом поступит новое требование и надо будет менять парсер, обработку параметрв...

Это просто мука, я такого ранее делал, я уже ненавижу веб-программирование.  За такую многослойность и за то что нужно
держать весь проект и каждую деталь в голове про сами Java классы, про формат параметров, про JAva-скрипт, про Velocity и
его контекст...

Блин, я не могу даже успокоится.  В одном месте меняется что-то - и можно с уверенностью сказать что проект не запуститься,
так как оно всё связано!

P.S. + постоянные приколы с HTML и браузерами...

PM MAIL   Вверх
AntonSaburov
Дата 19.7.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



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

Кроме этого можно разработать систему передачи параметров - мы решили,что нам удобнее XML достаточно простой структуры в котором прописаны пары 
имя_параметра - значение_параметра

Стандартный формирователь XML на клиенте и такой же стандартный парсер на сервере. Вообщем внешний вид серверную часть не волнует вообще. Бизнес логика опирается на DAO - используем Hibernate.

Вообщем достаточно все спокойно и понятно. Дргуой вопрос, что нужна нормальная дока и юнит-тесты. Сперва это замедляет разработку, но зато поддержка облегчается в разы
PM MAIL WWW ICQ   Вверх
AndreQ
Дата 19.7.2007, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.1.2006

Репутация: нет
Всего: нет



Цитата(AntonSaburov @  19.7.2007,  15:35 Найти цитируемый пост)
Стандартный формирователь XML на клиенте и такой же стандартный парсер на сервере.


Генерировать XML JavaScript-ом на странице?  И как его передавать?

Может я отстал от технологий??.. Но я знаю только про GET и POST, и как параметры формы передаються на сервер стандартным способом..



Это сообщение отредактировал(а) AndreQ - 19.7.2007, 17:48
PM MAIL   Вверх
AntonSaburov
Дата 19.7.2007, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Все правильно - POST и есть. Но перед этим в функцию передается массив пар имя-значение. Там формируется простая XML-строка

Код

<entries>
  <item>
    <name>...</name>
    <value>...</value>
  </item>
  <item>
    <name>...</name>
    <value>...</value>
  </item>
  <item>
    <name>...</name>
    <value>...</value>
  </item>
  <item>
    <name>...</name>
    <value>...</value>
  </item>
....
</entries>


И уже готовая строка идет на сервер - в какой-нибудь сервлет. Вообщем-то и все. Дальше XML обрабатыватеся и получается обычный Map, который уже поступает в команду - все.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0861 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.