Показать сообщение отдельно
Старый 20.03.2017, 11:03   #64  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
Как и все подобные книги, авторы исходят из предположения, что код можно и нужно менять. Как я уже говорил в самом начале этой ветки, для dynamics продуктов это предположение неверное.
Так в аксапте нельзя менять сигнатуры методов, которые находятся в sys-слоях. Причем нельзя менять не только клиентам и партнерам. Нельзя менять и самому майкрософту, чтобы не потерять совместимость кода.
Стесняюсь спросить, все ли сотрудники Microsoft, причастные к разработке приложения Аксапты, в курсе, что нельзя так делать?
\Classes\RunBase\dialog в AX2009:
X++:
protected Object dialog(DialogRunbase _dialog = null, boolean _forceOnClient  = false)
\Classes\RunBase\dialog в AX2012:
X++:
protected Object dialog()
Удаление параметров метода, пусть и имеющих значения по умолчанию, ведь не считается "расширением"?..
Цитата:
Сообщение от mazzy Посмотреть сообщение
Можно только расширять сигнатуры. Что и делается параметрами по умолчанию.
С т.з. проекта, на котором есть кастомизации, добавление в сигнатуру метода на sys-слое нового параметра со значением по умолчанию точно так же приводит к потере совместимости кода - стандартного с кастомизациями. Потому что раньше в методе, скажем, 3-им по счету шел новый кастомный флажок boolean _skipЧегоНибудь = false, и код был допилен для передачи этого нового флажка. А теперь 3-им по счету идет новый стандартный флажок boolean _updateЧегоТоТам = true, и стандартный код местами явно передает значение этого нового стандартного флажка, и поди потом разберись, где в вызове 3-им параметром передается кастомный флажок, а где - стандартный...

По мне - умерла, так умерла: если надо существенно поменять сигнатуру стандартного метода, то надо это сделать - и по возможности использовать нормально типизированные параметры, а не безликие boolean-флажки, чтобы компилятор заметил несоответствия в вызывающем коде, а еще лучше, по-моему, вместо хрендцати параметров использовать data transfer objects (DTO), в которые можно добавлять новые свойства, не переделывая каждый раз сигнатуру вызываемого метода.

Извините, что не в тему, наболело.

Последний раз редактировалось gl00mie; 20.03.2017 в 11:34. Причина: typo