Цитата:
Сообщение от
Владимир Максимов
Если разработка происходит как бы "сама по себе". Не успел сказать "А", а среда уже сделала за тебя "Б", "В" и "Г". Значит, программирование идет в согласии с базовой идеей среды разработки. Ты "угадал" то, как "правильно" надо программировать в данной конкретной среде разработки.
Чтобы правильно задать вопрос, нужно знать большую часть ответа, чтобы понимать, сделала ли за тебя среда "Б", "В" и "Г", нужно банально про них знать. Мне в этом плане вспоминается пример с теми же обработчиками изменения полей. Начинающих программистов тянет напихать их на форму, кому-то хватает ума перекрывать modified() на поле datasource'а, а не на контроле - если он, к примеру, слышал про пользовательскую настройку форм и возможность добавления новых контролов, связанных с одним и тем же полем. Следующим шагом идет вынос логики в modifiedField() таблицы - это уже очень большое достижение. Но потом возникает, скажем, задача при изменении определенных полей в шапке пробрасывать их в строки - и там подтягивать связанные значения полей. Хм, это уже интереснее, потому что пробрасываться могут значения сразу нескольких полей; подождите-ка, где-то это уже было... А, в заказах же такое сделано! Сейчас посмотрим, как именно... Опа! а там, оказывается, какие-то непонятные ax-классы с вывернутой наизнанку логикой, и выходит, все потуги выноса кода в modifiedField() таблицы пошли прахом... По-моему, невозможно такое угадать, не может это прийти "само по себе": про такие вещи либо знаешь и заранее готовишься к ним, либо не знаешь и потом "огребаешь" в один прекрасный день, а до того дня среда никак тебе не намекнет, что все на самом деле надо делать по-другому.
Цитата:
Сообщение от
Владимир Максимов
Насколько я понимаю, предполагалось, что "точкой входа" в любой класс в Axapta должен быть статический метод main().
По-моему, разработчики Х++ просто
слишком увлекались Java
Цитата:
Сообщение от
Владимир Максимов
А что в результате сделали знатоки "теории"? Про метод main() они узнают только тогда, когда оказывается невозможным привязать класс к пункту меню.
Точно помню, что в экзамене Development Introduction есть такой вопрос. Если знатоки "теории" не сдавали базовые экзамены, зачем допускать их к разработке?..
Цитата:
Сообщение от
Владимир Максимов
Никто и никогда не инициализирует объект args (если вообще про него вспоминают) передавая в метод new() параметры.
Сама по себе идея Args как универсального "транспорта" для передачи (фиксированного перечня) параметров вызываемому объекту приложения имеет свои ограничения, которые наиболее ярко проявляются как раз-таки в классах. Где-то числовые параметры передаются через строковый parm(), а где-то и вовсе через parmObject() передается ссылка на объект со всей необходимой информацией, которую не удалось "запихнуть" в свойства Args. К тому же, для наследников RunBase метод main() традиционно вызывает prompt(), который при вызове класса из кода оказывается ну совсем не кстати, поэтому в коде вызовы main(args) класса скорее - дурной тон (если уж надо что-то интерактивное запустить, для этого есть MenuFunction).
Цитата:
Сообщение от
Владимир Максимов
В общем случае, найти в коде, каким же образом инициализируется и запускается тот или иной класс - это всегда проблема. Каждый разработчик выдумывает что-то свое. Особенное. В соответствии со своим пониманием того, "как правильно".
Если разработчик не пренебрегает модификаторами доступа (public/protected/private) и придерживается контрактного подхода, то обычно все не так плохо
Цитата:
Сообщение от
Владимир Максимов
условно говоря, программист - это водитель автомобиля, а вовсе не механик. Он должен знать правила (приемы) управления автомобилем, а не то, как "расточить гильзы" или "продуть свечи"
Дырявые абстракции зачастую заставляют "лезть под капот"...