|
![]() |
#1 |
Участник
|
ну т.е. да. не знает пользователь ничего про "проблемы передачи файла с клиента на сервер". и про временное хранилище на azure не знает. да и не должен знать
пользователь ставит задачу по простому- дай мне выбрать файл и обработай его. т.е. идеально программа так и должна выглядеть- объявить переменную для отображения файла(с возможностью задать пару параметров(такие как расширение и прочее), написать код для обработки сейчас предлагается объявить класс для реализации стратегии временного хранения(указать кол-во минут после которой файл станет экспайред - кстати тут вообще треш- это прописывается в классе, и непонятно руководствуясь чем прикладной разработчик должен выбирать это время - во многих местах 5мин, в банковской выписке 60 мин ![]() ![]() ![]() т.е. какие-то бизнес функции подменяются техническими абстракциями а кстати есть ли название у такого подхода с передачей класса, это из какого-то существующего языка? т.е. код вида X++: Class1 c1 = new Class1(); c1.init(classstr(Class2)); Последний раз редактировалось trud; 13.06.2017 в 14:54. |
|
![]() |
#2 |
Banned
|
Цитата:
Похоже на Class.forName("fully qualified class name") когда используют рефлексию для регистрации именно конкретного класса в фабрике. Очень кстати близко к использованию атрибутов для наследования. Но какой бы смысл это не несло в других платформах - для AX это по сути чужие тараканы, абсолютно бессмысленные вне своих родных платформ. Все знают что такие целостность данных но похоже не понимают концепцию целостности кода. Что ведь раздражает программистов положивших на Аксапту лет по 10? Неуважение к Аксапте и ее правилам. В Java надо программировать как на Java, в X++ как в AX, в PHP - как положено в конкретном фрэймворке. А не как "общепринято". P.S. По ходу я сам далеко не священник Best Practices в AX то есть позволяю себе отступления от них. Но на базе опыта и осознанно. Основной критерий - практичность и понятность. Когда мне хочется писать как на Java - я тупо себя останавливаю. Так как это программистское бешенство если вне родной среды. Последний раз редактировалось ax_mct; 13.06.2017 в 17:50. |
|
|
За это сообщение автора поблагодарили: gl00mie (2). |
![]() |
#3 |
Участник
|
Цитата:
В С# передают type а не строчку. В X++ - tableNum, fieldNum, classStr, tableStr и т.д. то есть передаются целые числа и строки без контроля типов. |
|
![]() |
#4 |
Banned
|
Цитата:
Сообщение от belugin
![]() В основном в X++ - так как было принято решение, что можно объявить класс с таким же именем что и переменную, то класс не является именем объекта-метакласса, как в Питоне, например, а надо специально его объявлять с такой штукой. Да и тип у нее - строка
В С# передают type а не строчку. В X++ - tableNum, fieldNum, classStr, tableStr и т.д. то есть передаются целые числа и строки без контроля типов. X++ SysDictClass::newName(classstr("class name")); С# Assembly.CreateInstance("class name"); Java Class.forName("class name") А код типа Class1 c1 = new Class1(); c1.init(classstr(Class2)); если подумать то полная дичь, а не рефлексия. Дали конкретной обезьяне зачем-то знание паттернов. |
|
![]() |
#5 |
Участник
|
Цитата:
![]() |
|
![]() |
#6 |
Участник
|
Цитата:
Сообщение от belugin
![]() В основном в X++ - так как было принято решение, что можно объявить класс с таким же именем что и переменную, то класс не является именем объекта-метакласса, как в Питоне, например, а надо специально его объявлять с такой штукой. Да и тип у нее - строка
В С# передают type а не строчку. В X++ - tableNum, fieldNum, classStr, tableStr и т.д. то есть передаются целые числа и строки без контроля типов. Почему про них забыли и никто этим не пользуется?
__________________
// no comments |
|
![]() |
#7 |
Banned
|
Цитата:
Вот для них и выставляют в качестве интерфейса SysDictClass::newName(class name), чтобы потом стыдливо className2Id() для new(Id). И да, по-моему эти "атрибуты в расширении наследования классов" - по сути своей ни что иное как использование рефлексии. Патентованный хак заколоченной фабрики. |
|
|
За это сообщение автора поблагодарили: ta_and (3). |
![]() |
#8 |
Участник
|
Цитата:
В Ax2012 числовые идентификаторы стали специфичными для установки. Это сняло много проблем (например, не надо держать "сервер идентификаторов" чтобы их централизованно распределять). Но при этом оказалось, что их не стоит хранить на внешних носителях. Например при переносе бекапа с рабочей базы на тестовую результат может быть неработоспособен так как идентификаторы классов, каких-нибудь там форматов платежей в настройках не совпадает. Соответственно везде перевели хранение на имена. Дополниельно к этому перевели на строчки еще кучу мест - тут уж я не знаю зачем. Например типы в диалоге, вроде, никуда не сохраняются, а addField(typeNum(xxx) надо переводить на extendedTypeStr |
|
|
За это сообщение автора поблагодарили: ax_mct (5). |
![]() |
#9 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: ax_mct (5). |