Низкое качество stories

adda_
Уже с Приветом
Posts: 10708
Joined: 22 Jul 2006 20:19

Re: Низкое качество stories

Post by adda_ »

Мальчик-Одуванчик wrote:Вообще я бы не стал смешивать сущность "инвойс" и его представление.
То есть обошелся бы без термина invoice button или cancel button - они тут вообще не впёрлись.
Представление инвойса на экране десктопа или веб-формы вполне может генериться фабрикой классов опосредованно от прямого кодирования.
Знаете ли, если мы отвяжем имена контролов на десктопе от функциональности то получим интересную вещь. Вам приходит тикет - не работает кнопка Cancel на экране Invoice Search. А экранов у вас несколько сотен. И на каждом десятки кнопок. И вы начинаете искать.. И это самый простой пример.
Если у вас что то генерируется фабрикой классов, то тогда вообще вам надо серьезно проработать дизайн и названия каждого элемента, чтобы потом можно было как то найти откуда уши растут.
И самое главное - пропадает такая хорошая вещь, о которая существует в чистом коде. Чистый код можно читать как книгу, не задумываясь о имплементации и понимая что делает код.
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15475
Joined: 27 Sep 2007 22:53

Re: Низкое качество stories

Post by Мальчик-Одуванчик »

adda_ wrote:
Мальчик-Одуванчик wrote:Вообще я бы не стал смешивать сущность "инвойс" и его представление.
То есть обошелся бы без термина invoice button или cancel button - они тут вообще не впёрлись.
Представление инвойса на экране десктопа или веб-формы вполне может генериться фабрикой классов опосредованно от прямого кодирования.
Знаете ли, если мы отвяжем имена контролов на десктопе от функциональности то получим интересную вещь. Вам приходит тикет - не работает кнопка Cancel на экране Invoice Search. А экранов у вас несколько сотен. И на каждом десятки кнопок. И вы начинаете искать.. И это самый простой пример.
Если у вас что то генерируется фабрикой классов, то тогда вообще вам надо серьезно проработать дизайн и названия каждого элемента, чтобы потом можно было как то найти откуда уши растут.
И самое главное - пропадает такая хорошая вещь, о которая существует в чистом коде. Чистый код можно читать как книгу, не задумываясь о имплементации и понимая что делает код.
У того же инвойса может быть несколько представлений, где в процессе его жизненного цикла нажатие на кнопку Cancel влечет за собой различные действия. Поэтому жесткая привязка к форме лишь усугубит. Для облегчения тестирования как раз проще, вообще отвязать представление от сущности (эт ниче что я про MVC банальщину тут перетираю?) и программисту достаточно знать что было вызвано действие Cancel относительно инвойса, неважно из какой сотен форм и какая именно кнопка при этом была нажата.
Понятно что замечательное свойство "натягивания совы на глобус", то есть генерация подобных форм инвойса под конкретного заказчика ( с учетом особенностей его бизнес-логики) или ординарного пользователя (skin) гораздо проще осуществить именно таким способом.
User avatar
Prosche
Уже с Приветом
Posts: 7956
Joined: 08 Nov 2004 12:24
Location: GA

Re: Низкое качество stories

Post by Prosche »

adda_ wrote:
Prosche wrote:
И тут казалось бы ваш пример выиграл, но ваш код, adda_, тоже плох, вы даже сами объяснили почему выше, он требует бесконечного рефакторинга. Ничего страшно в button нет, камман сенс подсказывает, что если у нас в cancelInvoice определена кнопка, одна, она и отвечает за этот кансел. Писать километровые имена для этого совсем не обязательный. А еще вы своим примером сломали архитектуру. Ограничили функцию, которая ответственна за отмену инвойса только созданием кнопки, а если завтра она еще таймер будет создавать, который автоматом канселит инвойс? вы что будете делать, переименовывать ее в createCancelInvoiceButtonAndTimer? Я понимаю почему вам приходится рефакторить 100500 раз все.
Пример стенкина хороший вощем, а ваш плохой. 8)
Я с вами не согласен.
Во первых предполагается что это реальная система где множество элементов управления, а не один - два.
Во вторых в данном примере функция Создает кнопку и более ничего. Функция не канселит инвойс, канселить будет обработчик события который повешен на кнопке.
Третье - вы к сожалению не знакомы с одним из главных принципов написания хорошего кода - функция должна выполнять одну и только одну задачу, но делать это хорошо.
В реальной жизни функция не только созлала бы кнопку но и установила ее свойства, размер, цвет надписи, положение, подключила бы обработчики событий. Т.е. там было бы с десяток строчек кода. Добавлять туда что то совершенно излишне.
Если нам надо создавать таймер, то будет другая функция которая это сделает.
А все эти функции будут вызываться скажем из другой функции.

Code: Select all

  function createInvoiceControls ()
  {
      createInvoceCancelButton ();
      createInvoceSubmitButton ();
      ....
      createInvoceAutoProcessTimer();
      ...
      
  }
.
Обратите внимание, что когда я написал последний пример, то оказалось что для лучшей читаемости кода имеет смысл поменять название функции - с createCancelInvoceButton на createInvoiceCancelButton. Т.е перерефакторить код. Что занимает на самом деле меньше минуты. Но оно того стоит.
Если бы я писал этот код, то возможно через какое то время я бы еще его порефакторил, потому что имя функции createInvoceControls не совсем правильно отображает то что функция делает. А именно создает не только элементы управления но и таймеры, которые не явлеются контролами. Скорее всего я бы убрал оттуда создание таймера, и вынес его туда где мы будем создавать какую то логику реализованную на таймерах. Т.е. три - четыре цикла рефакторинга я бы сделал обязательно.

Вынужден сказать вам, что у меня сложилось впечатление, что вы не умеете писать код который легко читается и который можно поддерживать
Господи Иисусе, вместо простой абстракции, вы нагородили совершенно кошмарного монолитного кода, перемешали в кучу бизнес логику с графическим представлением... Вы наверно С-шник? Долго писали на процедурных языках?
adda_
Уже с Приветом
Posts: 10708
Joined: 22 Jul 2006 20:19

Re: Низкое качество stories

Post by adda_ »

Prosche wrote: Господи Иисусе, вместо простой абстракции, вы нагородили совершенно кошмарного монолитного кода, перемешали в кучу бизнес логику с графическим представлением... Вы наверно С-шник? Долго писали на процедурных языках?
Кроме обращения к Богу всуе, вы на самом деле ничего не сказали.
Я все же рекомендую вам прочитать эту вот книгу - http://ricardogeek.com/docs/clean_code.pdf" onclick="window.open(this.href);return false;
Это совершенно бесплатно. Возможно после этого вы начнете понимать то о чем я говорю.
User avatar
Prosche
Уже с Приветом
Posts: 7956
Joined: 08 Nov 2004 12:24
Location: GA

Re: Низкое качество stories

Post by Prosche »

adda_ wrote: Кроме обращения к Богу всуе, вы на самом деле ничего не сказали.
Я все же рекомендую вам прочитать эту вот книгу - http://ricardogeek.com/docs/clean_code.pdf" onclick="window.open(this.href);return false;
Это совершенно бесплатно. Возможно после этого вы начнете понимать то о чем я говорю.
Спасибо, я умею писать правильный код, у меня единственного в нашей компании статический анализатор не нашел не только ошибок, но даже и "вонючих строк". А вы все же зря с таким апломбом пытаетесь продвигать весьма посредственные идеи. Хотел бы я посмотреть на лицо Стенкина, когда на задание заимплементить cancelInvoice вы бы ему вернули изящный cancelInvoiceCreateButton. :lol:
Подумайте хотя бы, что вы будете делать, когда завтра вам скажут, что формы будут грузиться из JSon'a и как вы будете вот эту лабуду рефакторить, вместо того, чтобы просто фабрику подменить:

Code: Select all

function createInvoiceControls ()
  {
      createInvoceCancelButton ();
      createInvoceSubmitButton ();
      ....
      createInvoceAutoProcessTimer();
      ...
      
  }
  
User avatar
Komissar
Уже с Приветом
Posts: 64661
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Низкое качество stories

Post by Komissar »

Мальчики, не ссорьтесь. Вот придет наш Катит, Катит все рассудит.
User avatar
stenking
Уже с Приветом
Posts: 14407
Joined: 26 May 2006 02:39

Re: Низкое качество stories

Post by stenking »

Представляю как сейчас смеётся в бане АццкоМото не ожидавший что его простой абстрактный пример вызовёт такой батхёрт. :)
Бога нет.
Easbayguy
Уже с Приветом
Posts: 10599
Joined: 17 Jul 2003 22:11

Re: Низкое качество stories

Post by Easbayguy »

stenking wrote:Представляю как сейчас смеётся в бане АццкоМото не ожидавший что его простой абстрактный пример вызовёт такой батхёрт. :)
Чем бы дитя не тешилось!
Пх'нглуи мглв'нафх Ктулху Р'лайх угахнагл фхтагн
User avatar
fruit6
Уже с Приветом
Posts: 4205
Joined: 10 Jan 2004 01:22
Location: n-sk -> MD -> VA

Re: Низкое качество stories

Post by fruit6 »

Prosche wrote:
adda_ wrote: Кроме обращения к Богу всуе, вы на самом деле ничего не сказали.
Я все же рекомендую вам прочитать эту вот книгу - http://ricardogeek.com/docs/clean_code.pdf" onclick="window.open(this.href);return false;
Это совершенно бесплатно. Возможно после этого вы начнете понимать то о чем я говорю.
Спасибо, я умею писать правильный код, у меня единственного в нашей компании статический анализатор не нашел не только ошибок, но даже и "вонючих строк". А вы все же зря с таким апломбом пытаетесь продвигать весьма посредственные идеи. Хотел бы я посмотреть на лицо Стенкина, когда на задание заимплементить cancelInvoice вы бы ему вернули изящный cancelInvoiceCreateButton. :lol:
Подумайте хотя бы, что вы будете делать, когда завтра вам скажут, что формы будут грузиться из JSon'a и как вы будете вот эту лабуду рефакторить, вместо того, чтобы просто фабрику подменить:

Code: Select all

function createInvoiceControls ()
  {
      createInvoceCancelButton ();
      createInvoceSubmitButton ();
      ....
      createInvoceAutoProcessTimer();
      ...
      
  }
  
думаю код Адда легко поддерживать: всё захардкодено до предела!
а фабрики нужно планировать заранее, чтобы потом не рефакторить по пять раз за 20 минут.

боевая ничья между д'артаньянами
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15475
Joined: 27 Sep 2007 22:53

Re: Низкое качество stories

Post by Мальчик-Одуванчик »

adda_ wrote: Я все же рекомендую вам прочитать эту вот книгу - http://ricardogeek.com/docs/clean_code.pdf" onclick="window.open(this.href);return false;
Это совершенно бесплатно. Возможно после этого вы начнете понимать то о чем я говорю.
А в той книжке не написано, что нужно стараться избегать лишнней связности между обьектами?
А Вы именно городите это на пустом месте, завязывая бизнес-логику инвойса на его представление в виде формы с к кнопкой.
adda_
Уже с Приветом
Posts: 10708
Joined: 22 Jul 2006 20:19

Re: Низкое качество stories

Post by adda_ »

Мальчик-Одуванчик wrote:
adda_ wrote: Я все же рекомендую вам прочитать эту вот книгу - http://ricardogeek.com/docs/clean_code.pdf" onclick="window.open(this.href);return false;
Это совершенно бесплатно. Возможно после этого вы начнете понимать то о чем я говорю.
А в той книжке не написано, что нужно стараться избегать лишнней связности между обьектами?
А Вы именно городите это на пустом месте, завязывая бизнес-логику инвойса на его представление в виде формы с к кнопкой.
Я не понял где вы увидели здесь бизнес логику. Впрочем не буду с вами спорить, вы правы. Тем более что книжку вы так и не удосужились прочитать. Зачем вам какие то книжки? Вы и так все знаете.

Return to “Работа и Карьера в IT”