|
![]() |
#1 |
NavAx
|
Цитата:
Сообщение от Андрей К.
![]() Доброго времени суток.
Стоит задача: из списка дисплейметодов определенной таблицы(список уже реализован) необходимо выбрать интересующий метод (хранится лишь его название) и выводить значение этого дисплейметода у текущего курсора. может кто-тоо сталкивался с подобным и подскажет, как, зная имя метода, достать его значение ? заранее благодарен Я бы реализовал это так: Отмапить таблицы и реализовать на мапе n методов, которые делегируют поведение соответствующим методам таблиц. На форме показывать мап. На форме же реализовать дисплей, который выберет один из n методов мапы и делегирует ему свое поведение. В чем приемущество: легко дебажить и код читаемый т.к. нет метапрограммирования. Подозреваю, что и работать будет быстрее P.S. А еще лучше вывести все n методов в грид и просто управлять видимостью
__________________
Isn't it nice when things just work? |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#2 |
Участник
|
Цитата:
Написано "который веберет" Кто выберет? Пользователь? Как он выберет? По названию метода? А пользователю что-нибудь говорит название метода? ![]() Т.е. на самом деле варианта два: 1. машиноориентированный: Заставлять пользователя выбирать из названий методов. Никаких хелпов, подсказок, описаний. Если пользователю что-то непонятно, то он должен лезть в код. Т.е. этот подход рассчитан на программиста, а не на пользователя. 2. человекоориентированный: сделать обертку над методами, чтобы дать описания, инструкции, хелпы, подсказки и прочую мутотень. Скорее всего, описания должны быть не на программистком матерном, а на пользовательском языке - языке предметной области. Если все равно делается обертка, то поставленная в исходном сообщении задача НЕ ИМЕЕТ практического смысла. ![]() В обертке все равно будет switch/case по заранее предусмотренным пунктам. Да, конечно, если программист захочет добавить функционал, то в первом случае он должен добавить всего лишь один метод, а во втором - расширить обертку. Но это только кажется. Поскольку в первом случае "настраивать" систему сможет только програмист. Поэтому в первом случае программист делает никому не нужную работу - вместо того, чтобы просто запрограммировать выбор в коде, он делает никому не нужный интерфейс, которым сможет воспользоваться только он сам (и то только в первое время - потом забудет как это работает и все равно полезет в код по новой). |
|
![]() |
#3 |
Участник
|
Цитата:
![]() На самом деле, вариант один: программистский! Поскольку все-равно, рано или поздно, но программисту придется лезть в код, чтобы понять, "как оно тикает". Всякие там "человекоориентированные" настройки - это кажущаяся автоматизация. Количество разных птичек и галочек в Axapte просто безумное. Ни один человек не в состоянии их всех упомнить. Вот и получается такое "гуано". Птичек уж больно много ![]() А если еще вспомнить про текучку кадров, изменение ТЗ в процессе разработки, постянные авралы и т.д. и т.п., то ... Нет, лучше не вспоминать ![]() Собственно, написание "человекоориентированного" интерфейса задача сопоставимая с написанием подробной справки по данному функционалу. Сопоставимая по результату. Хотя "настоящие программисты", конечно, не пишут не то, что справку, а даже комментарии в коде ![]() Я бы рассмотрел задачу написание ОДНОГО метода, но который возвращает разные значения в зависимости от переданных параметров. Ну, или метод-диспетчер (класс-диспетчер), который вызывает соответствующие методы через switch/case. А в качестве параметра использовать BaseEnum, который "человеческим" языком объясняет какой метод надо вызывать. Чем проще функционал, тем тебе же потом будет легче. Кто же еще снова полезет ковырятся в этом коде ![]() |
|
![]() |
#4 |
NavAx
|
Цитата:
![]() Сергей как раз говорит, что лучше захардкодить все реально существующие варианты, чем ваять очередное "универсальное решение" на все случаи жизни. Мне недавно пришлось столкнуться с настройкой, в которой нужно выбрать класс, который будет производить рассчет. Ни консультанту ни программисту от таких решений не легче. Консультант все равно до конца не понимает, чем один класс от другого отличается. А разработчику совсем беда, дебажить рассчет, который эти классы использует, практически не реально. И даже писатель стоящих скилзов не получил. Писать такие модификации не сложно, гордиться здесь нечем
__________________
Isn't it nice when things just work? |
|
![]() |
#5 |
Участник
|
Так я с этим и не спорю. Я "прицепился" к делению интерфейса на "машино-" и "человеко-" ориентированный в том понимании, как это описал Сергей. Как мне кажется, разница между ними в такой постановке весьма условная.
|
|
![]() |
#6 |
Участник
|
Я и не говорил, что стандартная Аксапта - идеал человекоориентированного подхода. И российская, и международная.
Цитата:
Но они так по-дурацки расставлены ![]() Цитата:
Написание человекоориентированного интерфейса - самая простая задача, если понять что же человек на самом деле хочет. Просто решайте ЕГО проблемы, а не свои собственные. Может быть, не спорю. |
|
![]() |
#7 |
Участник
|
|
|
![]() |
#8 |
Участник
|
Цитата:
Уровень желчи от этого резко поднимается... ![]() |
|
![]() |
#9 |
Мрачный тип
|
Цитата:
![]() А потом при появлении нового варианта перетачивать на (N+1)-угольное, то бишь допрограммируя ? Цитата:
Цитата:
Дебажить беда ? Дебажится аки "отче наш", единственная проблема навскидку видится в невозможности увидеть внутреннюю структуру объекта нашего класса, создаваемого через абстрактный объект, в области его жизни, однако при вызове любых методов оного - все как на ладони внутри этих методов. Ежели есть еще какие подводные камни - поведайте, буду весьма благодарен, особенно если на проекте в аттачменте приведете примеры таких проблем. Цитата:
Спорить можно долго, но давайте озадачимся вопросом - зачем они вообще были сделаны в системе, эти возможность и доступность вызова метода класса по имени для разработчика ? Атавизм это или возможность расширения ?
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 04.06.2008 в 07:33. Причина: XPO-шку забыл вклеить |
|
![]() |
#10 |
Злыдни
|
Цитата:
2. Невозможностью использования перекрестных ссылок В принципе, еще куча мелких проблем. Для знакомства со всеми ними достаточно плотно поработать с модулем "Расчеты с персоналом", функционалом счетчиков, например. Дебажить... Да, только и остается, что дебажить - втрое больше времени занимает, но ничего другого нам не оставили. ![]() |
|
![]() |
#11 |
Мрачный тип
|
Цитата:
Про перекрестные спасибо - совсем про них забыл что-то я. В любом случае конечного вопроса не снимает - зачем сделана такая возможность ? Я лично склоняюсь к варианту, что сие все-таки не атавизм, а при должном уровне исполнителей и контроля за ними - один из возможных путей построения всяких удобностей.
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 04.06.2008 в 10:28. |
|
![]() |
#12 |
Участник
|
Цитата:
Цитата:
Сообщение от mazzy
![]() Да, конечно, если программист захочет добавить функционал, то в первом случае он должен добавить всего лишь один метод, а во втором - расширить обертку. Но это только кажется. Поскольку в первом случае "настраивать" систему сможет только програмист. Поэтому в первом случае программист делает никому не нужную работу - вместо того, чтобы просто запрограммировать выбор в коде, он делает никому не нужный интерфейс, которым сможет воспользоваться только он сам (и то только в первое время - потом забудет как это работает и все равно полезет в код по новой).
|
|
![]() |
#13 |
NavAx
|
Цитата:
2. Т.к. перекрестные порушены, совсем не весело вносить существенные изменения в такой механизм. Т.к. механизм искуственно усложнен + не работают проверки сигнатур, любые изменения могут привести к неожиданным эффектам. 3. Если писатель допустил ошибку, найти ее и исправить крайне тяжело. 4. Рушится сама прадигма ООП. Такие конструкции даже на функциональное программирование не тянут, это больше похоже на использование GOTO. Цитата:
Цитата:
Я не против обобщений и универсальности как таковых. Я против использования классов Dict... в бизнес-логике.
__________________
Isn't it nice when things just work? |
|
|
За это сообщение автора поблагодарили: Yprit (1), petr (1). |
![]() |
#14 |
Мрачный тип
|
Цитата:
В бизнес-логике, действительно, по-большому счету игра свеч вряд ли будет стоить при использовании Dict-семейства ...
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 04.06.2008 в 14:56. |
|
|
За это сообщение автора поблагодарили: macklakov (1). |
![]() |
#15 |
Участник
|
Если на проекте сознательно выбирается машиноориентированный программистский подход, то я бы предпочел такое решение, нежели динамическое программирование (DictTable-CallObject) без проверок и с постоянной угрозой runtime-ошибок.
|
|
Теги |
display метод |
|
![]() |
||||
Тема | Ответов | |||
Вызов display метода | 4 | |||
Не копирует из display-метода в буфер обмена | 6 | |||
кэширование display метода | 6 | |||
Можно ли задать Caption для display-метода? | 6 | |||
edit и display методы | 4 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|