|
|
|
|
#1 |
|
Member
|
А как вы в класс будете передавать буфер различных таблиц и там его обрабатывать?
__________________
С уважением, glibs® |
|
|
|
|
#2 |
|
MCT
|
Стот отметить, что Map в Axapt-e реализован как две сущности. Одна это класс коллекции, а другая это сущность в АОТ. Одна служит для обработки объектов в оперативной памяти, а вторая для удобства заполнения сущностей с одинаковым набором полей как то Поставщики-Клиенты.
Класс - это некая структура (базовый кирпичик) для постоения модификаций. Если сравнивать первый Map и class, то здесь есть особенности того, что в мапе присуствует ключ и его можно использовать как некий упорядочный список. Он удобен для кэширования информации. Множественные ключи в нем могут прикрепляться к одному и тому же значению, но один ключ может прикрепляться только к одному значению за раз. Добавление пары ключа и значения в место, где ключ уже привязан к значению изменит связь так, что ключ будет привязан к новому значению. X++: Map map = new Map(Types::String, Types::Enum); Word wordType; ; map.insert("Car", Word::Noun); map.insert("Bike", Word::Noun); map.insert("Walk", Word::Verb); map.insert("Nice", Word::Adjective); print map.elements(); //4; wordType = map.lookup("Car"); print strfmt("Car is a %1", wordType); //Car is a Noun pause; |
|
|
|
|
#3 |
|
Участник
|
|
|
|
|
|
#4 |
|
Member
|
Цитата:
Сообщение от Raven Melancholic
...Ну...
__________________
С уважением, glibs® |
|
|
|
|
#5 |
|
Участник
|
Спасибо за комплимент но. к сожалению, не могу ни принять на свой счёт, ни вписать в резюме, так как автором иерархии классов, в основе которых лежит InventMovement я не являюсь.
В использовании классов, наследников InventMovement есть ошибки, но внёс их не я. Есть документальные подтверждения, что как минимум один человек разбирался с классами из иерархии InventMovement (в инете есть статья от Fed), поэтому обобщение никому не подходит. Время очень жалко - этот ресурс невосполнимый. Но время, затраченное на разбор вызова, подобному: X++: movement = InventMovement::construct(salesLine, InventMovSubType::None, _childBuffer) estimated = InventUpd_Estimated::newInventMovement(movement); estimated.updateNow(); X++: this.LineAmount = this.lineAmountMST(this.Qty); X++: this.SalesPurchLine::lineAmountMST Еще мне жалко времени на то, что при загрузке проектов, полученных от аутсорсеров при наличии в них изменённых мапов я не могу выполнить сравнение из-за застарелой ошибки сравнения ветки Mappings. Так что времени мне действительно жалко, поэтому предпочитаю, если есть возможность использовать не мапы, а классы. |
|
|
|
|
#6 |
|
Участник
|
Цитата:
Сообщение от Raven Melancholic
Повторюсь, на перепрыгивание туда-сюда мне времени жалко, причем, в this.lineAmountMST(this.Qty) стандартная функция просмотра определения не работает (понятно почему).
Еще мне жалко времени на то, что при загрузке проектов, полученных от аутсорсеров при наличии в них изменённых мапов я не могу выполнить сравнение из-за застарелой ошибки сравнения ветки Mappings. Так что времени мне действительно жалко, поэтому предпочитаю, если есть возможность использовать не мапы, а классы. Так что здесь на одной чаше весов - удобное "перепрыгивание", а на другой: - быстродействие (мэппинг - это все таки "ядро", и этим НАДО пользоваться), - простота (трудозатраты на создание, расширение и поддержку мэппинга классами существенно больше), - шаблон (разработчики, как художники, непременно реализуют конкретный мэппинг каждый по-своему) Поэтому, я голосую за MAP (хотя, по чесноку, чаще пишу классы ).А "перепрыгивание" еще много где не работает (или работает не так как хотелось бы). В тех же классах из метода базового класса уже не "перепрыгнуть" в наследника, и все-равно приходится активно работать с репозитарием. Да, и еще, InventMovement и Ко я бы не стал относить к попытке реализации мэппинга, все-таки это InventMovement...
|
|
|
|
|
|