AXForum  
Вернуться   AXForum > Прочие обсуждения > Курилка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.09.2014, 01:21   #1  
Кирилл
Гость
 
n/a
Цитата:
Сообщение от belugin Посмотреть сообщение
Аргументируйте.
Как вы считаете каковы причины того, что мы можем практически безболезненно перейти на новую версию Windows и при этом обновление версии AX является "проектом"
Потому что Windows - продукт коробочный, сценарии его использования и интерфейсы с другими программными продуктами заранее известны его разработчикам (а точнее ими же и диктуются).
DAX же как правило используется как конструктор "собери сам".

Если Windows выпускали бы как такой же конструктор и конечный продукт формировался для каждого клиента индивидуально, переход на новую версию был бы сопряжен с теми же трудностями.

Примеры для AX 3 - 4- 2009:
1) Внедренцы DAX внедрили стандарт. Они будут переходить более менее безболезненно на новые версии, правда пользователей придется переучивать согласно новым тренингам и надеяться, что новые уникальные индексы уживутся со старыми данными.

2) Внедренцы DAX полностью проигнорировали стандартное приложение и запилили рядом свое с домино и медведями. Они на новые версии DAX будут переходить вообще без проблем.
Старый 23.09.2014, 06:26   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Кирилл Посмотреть сообщение
Потому что Windows - продукт коробочный, сценарии его использования и интерфейсы с другими программными продуктами заранее известны его разработчикам (а точнее ими же и диктуются).
DAX же как правило используется как конструктор "собери сам".

Если Windows выпускали бы как такой же конструктор и конечный продукт формировался для каждого клиента индивидуально, переход на новую версию был бы сопряжен с теми же трудностями.
Проблема как раз в том, что Ax не конструктор, а конструкция из пластилина - у конструктора есть четкие интерфейсы деталек. Например Visual Studio Shell - это конструктор.

Вопрос в том, можно ли сделать прикладной код Ax больше похожим на конструктор
Старый 23.09.2014, 07:43   #3  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
650 / 352 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от belugin Посмотреть сообщение
Проблема как раз в том, что Ax не конструктор, а конструкция из пластилина - у конструктора есть четкие интерфейсы деталек. Например Visual Studio Shell - это конструктор.

Вопрос в том, можно ли сделать прикладной код Ax больше похожим на конструктор
Именно Reflection делает АХ пластилином, в остальном, простите, не соглашусь. Если представлять все четко, то и код будет четким. Если мысли плавают, то и код будет не то чтобы "пластилиновым", а скорее требующим исправлений. И тестировать такой код не так-то просто, т.к. не ожидаешь где может вылезти баг.
Лично для меня на 1 месте UnitTest, на 2-м рефакторинг со всеми БП... Без модульных тестов рефакторинг если и возможен, то нет уверенности в том, что вы ничего не сломаете. И все, никакого пластилина. Пользовательский тест обычно всегда после этого срабатывает.
__________________
// no comments
За это сообщение автора поблагодарили: mazzy (2).
Старый 23.09.2014, 13:16   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от dech Посмотреть сообщение
Именно Reflection делает АХ пластилином, в остальном, простите, не соглашусь.
Я имел ввиду что принято менять объекты вместо того, чтобы их расширять.

Цитата:
Лично для меня на 1 месте UnitTest, на 2-м рефакторинг со всеми БП... Без модульных тестов рефакторинг если и возможен, то нет уверенности в том, что вы ничего не сломаете.
В аксапте почти нет достаточно изолированных юнитов, поэтому, я сомневаюсь в том, что можно написать юнит тесты на прикладной код (интеграционные тесты написанные на юнит тест ферймворке мы не будем называть юнит тестами).

Те юниты которые есть часто не соответствуют понятиям предметной области или реализуют их неустойчивыми интерфейсами.

Например нет такой сущности как "Журнал ГК" - его логика реализована в форме, таблицах, LedgerJournalEngine и прочем. Причем то, что реализовано в форме не имеет нормального программного интерфейса.

Цитата:
И все, никакого пластилина. Пользовательский тест обычно всегда после этого срабатывает.
Не могли бы вы написать про то, какие вы тесты обычно пишете на примере какой-нибудь из конкретных разработок?
За это сообщение автора поблагодарили: mazzy (2).
Старый 23.09.2014, 15:22   #5  
Кирилл
Гость
 
n/a
Цитата:
Сообщение от belugin Посмотреть сообщение
Например нет такой сущности как "Журнал ГК" - его логика реализована в форме, таблицах, LedgerJournalEngine и прочем. Причем то, что реализовано в форме не имеет нормального программного интерфейса.
Это был выбор самих разработчиков стандарта, а не диктат языка программирования или архитектуры системы. При желании можно реализовать сущность "Журнал ГК" в полном соответствии с вашими требованиями и на X++.
Перенести всю логику из таблиц и форм, в классы, оставив там только вызовы соответствующих методов этих классов.
Старый 23.09.2014, 16:04   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Кирилл Посмотреть сообщение
Это был выбор самих разработчиков стандарта, а не диктат языка программирования или архитектуры системы. При желании можно реализовать сущность "Журнал ГК" в полном соответствии с вашими требованиями и на X++.
На текущем X++ и MorphX это нельзя сделать. Например, ничего кроме таблиц и view нельзя привязать к гриду.

Цитата:
Перенести всю логику из таблиц и форм, в классы, оставив там только вызовы соответствующих методов этих классов.
Сами вызовы тоже есть атрибуты сущности. Попробуйте например сделать такую форму и класс, чтобы переход с хранения AccountNum на LedgerDimension был прозрачен для использующего кода.
Старый 23.09.2014, 17:11   #7  
Кирилл
Гость
 
n/a
Цитата:
Сообщение от belugin Посмотреть сообщение
На текущем X++ и MorphX это нельзя сделать. Например, ничего кроме таблиц и view нельзя привязать к гриду.
Значит будем привязывать к гриду таблицу. У нас задача построить расово чистую систему из одних классов или решить проблему размазывания логики по разным местам?

Создаем для таблицы базовый прокси-класс, от него потом будем наследовать и создавать нужный экземпляр в зависимости от данных в строке.
Соответственно в таблице появляется метод, возвращающий этот экземпляр.
Кстати, сам конструктор в базовом классе можно и не трогать, а перебирать всех наследников, скармливать им строку и они сами ответят, будут они ей заниматься или нет. Первый откликнувшийся наследник и будет возвращен.

Потом все статические методы просто переносим в базовый класс. Им все равно, лишь бы на сервере исполниться.

Затем смотрим какие методы мы можем перекрывать у таблицы. Их там штук 25, но нам хватит важнейших: insert, update, delete, renamePrimaryKey, initValue, validateField, modifiedField, validateWrite

Перекрываем их. Внутри создаем экземпляр прокси-класса и к примеру для update() до и после super прописываем экземпляр.beforeUpdate(this) и afterUpdate(this). Обрамляем все это дело транзакцией.

Ну и обычные напиленные методы копируем из таблицы в класс, но уже с учетом, что это другой this.

До кучи можно еще озадачиться написанием методов set и get (ну или parm), которые будут транслировать переменные прокси-класса в поля таблицы.
А потом использовать только их для чтения или записи.

Правда в таблице останутся определения индексов, связей и deleteactions.
Но по крайней мере код наследовать уже можно.

Ну и далее стараемся работать с этим прокси-классом, а не с таблицей непосредственно.
Зато залез человек в обозреватель, что-то там поделал, а логика вызвалась уже определенная наследниками прокси-класса.

Делаем эти прокси-классы для шапки и для строк, делаем класс Журнал ГК, который будет использовать экземпляры этих прокси-классов.
Вот как бы и свели код в одно место с возможностью полиморфизма вашего любимого.

С кодом на формах поступаем похожим образом.

Последний раз редактировалось Кирилл; 23.09.2014 в 17:25.
Старый 23.09.2014, 10:44   #8  
Кирилл
Гость
 
n/a
Цитата:
Сообщение от belugin Посмотреть сообщение
Проблема как раз в том, что Ax не конструктор, а конструкция из пластилина - у конструктора есть четкие интерфейсы деталек. Например Visual Studio Shell - это конструктор.

Вопрос в том, можно ли сделать прикладной код Ax больше похожим на конструктор
В противопоставлении легкости накатывания новой версии Windows "проекту перевнедрения" DAX суть в том, что код Windows недоступен клиенту для доработки.

В примере Visual Studio Shell - это продукт, потребителем которого является программист, который всю логику потом и запиливает, но потом не может продать конечный продукт никому кроме себя.
Это аналог использования DAX исключительно как средства разработки, в DAX тоже есть прекрасные детальки Tables, Forms, Maps и т.д.
За это сообщение автора поблагодарили: DSPIC (1).
Старый 23.09.2014, 13:19   #9  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Кирилл Посмотреть сообщение
В противопоставлении легкости накатывания новой версии Windows "проекту перевнедрения" DAX суть в том, что код Windows недоступен клиенту для доработки.
Linux, Eclipse доступен клиенту для доработки - многие ли пользуются этим по сравнению с теми, кто используют публичные интерфейсы?

Цитата:
Это аналог использования DAX исключительно как средства разработки, в DAX тоже есть прекрасные детальки Tables, Forms, Maps и т.д.
Почему нельзя использовать те же принципы для прикладного кода?
Старый 23.09.2014, 14:49   #10  
Кирилл
Гость
 
n/a
Цитата:
Сообщение от belugin Посмотреть сообщение
Linux, Eclipse доступен клиенту для доработки - многие ли пользуются этим по сравнению с теми, кто используют публичные интерфейсы?
А многие пользуются коробочными учетными системами по сравнению с теми, кто использует допиливаемые учетные системы?

Все есть яд и и все есть лекарство, вопрос в дозах и условиях применения.


Цитата:
Сообщение от belugin Посмотреть сообщение
Почему нельзя использовать те же принципы для прикладного кода?
Разные потребители.
Прекрасными детальками пользуется программист. Он мыслит категориями "могу".
Деталька предоставляет такие-то сервисы и накладывает такие-то ограничения и область применения. В итоге программист использует детальку только так, как это задумал ее автор, либо не использует.

Потребителем прикладного решения является заказчик. Он мыслит категориями "хочу" и может захотеть что-либо, находящееся вне области применения, заданной нашей прекрасной системой без пластилина.
И тут перед программистом встает дилемма. Либо отказаться от денег, либо от принципов

Учетные системы их разработчиками задуманы как способ рубки бабла, а не абстрактная "вещь в себе", так что от денег отказываться никто не будет.

Последний раз редактировалось Кирилл; 23.09.2014 в 14:52.
Старый 23.09.2014, 15:59   #11  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Кирилл Посмотреть сообщение
Разные потребители.
Прекрасными детальками пользуется программист. Он мыслит категориями "могу".
Деталька предоставляет такие-то сервисы и накладывает такие-то ограничения и область применения. В итоге программист использует детальку только так, как это задумал ее автор, либо не использует.
В любом случае детальками пользуется программист (и в коробочном и в пластилиновом).

Цитата:
Потребителем прикладного решения является заказчик. Он мыслит категориями "хочу" и может захотеть что-либо, находящееся вне области применения, заданной нашей прекрасной системой без пластилина.
И тут перед программистом встает дилемма. Либо отказаться от денег, либо от принципов
Принципы придуманы для денег. Например, чтобы легче было менять и переходить на следующие версии. Сейчас X++ содержит очень мало возможностей, чтобы разработчики стандартного формально объяснить "если не будешь это менять, в следующей версии код продолжить работать, а если поменяешь, то я не ручаюсь". В результате программист не может сказать заказчику "Подумайте, я могу это сделать, но при переходе на следующую версию будет геморрой - стоит ли оно того" так как геморрой будет в любом случае потому, что интерфейс не отделен от реализации и нет достаточных способов не меняющего расширения.

Дилемма всегда будет но при разных инструментах и подходах она встает реже или чаще. Я думаю, что можно серьезно уменьшить количество гнутых деталек, если поменять инструменты.
За это сообщение автора поблагодарили: mazzy (2).
Старый 23.09.2014, 16:38   #12  
Кирилл
Гость
 
n/a
Цитата:
Сообщение от belugin Посмотреть сообщение
В любом случае детальками пользуется программист (и в коробочном и в пластилиновом).
Пусть программист тогда и платит корпорации Microsoft.
Если вся система наследует свойства составляющих ее частей, то она для бизнесмена оказывается большой деталькой, ограничивающей его "хочу" сильнее, чем это делает пластилин.

Цитата:
Сообщение от belugin Посмотреть сообщение
Принципы придуманы для денег. Например, чтобы легче было менять и переходить на следующие версии.
Вот я к примеру бизнесмен. DAX внедрили, все работает как я и просил, проблем нет. Убедите меня перейти на новую версию и оплачивать поддержку всю дорогу.
Старый 23.09.2014, 11:23   #13  
Кирилл
Гость
 
n/a
Цитата:
Сообщение от belugin Посмотреть сообщение
Вопрос в том, можно ли сделать прикладной код Ax больше похожим на конструктор
Можно все перевести на полиморфизм, но это будет другой продукт.
И язык тут вторичен. В том же X++ есть удачные примеры типа RunBaseBatch или SalesFormLetter
Теги
.net, aot, cil, layer, morphx, x++, компилятор, слои

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Прощай, CITP-AT / Software-Vertriebsfirma Columbus IT Partner programmiert Pleite EVGL DAX auf Deutsch 3 02.10.2007 14:45
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:17.