04.06.2008, 09:34 | #21 |
Злыдни
|
Цитата:
2. Невозможностью использования перекрестных ссылок В принципе, еще куча мелких проблем. Для знакомства со всеми ними достаточно плотно поработать с модулем "Расчеты с персоналом", функционалом счетчиков, например. Дебажить... Да, только и остается, что дебажить - втрое больше времени занимает, но ничего другого нам не оставили. |
|
04.06.2008, 10:16 | #22 |
Мрачный тип
|
Цитата:
Про перекрестные спасибо - совсем про них забыл что-то я. В любом случае конечного вопроса не снимает - зачем сделана такая возможность ? Я лично склоняюсь к варианту, что сие все-таки не атавизм, а при должном уровне исполнителей и контроля за ними - один из возможных путей построения всяких удобностей.
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 04.06.2008 в 10:28. |
|
04.06.2008, 10:54 | #23 |
Участник
|
Цитата:
Цитата:
Сообщение от mazzy
Да, конечно, если программист захочет добавить функционал, то в первом случае он должен добавить всего лишь один метод, а во втором - расширить обертку. Но это только кажется. Поскольку в первом случае "настраивать" систему сможет только програмист. Поэтому в первом случае программист делает никому не нужную работу - вместо того, чтобы просто запрограммировать выбор в коде, он делает никому не нужный интерфейс, которым сможет воспользоваться только он сам (и то только в первое время - потом забудет как это работает и все равно полезет в код по новой).
|
|
04.06.2008, 10:55 | #24 |
Участник
|
Удобностей для кого?
Можно привести примеры удобностей? |
|
04.06.2008, 11:40 | #25 |
Участник
|
Имхо, нормальная задача. Как пример, универсальный генератор отчетов. Создается word - шаблон с закладками. В настройках системы этот шаблон указан. И есть функциоанальность настройки этого отчета - открывается форма вроде SysQueryForm, где в гриде показаны все закладки нашего шаблона, пользователь может скомпоновать запрос (стандартное добавление источников данных в SysQueryForm) и каждой зайкладке поставить в соответствие поле либо display метод, что особенно критично если принять во внимание невозможность создания больших и вервистых запросов в связке DAX + MSSQL. Предположим этот отчет вызывается из карточки сотрудника; пользователь запускает отчет, который из отфильтрованного по текущему сотруднику Query, тянет поля и методы источников данных в отчет.
В принципе, программировать все равно надо, но для добавления нового отчета надо всего лишь добавить в параметрах системы ссылку на его шаблон и сделать кнопку на форме. Но согласитесь, очень удобно то что пользователь может сам добавлять новые закладки в шаблон и без участия программиста связывать их с источниками данных системы, вносить изменения. PS. Мы такое реализовали на одном из проектов, как раз в модуле управления персоналом. |
|
04.06.2008, 12:27 | #26 |
Участник
|
Ваше описание основано на одном предположении
Вы всерьез уверены, что пользователь СМОЖЕТ скомпоновать запрос? Тем более в форме, подобной SysQueryForm? По-моему, вы привели замечательный пример... хм... не "человекоориентированного" подхода Да, я знаю, что такие пользователи есть. Но их единицы. Мы рассказываем о такой возможности SysQueryForm всем пользователям. Но пользуются этой фичей единицы. И то только если консультант создаст запрос и сохранит его в списке используемых запросов. Итак, повторюсь: вы делаете, делаете некую супер-фичу. Ваша супер-фича основывается на том, что пользователь будет формировать запрос. Вы всерьез уверены, что пользователь СМОЖЕТ скомпоновать запрос? |
|
04.06.2008, 12:56 | #27 |
Участник
|
Если вы склонны цепляться к словам, то я лишь уточню, что под пользователем системы я имелл ввиду человека, который будет настраивать этот отчет. Как правило у клиента есть человек, которой "на ты" с системой, будь то внутренний консультант или специалист поддержки, для которого задача модификации отчета сведется к минимальной настройке. Я лишь хотел показать ПРАКТИЧЕСКОЕ использование обозначеннного в названии данной ветки предмета и ни в коем случае не ввязываться в обсуждение "человеко\добавьте свое-ориентированных" подходов.
|
|
04.06.2008, 13:08 | #28 |
Участник
|
Я целпяюсь не к словам, а к смыслу.
Цитата:
Даже не спрашиваю, знает ли об этом "уточнении" заказчик... Цитата:
Цитата:
Сообщение от mazzy
Поэтому в первом случае программист делает никому не нужную работу - вместо того, чтобы просто запрограммировать выбор в коде, он делает никому не нужный интерфейс, которым сможет воспользоваться только он сам (и то только в первое время - потом забудет как это работает и все равно полезет в код по новой).
Цитата:
Именно это я и называю - вместо того, чтобы решать задачи пользователя, решаются чисто програмистские задачи. См. мой комментарий №4 здесь Значение display метода по его названию |
|
04.06.2008, 13:30 | #29 |
NavAx
|
Цитата:
2. Т.к. перекрестные порушены, совсем не весело вносить существенные изменения в такой механизм. Т.к. механизм искуственно усложнен + не работают проверки сигнатур, любые изменения могут привести к неожиданным эффектам. 3. Если писатель допустил ошибку, найти ее и исправить крайне тяжело. 4. Рушится сама прадигма ООП. Такие конструкции даже на функциональное программирование не тянут, это больше похоже на использование GOTO. Цитата:
Цитата:
Я не против обобщений и универсальности как таковых. Я против использования классов Dict... в бизнес-логике.
__________________
Isn't it nice when things just work? |
|
|
За это сообщение автора поблагодарили: Yprit (1), petr (1). |
04.06.2008, 14:07 | #30 |
Участник
|
2 Mazzy
Mazzy, интересно узнать ваше мнение по следующему вопросу: Допустим есть задача: импортировать в Axapta данные, которые присылают, ну скажем, поставщики, в виде текстовых файлов. В файлах находятся практически одни и те же данные, но формат у каждого свой. Унифицировать формат невозможно. Возможны 2 варианта решения данной задачи: 1. Программировать каждый отдельный формат отдельно с помощью Enums и switch/case 2. Создать универсальный механизм, позволяющий подстраиваться под каждый формат. Минус первого варианта - каждый раз, при добавлении новых поставщиков (форматов файлов) придется программировать Минус второго - пользователь (имеется в виду тот, кто занимается настройкой системы) должен иметь достаточную квалификацию, чтобы произвести настройку. Какой по вашему вариант предпочтительнее? |
|
04.06.2008, 14:54 | #31 |
Мрачный тип
|
Цитата:
В бизнес-логике, действительно, по-большому счету игра свеч вряд ли будет стоить при использовании Dict-семейства ...
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 04.06.2008 в 14:56. |
|
|
За это сообщение автора поблагодарили: macklakov (1). |
04.06.2008, 15:26 | #32 |
Administrator
|
Цитата:
Сообщение от Lucky13
2 Mazzy
Mazzy, интересно узнать ваше мнение по следующему вопросу: Допустим есть задача: импортировать в Axapta данные, которые присылают, ну скажем, поставщики, в виде текстовых файлов. В файлах находятся практически одни и те же данные, но формат у каждого свой. Унифицировать формат невозможно. Возможны 2 варианта решения данной задачи: 1. Программировать каждый отдельный формат отдельно с помощью Enums и switch/case 2. Создать универсальный механизм, позволяющий подстраиваться под каждый формат. Минус первого варианта - каждый раз, при добавлении новых поставщиков (форматов файлов) придется программировать Минус второго - пользователь (имеется в виду тот, кто занимается настройкой системы) должен иметь достаточную квалификацию, чтобы произвести настройку. Какой по вашему вариант предпочтительнее? И вот призадумался - над Вашим вопросом, отнесенным правда не ко мне. Вот что скажу. Возможно 2 варианта решения задачи: Вариант 1. Создаем некий конструктор импорта (та же группа определения в стандарте - только с меганастройками). Если можно обойтись стандартными группами определения - еще проще. Для каждого поставщика делаем свою группу определения, которая сохраняется в таблице. На выходе - мы имеем динамический список, который можно пополнить без программирования (лукап). В этом случае мы в принципе обходимся без программирования. Однако этот вариант актуален - если мы готовы потратить время на настройку (и возможное программное докручивание) всего этого безобразия Вариант 2. Форматы настолько принципиально разные - что конструктор, как общее решение - не потянет - т.е. придется писать класс. В таком случае, раз уж все равно придется работать разработчику - то модифицировать до кучи класс-со switch/case (возможно что он даже будет родительским) и добавить элемент енума - дело 5 минут. В этом случае мы тратим время на программирование и тестирование (плюс описание) этого варианта Есть пример в системе - когда для каждой страны существует своя проверка корректности введенного банковского счета (Классы Bank_*). Есть енум (тип банк счета) и класс Bank, который, разруливает этот енум и создает наследника. Есть и другой пример - импорт банковских платежей. Сделан аккурат через выбор в списке класса. Если честно - то название классов - меня, разработчика, который полез первый раз изучать просто функциональность - смутило. Я еще тогда с названиями стандартных классов не был особо знаком и выбирал название - "по логике", хотя проще для меня было бы выбрать из енума.
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 04.06.2008 в 15:29. |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
04.06.2008, 16:10 | #33 |
Участник
|
Цитата:
Сообщение от sukhanchik
Вариант 1. Создаем некий конструктор импорта (та же группа определения в стандарте - только с меганастройками). Если можно обойтись стандартными группами определения - еще проще. Для каждого поставщика делаем свою группу определения, которая сохраняется в таблице. На выходе - мы имеем динамический список, который можно пополнить без программирования (лукап). В этом случае мы в принципе обходимся без программирования.
Однако этот вариант актуален - если мы готовы потратить время на настройку (и возможное программное докручивание) всего этого безобразия Вариант 2. Форматы настолько принципиально разные - что конструктор, как общее решение - не потянет - т.е. придется писать класс. В таком случае, раз уж все равно придется работать разработчику - то модифицировать до кучи класс-со switch/case (возможно что он даже будет родительским) и добавить элемент енума - дело 5 минут. В этом случае мы тратим время на программирование и тестирование (плюс описание) этого варианта Получается, что при изменении значения параметра системы (новый поставщик) приходится менять ее структуру. По-моему неправильно "допиливать" систему при каждом появлении в ней новых данных. |
|
|
За это сообщение автора поблагодарили: axaLearner (1). |
04.06.2008, 16:40 | #34 |
Administrator
|
Цитата:
Сообщение от Lucky13
Форматы не приниципиально разные, но их много и они постоянно добавляются. Практически каждый поставщик имеет свой, удобный ему формат.
... Получается, что при изменении значения параметра системы (новый поставщик) приходится менять ее структуру. По-моему неправильно "допиливать" систему при каждом появлении в ней новых данных. Я же сказал про конструктор (вариант 1). В этом случае - ничего "допиливать" не надо. Все делается настройками. Только конструктор главное правильно заложить. Причем - опять-таки - в зависимости от ситуации - конструктор может выродиться в группы определения. Чем вариант с конструктором плох? Структура системы не меняется при изменения параметра системы. Но при добавлении поставщика - ведь производятся какие-то действия? (банковский счет заводится, условия оплаты и прочая информация). Этот перечень расширяется на добавление группы определения (или ее аналога) У Вас другое мнение?
__________________
Возможно сделать все. Вопрос времени |
|
04.06.2008, 16:56 | #35 |
Участник
|
Цитата:
Сообщение от Lucky13
Допустим есть задача: импортировать в Axapta данные, которые присылают, ну скажем, поставщики, в виде текстовых файлов. В файлах находятся практически одни и те же данные, но формат у каждого свой. Унифицировать формат невозможно.
Возможны 2 варианта решения данной задачи: 1. Программировать каждый отдельный формат отдельно с помощью Enums и switch/case 2. Создать универсальный механизм, позволяющий подстраиваться под каждый формат. Для начала следует определится, являются ли Ваши пользователи достаточно продвинутыми, чтобы подстроится под нужный формат или процесс подстройки все-равно будет делать программист. Ну, разве что во втором случае при помощи некоего им же созданного механизма. Если пользователи достаточно продвинутые, то они смогут сам сконвертировать присланный текстовый файл под единый общий формат импорта. Не прибегая для этого ни к некоему механизму, ни к помощи программиста. В крайнем случае, просто вручную заведя нужную информацию. А если все будет делать программист, то какая ему разница? Все-равно ему придется перестать программировать и заниматься только и исключительно постоянной подгонкой присылаемых файлов. В принципе, есть еще вариант. Заставить поставщиков присылать файлы в определенном формате. Но тут вопрос в том, кто больше заинтересован в этой информации. Вы или поставщик. Строго говоря, разговоры "вообще" обычно ничем хорошим не кончаются. Нужно знать конкретную ситуацию. Слишком много "но" и "если" влияющих на выбор того или иного способа решения. |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
04.06.2008, 17:10 | #36 |
Участник
|
Цитата:
Сообщение от sukhanchik
Чем вариант с конструктором плох? Структура системы не меняется при изменения параметра системы.
Но при добавлении поставщика - ведь производятся какие-то действия? (банковский счет заводится, условия оплаты и прочая информация). Этот перечень расширяется на добавление группы определения (или ее аналога) У Вас другое мнение? Цитата:
Сообщение от mazzy
Ваше описание основано на одном предположении
Вы всерьез уверены, что пользователь СМОЖЕТ скомпоновать запрос? Тем более в форме, подобной SysQueryForm? По-моему, вы привели замечательный пример... хм... не "человекоориентированного" подхода Да, я знаю, что такие пользователи есть. Но их единицы. Мы рассказываем о такой возможности SysQueryForm всем пользователям. Но пользуются этой фичей единицы. И то только если консультант создаст запрос и сохранит его в списке используемых запросов. Итак, повторюсь: вы делаете, делаете некую супер-фичу. Ваша супер-фича основывается на том, что пользователь будет формировать запрос. Вы всерьез уверены, что пользователь СМОЖЕТ скомпоновать запрос? |
|
04.06.2008, 17:25 | #37 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Можно я тоже встряну?
Для начала следует определится, являются ли Ваши пользователи достаточно продвинутыми, чтобы подстроится под нужный формат или процесс подстройки все-равно будет делать программист. Ну, разве что во втором случае при помощи некоего им же созданного механизма. Цитата:
Сообщение от Владимир Максимов
Если пользователи достаточно продвинутые, то они смогут сам сконвертировать присланный текстовый файл под единый общий формат импорта. Не прибегая для этого ни к некоему механизму, ни к помощи программиста. В крайнем случае, просто вручную заведя нужную информацию.
А если все будет делать программист, то какая ему разница? Все-равно ему придется перестать программировать и заниматься только и исключительно постоянной подгонкой присылаемых файлов. Цитата:
Сообщение от Владимир Максимов
В принципе, есть еще вариант. Заставить поставщиков присылать файлы в определенном формате. Но тут вопрос в том, кто больше заинтересован в этой информации. Вы или поставщик.
Строго говоря, разговоры "вообще" обычно ничем хорошим не кончаются. Нужно знать конкретную ситуацию. Слишком много "но" и "если" влияющих на выбор того или иного способа решения. |
|
04.06.2008, 18:24 | #38 |
Участник
|
Цитата:
Цитата:
Сообщение от Lucky13
Mazzy, интересно узнать ваше мнение по следующему вопросу:
Допустим есть задача: импортировать в Axapta данные, которые присылают, ну скажем, поставщики, в виде текстовых файлов. В файлах находятся практически одни и те же данные, но формат у каждого свой. Унифицировать формат невозможно. Я только хотелось бы обратить ваше внимание, что требования: "импортировать в Axapta данные", "Унифицировать формат невозможно" взаимоисключающие. Либо вы хоть как-то унифицируете (возможно не на 100%), либо каждый раз будете изобретать отдельный механизм. Первые шаги по унификации вы уже сделали, оговорившись, что формат являтся текстовым. Идите дальше. Определите обязательные поля (ИНН?, телефоны? адреса? наименование? артикул? артикул поставщика или ваш? Количество? Единицы измерения?) Далее определите отношения 1:1, 1:N, N:N между полями. Далее определите правила валидации. Правила, которые возвращают Истина, если данные валидны. Видите, как много унифицировали? Далее начинается положение полей в файле, в строке. Относительное и/или абсолютное. Скорее всего, под "унифицировать формат невозможно" вы имели в виду всего лишь то, что поля могут иметь разное положение. Но все равно вы ошибаетесь. Разберитесь и поймите как эти данные читают ЛЮДИ на вашем предприятии. Ведь они читают, не так ли? Т.е. формат не может быть абсолютно произвольным? Все равно существуют какие-то инварианты (извините за использование термина). Так вот. Первая задача выделить инварианты и дать возможность пользователям настраивать переменные параметры на том языке, на котором говорят пользователи. Но ни в коем случае не делать настройки на языке display-методов или callObject'ов и другой программисткой фигни. Если же вы сознательно выбираете машиноориентированный подход, то не мучайтесь и юзайте штатный механизм импорта из текстовых файлов, как здесь уже посоветовали. http://axapta.mazzy.ru/lib/import/ Цитата:
Возможны 2 варианта решения данной задачи:
1. Программировать каждый отдельный формат отдельно с помощью Enums и switch/case 2. Создать универсальный механизм, позволяющий подстраиваться под каждый формат. 3. юзать импорт 4. переносить данные макросами http://axapta.mazzy.ru/lib/easyimport/ 5. не импортировать, а заставить набивать в вашу систему ваших пользователей 6. не импортировать, а заставить набивать в вашу систему ваших поставщиков 7. не импортировать, а сделать сервис и опубликовать его, чтобы поставщики сами программировали общение с вашим сервисом 8. другие варианты Главное - не зашоривать сознание Цитата:
Минус первого варианта - каждый раз, при добавлении новых поставщиков (форматов файлов) придется программировать
Минус второго - пользователь (имеется в виду тот, кто занимается настройкой системы) должен иметь достаточную квалификацию, чтобы произвести настройку. Какой по вашему вариант предпочтительнее? Цитата:
Сообщение от sukhanchik
Вариант 1. Создаем некий конструктор импорта (та же группа определения в стандарте - только с меганастройками). Если можно обойтись стандартными группами определения - еще проще. Для каждого поставщика делаем свою группу определения, которая сохраняется в таблице. На выходе - мы имеем динамический список, который можно пополнить без программирования (лукап). В этом случае мы в принципе обходимся без программирования.
Однако этот вариант актуален - если мы готовы потратить время на настройку (и возможное программное докручивание) всего этого безобразия Причем настраивать все равно будет разработчик, поскольку для нормального импорта надо знать структуру базы Цитата:
Вариант 2. Форматы настолько принципиально разные - что конструктор, как общее решение - не потянет - т.е. придется писать класс. В таком случае, раз уж все равно придется работать разработчику - то модифицировать до кучи класс-со switch/case (возможно что он даже будет родительским) и добавить элемент енума - дело 5 минут.
В этом случае мы тратим время на программирование и тестирование (плюс описание) этого варианта Цитата:
Сообщение от Lucky13
Форматы не приниципиально разные, но их много и они постоянно добавляются. Практически каждый поставщик имеет свой, удобный ему формат. Если воспользоваться вариантом, где требуется программирование, то получим ситуацию, когда периодически будут приходить пользователи с просьбой "У нас появился новый поставщик, добавьте, пожалуйста, нам новый формат".
Цитата:
Цитата:
Появляется не новый поставщик, а новый формат данных. Нужен новый драйвер. Тут самое главное - без фанатизма. Человекоориентированный подход подразумевает, что программа ждет от него данных на понятном ему языке, что человек понимает что надо делать. Поэтому некоторые понятные человеку параметры вполне можно делать параметрами. Например, "начать импорт со строки с номером", "параметр начинается в колонке с номером". Но ни в коем случае нельзя давать человеку выбрать один из display-методов, ни в коем случае нельзя делать бесконечное число галочек и т.п. Цитата:
Как только появляется слово ВСЕ - жди логической ошибки. Цитата:
Цитата:
Цитата:
Цитата:
Вопрос так, не стоит по-моему. Вопрос стоит так: если вы сознательно выбрали машиноориентированный подход, то не надо рассчитывать, что настравать будут пользователи. Будете сами настраивать. Если же вы делаете инструмент для пользователей, то не надо выдумывать программистские задачи. Надо решать проблемы пользователей. Как сказал macklakov: "Я не против обобщений и универсальности как таковых. Я против использования классов Dict... в бизнес-логике." Цитата:
Ошибка проектирования находится в предположении, что форматы уникальны и их нельзя унифицировать. Такого не бывает. Ведь пользователи их как-то читают |
|
05.06.2008, 10:09 | #39 |
Участник
|
Я имел в виду что невозможно сделать так, чтобы форматы были на 100% одинаковыми. Во всем остальном согласен.
Цитата:
Сообщение от mazzy
Далее начинается положение полей в файле, в строке. Относительное и/или абсолютное. Скорее всего, под "унифицировать формат невозможно" вы имели в виду всего лишь то, что поля могут иметь разное положение. Но все равно вы ошибаетесь. Разберитесь и поймите как эти данные читают ЛЮДИ на вашем предприятии. Ведь они читают, не так ли? Т.е. формат не может быть абсолютно произвольным? Все равно существуют какие-то инварианты (извините за использование термина).
Цитата:
Цитата:
Цитата:
Сообщение от mazzy;
Вы всерьез уверены, что пользователь СМОЖЕТ скомпоновать запрос? Тем более в форме, подобной SysQueryForm?
По-моему, вы привели замечательный пример... хм... не "человекоориентированного" подхода Последний раз редактировалось Lucky13; 05.06.2008 в 10:12. |
|
05.06.2008, 10:13 | #40 |
Участник
|
|
|