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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.06.2008, 15:55   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от macklakov Посмотреть сообщение
На форме же реализовать дисплей, который выберет один из n методов мапы и делегирует ему свое поведение.
Эх... Еще одну попытку сделаю, поддержку Alex_KD

Написано "который веберет"
Кто выберет? Пользователь? Как он выберет? По названию метода? А пользователю что-нибудь говорит название метода?

Т.е. на самом деле варианта два:
1. машиноориентированный: Заставлять пользователя выбирать из названий методов. Никаких хелпов, подсказок, описаний. Если пользователю что-то непонятно, то он должен лезть в код. Т.е. этот подход рассчитан на программиста, а не на пользователя.
2. человекоориентированный: сделать обертку над методами, чтобы дать описания, инструкции, хелпы, подсказки и прочую мутотень. Скорее всего, описания должны быть не на программистком матерном, а на пользовательском языке - языке предметной области.

Если все равно делается обертка, то поставленная в исходном сообщении задача НЕ ИМЕЕТ практического смысла.
В обертке все равно будет switch/case по заранее предусмотренным пунктам.

Да, конечно, если программист захочет добавить функционал, то в первом случае он должен добавить всего лишь один метод, а во втором - расширить обертку. Но это только кажется. Поскольку в первом случае "настраивать" систему сможет только програмист. Поэтому в первом случае программист делает никому не нужную работу - вместо того, чтобы просто запрограммировать выбор в коде, он делает никому не нужный интерфейс, которым сможет воспользоваться только он сам (и то только в первое время - потом забудет как это работает и все равно полезет в код по новой).
__________________
полезное на axForum, github, vk, coub.
Старый 03.06.2008, 19:12   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,657 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
Т.е. на самом деле варианта два:
1. машиноориентированный:
2. человекоориентированный:
Эх... Тоже не удержался

На самом деле, вариант один: программистский! Поскольку все-равно, рано или поздно, но программисту придется лезть в код, чтобы понять, "как оно тикает".

Всякие там "человекоориентированные" настройки - это кажущаяся автоматизация. Количество разных птичек и галочек в Axapte просто безумное. Ни один человек не в состоянии их всех упомнить. Вот и получается такое "гуано". Птичек уж больно много .

А если еще вспомнить про текучку кадров, изменение ТЗ в процессе разработки, постянные авралы и т.д. и т.п., то ... Нет, лучше не вспоминать

Собственно, написание "человекоориентированного" интерфейса задача сопоставимая с написанием подробной справки по данному функционалу. Сопоставимая по результату. Хотя "настоящие программисты", конечно, не пишут не то, что справку, а даже комментарии в коде

Я бы рассмотрел задачу написание ОДНОГО метода, но который возвращает разные значения в зависимости от переданных параметров. Ну, или метод-диспетчер (класс-диспетчер), который вызывает соответствующие методы через switch/case. А в качестве параметра использовать BaseEnum, который "человеческим" языком объясняет какой метод надо вызывать.

Чем проще функционал, тем тебе же потом будет легче. Кто же еще снова полезет ковырятся в этом коде
Старый 03.06.2008, 20:20   #3  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,129 / 916 (35) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Количество разных птичек и галочек в Axapte просто безумное. Ни один человек не в состоянии их всех упомнить.
Но ведь мета-программирование этой проблемы не решает
Сергей как раз говорит, что лучше захардкодить все реально существующие варианты, чем ваять очередное "универсальное решение" на все случаи жизни.

Мне недавно пришлось столкнуться с настройкой, в которой нужно выбрать класс, который будет производить рассчет. Ни консультанту ни программисту от таких решений не легче. Консультант все равно до конца не понимает, чем один класс от другого отличается. А разработчику совсем беда, дебажить рассчет, который эти классы использует, практически не реально.
И даже писатель стоящих скилзов не получил. Писать такие модификации не сложно, гордиться здесь нечем
__________________
Isn't it nice when things just work?
Старый 03.06.2008, 21:00   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,657 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от macklakov Посмотреть сообщение
Но ведь мета-программирование этой проблемы не решает Сергей как раз говорит, что лучше захардкодить все реально существующие варианты, чем ваять очередное "универсальное решение" на все случаи жизни.
Так я с этим и не спорю. Я "прицепился" к делению интерфейса на "машино-" и "человеко-" ориентированный в том понимании, как это описал Сергей. Как мне кажется, разница между ними в такой постановке весьма условная.
Старый 03.06.2008, 23:48   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Количество разных птичек и галочек в Axapte просто безумное.
Я и не говорил, что стандартная Аксапта - идеал человекоориентированного подхода. И российская, и международная.

Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Ни один человек не в состоянии их всех упомнить. Вот и получается такое "гуано". Птичек уж больно много
Мне кажется, что птичек мало.
Но они так по-дурацки расставлены

Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Собственно, написание "человекоориентированного" интерфейса задача сопоставимая с написанием подробной справки по данному функционалу.
А вот здесь категорически не согласен.
Написание человекоориентированного интерфейса - самая простая задача, если понять что же человек на самом деле хочет. Просто решайте ЕГО проблемы, а не свои собственные.


Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Так я с этим и не спорю. Я "прицепился" к делению интерфейса на "машино-" и "человеко-" ориентированный в том понимании, как это описал Сергей. Как мне кажется, разница между ними в такой постановке весьма условная.
Может быть, не спорю.
__________________
полезное на axForum, github, vk, coub.
Старый 04.06.2008, 09:09   #6  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от mazzy Посмотреть сообщение
Написание человекоориентированного интерфейса - самая простая задача, если понять что же человек на самом деле хочет. Просто решайте ЕГО проблемы, а не свои собственные.
А если человек хочет большую красную кнопку "СЧАСТЬЕ"?
Старый 03.06.2008, 23:50   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Так я с этим и не спорю. Я "прицепился" к делению интерфейса на "машино-" и "человеко-" ориентированный в том понимании, как это описал Сергей. Как мне кажется, разница между ними в такой постановке весьма условная.
Просто уже неделю приходится заниматься налоговым учетом в Аксапте...
Уровень желчи от этого резко поднимается...
__________________
полезное на axForum, github, vk, coub.
Старый 04.06.2008, 07:25   #8  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
885 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от macklakov Посмотреть сообщение
... лучше захардкодить все реально существующие варианты, чем ваять очередное "универсальное решение" на все случаи жизни...
N-угольные колеса вместо круглых ?
А потом при появлении нового варианта перетачивать на (N+1)-угольное, то бишь допрограммируя ?

Цитата:
Сообщение от macklakov Посмотреть сообщение
Мне недавно пришлось столкнуться с настройкой, в которой нужно выбрать класс, который будет производить рассчет. Ни консультанту ни программисту от таких решений не легче.
Простите, а чем это отличается функционально от выбора в какой-либо настройке некоего значения Enum'а, по которому в дальнейшем некий суперкласс породит своего потомка с отличным от других функционалом расчета? Программисту - труднее(отсутствует в момент написания проверка на типы и количество аргументов и нет подсветки синтаксиса), консультанту же должно быть по барабану.

Цитата:
Сообщение от macklakov Посмотреть сообщение
Консультант все равно до конца не понимает, чем один класс от другого отличается. А разработчику совсем беда, дебажить рассчет, который эти классы использует, практически не реально.
Проблемы консультанта, притом большие, если Enum в настройке он понимает, а класс - нет. Консультант без некоей доли общего программерского багажа по своей предметной части гораздо менее ценен, чем имеющий такой багаж.
Дебажить беда ? Дебажится аки "отче наш", единственная проблема навскидку видится в невозможности увидеть внутреннюю структуру объекта нашего класса, создаваемого через абстрактный объект, в области его жизни, однако при вызове любых методов оного - все как на ладони внутри этих методов. Ежели есть еще какие подводные камни - поведайте, буду весьма благодарен, особенно если на проекте в аттачменте приведете примеры таких проблем.

Цитата:
Сообщение от macklakov Посмотреть сообщение
И даже писатель стоящих скилзов не получил. Писать такие модификации не сложно, гордиться здесь нечем
Это, скорее всего, ему решать - поимел он полезный опыт или нет, гордиться ему или стыдиться. Скорее всего поимел, ибо как правило, мысль о подобных "универсализмах" приходит после того как вдоволь "наелся" рутинным допрограммированием и просыпается разумная лень оптимизаторская, что не есть плохо, но вот хорошо ли это - зависит от реализации задуманного.

Спорить можно долго, но давайте озадачимся вопросом - зачем они вообще были сделаны в системе, эти возможность и доступность вызова метода класса по имени для разработчика ? Атавизм это или возможность расширения ?
Вложения
Тип файла: xpo TestDictClass.xpo (2.4 Кб, 470 просмотров)
__________________
Мы летаем, кружимся, нагоняем ужасы ...

Последний раз редактировалось TasmanianDevil; 04.06.2008 в 07:33. Причина: XPO-шку забыл вклеить
Старый 04.06.2008, 09:34   #9  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Простите, а чем это отличается функционально от выбора в какой-либо настройке некоего значения Enum'а
1. Отсутствием контроля типов, правильности сигнатуры и т.п. в момент компиляции - все ошибки полезут в рантайме
2. Невозможностью использования перекрестных ссылок

В принципе, еще куча мелких проблем. Для знакомства со всеми ними достаточно плотно поработать с модулем "Расчеты с персоналом", функционалом счетчиков, например. Дебажить... Да, только и остается, что дебажить - втрое больше времени занимает, но ничего другого нам не оставили.
Старый 04.06.2008, 10:16   #10  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
885 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от Yprit Посмотреть сообщение
1. Отсутствием контроля типов, правильности сигнатуры и т.п. в момент компиляции - все ошибки полезут в рантайме
2. Невозможностью использования перекрестных ссылок
В вопросе ключевым словом было "функционально" и по сути своей больше к консультанту относилось. Именно функционально в плане работы логики - фактически ничем не отличается. Про программиста в принципе изначально ясно было.

Про перекрестные спасибо - совсем про них забыл что-то я.

В любом случае конечного вопроса не снимает - зачем сделана такая возможность ?
Я лично склоняюсь к варианту, что сие все-таки не атавизм, а при должном уровне исполнителей и контроля за ними - один из возможных путей построения всяких удобностей.
__________________
Мы летаем, кружимся, нагоняем ужасы ...

Последний раз редактировалось TasmanianDevil; 04.06.2008 в 10:28.
Старый 04.06.2008, 10:55   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
один из возможных путей построения всяких удобностей.
Удобностей для кого?
Можно привести примеры удобностей?
__________________
полезное на axForum, github, vk, coub.
Старый 04.06.2008, 10:54   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
N-угольные колеса вместо круглых ?
А потом при появлении нового варианта перетачивать на (N+1)-угольное, то бишь допрограммируя ?
Можно я повторюсь?
Цитата:
Сообщение от mazzy Посмотреть сообщение
Да, конечно, если программист захочет добавить функционал, то в первом случае он должен добавить всего лишь один метод, а во втором - расширить обертку. Но это только кажется. Поскольку в первом случае "настраивать" систему сможет только програмист. Поэтому в первом случае программист делает никому не нужную работу - вместо того, чтобы просто запрограммировать выбор в коде, он делает никому не нужный интерфейс, которым сможет воспользоваться только он сам (и то только в первое время - потом забудет как это работает и все равно полезет в код по новой).
__________________
полезное на axForum, github, vk, coub.
Старый 04.06.2008, 13:30   #13  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,129 / 916 (35) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Ежели есть еще какие подводные камни - поведайте, буду весьма благодарен, особенно если на проекте в аттачменте приведете примеры таких проблем.
1. Название вариантов enum-а несет в себе гораздо больше смысловой нагрузки, чем Id класса. В сложных расчетах этот параметр передается через 10-к методов, а иногда и контейнеров, в результате определить, что послужило причиной создания данного объекта и почему он являеся инстансом данного класса невозможно или очень сложно.
2. Т.к. перекрестные порушены, совсем не весело вносить существенные изменения в такой механизм. Т.к. механизм искуственно усложнен + не работают проверки сигнатур, любые изменения могут привести к неожиданным эффектам.
3. Если писатель допустил ошибку, найти ее и исправить крайне тяжело.
4. Рушится сама прадигма ООП. Такие конструкции даже на функциональное программирование не тянут, это больше похоже на использование GOTO.
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Программисту - труднее(отсутствует в момент написания проверка на типы и количество аргументов и нет подсветки синтаксиса), консультанту же должно быть по барабану.
О чем и речь. Консультанту и пользователю от этого пользы никакой, разве что подтормаживает немного сильнее. Зато разработчику масса проблем. Спрашивается, для чего создаются такие "универсальные решения"?
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
В любом случае конечного вопроса не снимает - зачем сделана такая возможность ?
Для создания инструментов разработчика. К примеру, если хочется модифицировать или создать свой механизм экспорта/импорта данных, без подобных механизмов было бы очень сложно.
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Скорее всего поимел, ибо как правило, мысль о подобных "универсализмах" приходит после того как вдоволь "наелся" рутинным допрограммированием и просыпается разумная лень оптимизаторская, что не есть плохо, но вот хорошо ли это - зависит от реализации задуманного.
Я не против обобщений и универсальности как таковых. Я против использования классов Dict... в бизнес-логике.
__________________
Isn't it nice when things just work?
За это сообщение автора поблагодарили: Yprit (1), petr (1).
Старый 04.06.2008, 14:54   #14  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
885 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от macklakov Посмотреть сообщение
Я не против обобщений и универсальности как таковых. Я против использования классов Dict... в бизнес-логике.
Посидел, подумал, заодно по вопросам mazzy поприкидывал варианты серъезного прикладного применения - наверное все же приведенная цитата по идеологии ближе к истине. Удобности только для сервисных и девелоперских вещей получается.
В бизнес-логике, действительно, по-большому счету игра свеч вряд ли будет стоить при использовании Dict-семейства ...
__________________
Мы летаем, кружимся, нагоняем ужасы ...

Последний раз редактировалось TasmanianDevil; 04.06.2008 в 14:56.
За это сообщение автора поблагодарили: macklakov (1).
Теги
display метод

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вызов display метода Ashir DAX: Программирование 4 08.12.2005 16:32
Не копирует из display-метода в буфер обмена akvi DAX: Программирование 6 08.12.2005 13:14
кэширование display метода macklakov DAX: Программирование 6 03.12.2005 14:58
Можно ли задать Caption для display-метода? Andronov DAX: Программирование 6 29.05.2003 14:18
edit и display методы Maxim Gorbunov DAX: База знаний и проекты 4 15.01.2002 12:58

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:04.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.