AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.10.2009, 17:07   #21  
cerbo is offline
cerbo
Участник
 
25 / 11 (1) +
Регистрация: 02.10.2008
Цитата:
Сообщение от lev Посмотреть сообщение
по Вашему мнению, судя по посту, все кто вам посоветовал следовать Best Practice не правы (и это не один человек, заметьте), и только Ваше мнение правильное.
Они не правы потому, что не доказали, что то что я предложил хуже Best Practice и нужно использовать их. Этого никто не сделал.
Если мне рекомендуют какие-то правила (особено с приставками Best, Only и т.д.) я всегда оцениваю их своей головой и если мой опыт и интуиция не находят чего-то плохого или лучшего то только тогда я им следую.
А вы разве не так?
__________________
Dynamics AX 4.0.2501.122 SP2, kernel 4.0.2163.0, MS SQL 2005
За это сообщение автора поблагодарили: Eldar9x (4).
Старый 22.10.2009, 17:22   #22  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
понимаете, правила придумываются не просто так. Правила - это стандартизация определенных действий, понятных всем людям.
Если говорите про нашу программу, то правила были придуманы, что бы любой программист мог поддерживать код в программе. Если каждый будет писать по своему принципу, то будет полный огород, и поддержка будет мукой. Мне тоже некоторые принципы не понятны в аксапте, а вначале их было ещё больше, однако все равно стараюсь следовать правилам.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: blokva (1).
Старый 22.10.2009, 17:24   #23  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Вам даже компилятор "сказал", что это неBestPractices, попробуйте его убедить в обратном
Старый 22.10.2009, 17:26   #24  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Цитата:
Сообщение от cerbo Посмотреть сообщение
Они не правы потому, что не доказали, что то что я предложил хуже Best Practice и нужно использовать их. Этого никто не сделал.
Если мне рекомендуют какие-то правила (особено с приставками Best, Only и т.д.) я всегда оцениваю их своей головой и если мой опыт и интуиция не находят чего-то плохого или лучшего то только тогда я им следую.
А вы разве не так?
Все хорошо в разумных пределах!
Все эти "приставки" придуманы для того, чтобы каждый, повторяю КАЖДЫЙ смог разобраться. А Ваш подход - это подход типа "я крут немеряно, а после меня хоть трава не расти". Я не о том, что Вы не правы на 100%, я к тому что это подход индивидуалиста, а Ваши тексты потом люди со "стандартным" мышлением будут читать. Вы предлагаете им сначала изучить Вашу манеру программирования, а потом только выполнять свои прямые обязанности?

зы: уже опередили
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/

Последний раз редактировалось blokva; 22.10.2009 в 17:28. Причина: опередили
Старый 22.10.2009, 17:32   #25  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Знавал одного "архитектора", который как раз очень любил такие вещи и всегда надменно про себя говорил - этот не индусский код. По делам этот работничек сделал модуль, который состоял из четырех таблиц, которые содержали одинаковые по составу поля и при вставке данные прописывались по всем четырем таблицам. Красоты архтектуры не было, то есть вообще архитекруры не было. ИМХО надо делать все в меру.
Думаю что более "гикнуто" было вообще писать код в одну строчку
X++:
#localMacro. case Command::%1: return new Edit%1(); #endmacro switch (_cmd){ #(CopyAll) #(Copy) #(MoveAll) #(Move) } return null
Тогда точно враг не пройдет ну и свои тоже ))
__________________
Axapta book for developer
Старый 22.10.2009, 17:46   #26  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от cerbo Посмотреть сообщение
Они не правы потому, что не доказали, что то что я предложил хуже Best Practice и нужно использовать их. Этого никто не сделал.
А попробуйте доказать обратное. Что ваш подход лучше чем Best Practice. Пока Вы привели единственный аргумент: привычка

Цитата:
Сообщение от cerbo Посмотреть сообщение
Если мне рекомендуют какие-то правила (особено с приставками Best, Only и т.д.) я всегда оцениваю их своей головой и если мой опыт и интуиция не находят чего-то плохого или лучшего то только тогда я им следую.
А вы разве не так?
Так, конечно. Только, разве в данном случае Вы что-то оценивали? Вы просто всех "послали" не дав себе труда что-то там оценить.

Кстати говоря, опыт, приобретенный в одной среде программирования, надо чрезвычайно осторожно применять в другой. То, что в одной среде было хорошо и правильно, в другой может оказаться плохо и не правильно. Все зависит от внутренней логики соответствующей среды программирования.

Ну, давайте считать прооблемы Вашего подхода:

1. Для компилятора - это "не естесственная" конструкция. Приходится что-то мудрить, чтобы он пропустил.

Оператор Switch - естесственная конструкция. Никаких проблем с компилятором

2. Вообще-то, то, что Вы написали - это одна команда. Одна строка. Более-менее "читабельной" она выглядит лишь потому, что Вы ее "разбили на части" переносом строки. Т.е. "искусственно" привели ее в более "читабельный" вид. В "естесственном" виде разобраться во вложенных операторах крайне сложно.

Оператор Switch разбивает на части "естесственным" образом. Просто по самому своему синтаксису

3. Пока Вам требуется только одно действие по условию, но что Вы будете делать, если по каждому условию (или по одному из) потребуется выполнить два действия? Переписывать весь код?

Оператор Switch легко расширяется в случае множественности команд.
Старый 22.10.2009, 17:51   #27  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
- Вырезано Модератором: На личности не переходим -

Не. Никогда

Просто - мозг снесло у парня.

КМК

Последний раз редактировалось RVS; 22.10.2009 в 18:22.
Старый 22.10.2009, 18:09   #28  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Wamr Посмотреть сообщение
Вам даже компилятор "сказал", что это неBestPractices, попробуйте его убедить в обратном
Компилятор, скорее, сказал, что это не Common Practice
Старый 22.10.2009, 18:16   #29  
cerbo is offline
cerbo
Участник
 
25 / 11 (1) +
Регистрация: 02.10.2008
Я так вижу, что либо вы не читали либо не поняли моих объяснений.

Попробую более подробно разъяснить.
Смысл, то в том, что когда от выражения требуется вернуть значение, то:
  1. понятно его назначение- что должно быть результатом отражено явно
  2. исходя из понимания что вернется можно предположить как там что реализованно не заглядывая внутрь
  3. некоторые программисты следят за тем чтобы такие выражения просто вычисляли значение, но не меняли бы состояние объектов
Все это в сумме дает более понимаемый код ("читается"- это я не совсем точно написал).

То есть:
X++:
switch(value)
{
   case cond1 : action1
   case cond2 : action2
   default    : default_action
}
здесь надо разобраться как работает каждый action, плохо то, что такой стиль требует модификацию объектов внутри action'ов.

X++:
result=   cond1 ? result1
        : cond2 ? result2
        : default_result;
здесь будет хоть чуть-чуть но проще потому, что одним измерением стало меньше- известен тип результата который вернется

То же и с функциями. Если функция void, то есть основания для беспокойства- внутри нее 100% изменяется состояние объектов, а иначе она не была бы void. Если не void то немного проще потому, что наперед известно чем все закончится.
__________________
Dynamics AX 4.0.2501.122 SP2, kernel 4.0.2163.0, MS SQL 2005
Старый 22.10.2009, 18:16   #30  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Коллеги, как модератор прошу - поаккуратнее в выражениях.
__________________
Андрей.
Старый 22.10.2009, 18:30   #31  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от cerbo Посмотреть сообщение
Все это в сумме дает более понимаемый код
Есть замечательное правило, очень хорошо применимое к системе, в которой УЖЕ есть код. Называется оно "Пусть безобразно, зато однообразно".

Т.е. никто не оценит усилия по улучшению читабельности отдельно взятого кода, если в остальных 255 местах он написан по-другому.

Микрософт делает шаги в этом направлении - и только они имеют право это делать как ее владельцы.

Если представить себе, что весь код будет переписан с нуля - то да, конечно можно пересмотреть все и вся.

А в АХ надо учитывать, что это не язык программирования в полном понимании и его компилятор не отлаживался полноценно (Вы уже успели с этим столкнуться). Поэтому написание кода "по аналогии" связано еще с заведомым обходом "косяков" компилятора.

Так что "массовость" существующего кода - сильно давит на всех остальных разработчиков - в т.ч. из МС (даже они оказались не готовы отказаться от X++ в пользу того же C#)
__________________
Возможно сделать все. Вопрос времени
Старый 22.10.2009, 18:34   #32  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от cerbo Посмотреть сообщение
Если не void то немного проще потому, что наперед известно чем все закончится.
Это соображения понятны, но
1. Так не делают, поэтому инструментарием данный путь не поддерживается
2. Так не делают, поэтому средний человек, читающий ваш код вместо знакомого паттерна будет долго тупить
3. нету case condition, есть case value - а вам приходится каждый раз повторять _cmd ==
4. Лучше безобразно, но единообразно (via подполковник Схаба)

=> На практике, лучше switch

Последний раз редактировалось belugin; 22.10.2009 в 18:36.
Старый 22.10.2009, 18:54   #33  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
А еще зачастую код в Аксе читают консультанты, для того, чтобы разобраться в логике поведения, как консультант я также категорически против, а то как правильно сказал sukhanchik в стандарте я код привык читать как мне его MS предлагает, а тут я натыкаюсь на непонятную конструкцию, что опять же заставляет меня непродуктивно напрягаться!
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
Старый 22.10.2009, 19:05   #34  
Михаил Андреев is offline
Михаил Андреев
Участник
Компания АМАНД
Лучший по профессии 2009
 
1,296 / 239 (10) ++++++
Регистрация: 09.11.2001
Адрес: Химки, Московская область
Цитата:
Сообщение от belugin Посмотреть сообщение
Это соображения понятны, но
1. Так не делают, поэтому инструментарием данный путь не поддерживается
2. Так не делают, поэтому средний человек, читающий ваш код вместо знакомого паттерна будет долго тупить
3. нету case condition, есть case value - а вам приходится каждый раз повторять _cmd ==
4. Лучше безобразно, но единообразно (via подполковник Схаба)

=> На практике, лучше switch
Поддерживаю. Добавил бы:
5. При отладке не понять, в каком месте данное сравнение валится - для отладчика это один оператор.
6. Дополнительные возможности для ошибок при исправлении данного кода ввиду его непонятности программистам, соблюдающим best practice.
__________________
Михаил Андреев
https://www.amand.ru
Старый 22.10.2009, 20:34   #35  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Cool
Цитата:
Сообщение от Михаил Андреев Посмотреть сообщение
Поддерживаю. Добавил бы:
5. При отладке не понять, в каком месте данное сравнение валится - для отладчика это один оператор.
+1

Довелось видеть "елку" из таких тернарных операторов, причем там ловилась какая-то "фантомная" ошибка. Елка была размером с экран(т.е. раз в двадцать больше того, что обсуждается тут, причем там был не switch, а if). Неизвестный автор сего шедевра был неоднократно проклят Увы, для отладчика Аксы это действительно один оператор.

p.s. Для любителей писать хитрый код есть старый добрый Perl или новый модный Nemerle. Давайте не будем превращать Х++ в инструмент для упражнений в программировании. При всей простоте встроенного языка, спустя почти десять лет, а так же при том, что вышли несколько книг по разработке, пол форума в разделе "Программирование" завалено RTFM вопросами. Думайте о коллегах, не усложняйте жизнь им, и себе
Старый 22.10.2009, 22:57   #36  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Цитата:
Сообщение от cerbo Посмотреть сообщение
Они не правы потому, что не доказали, что то что я предложил
... сильное заявление...

ВАМ НИКТО - НИЧЕГО - НЕ ДОЛЖЕН.

С момента, когда Вы это осознаете - Вам легче будет жить.

Вы не поверите

Цитата:
Сообщение от cerbo Посмотреть сообщение
я всегда оцениваю их своей головой и если мой опыт и интуиция не находят чего-то плохого или лучшего то только тогда я им следую.
А вы разве не так?
... запятых не хватат... как обычно, впрочем...

Голову - включите, уже. Эти Best Practices-ы - кровью пишутся, вааще-та
__________________
Best Regards,
Roman
За это сообщение автора поблагодарили: Lemming (-2).
Старый 23.10.2009, 07:11   #37  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
мне интересно другое. Почему BestPractice довольно часто нарушается на системных слоях. Зачем следовать правилам, которые нарушаются их же авторами?

PS: switch, вообще говоря, и на самом деле, более читаем.
Старый 23.10.2009, 09:23   #38  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
мне интересно другое. Почему BestPractice довольно часто нарушается на системных слоях. Зачем следовать правилам, которые нарушаются их же авторами?
Просто Best Practice писался на основе опыта уже написанного кода (что логично). Соответственно, какие-то куски "соответствуют", а какие-то нет. Новый код писался ессно с соблюдением, а старый - не всегда переписывался - напоминаю, что версия 3.0 еще не Микрософтом была писана.

А когда писалась локализация, то во-первых - продукт еще не был микрософтовским, а во-вторых из-за скудности документации и отсутствия большого количества "проварившихся в этой системе" специалистов - писалось все "как казалось".
__________________
Возможно сделать все. Вопрос времени
Старый 23.10.2009, 10:13   #39  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Кстати. Не лучшим ли доказательством того, что так писать не следует является тот факт, что автор не может определить причину ошибки?
За это сообщение автора поблагодарили: RVS (1), lev (2).
Старый 23.10.2009, 10:50   #40  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Не тратьте время впустую...
1. Всё равно сделает по-своему (видно некому ему там по шапке дать)
2. Сколько несоответствий BP и "своего" кода можно встретить в современном, стандартном X++ (видно некому ему по шапке давать)
3. А главное - всё равно перейдут на C# и будет новый BP

Я уж как-то смирился с мыслью о том, что скоро DAX угробят: как со стороны MS так и со стороны внедренцев.
За это сообщение автора поблагодарили: Lemming (2).
Теги
best practice, x++, антипаттерн, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
почему на работает common.(fieldId)[idx] maze DAX: Программирование 3 31.08.2007 06:48
Тернарный оператор в select novic DAX: Программирование 7 10.07.2007 19:13
JOIN программно на форме не работает rohlenko DAX: Программирование 2 31.03.2005 15:41
Не работает Debugger Antidot DAX: Программирование 0 20.12.2004 13:53
CRM ABC, SWOT анализ Как это работает и работает ли вообще. ShadowFromXZone DAX: Функционал 16 02.03.2004 18:09

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:39.