|
|
|
|
#1 |
|
Участник
|
ok. Сущсвуют ли по твоему мнению такие условия, когда примемение EQB приемлемо?
Вот, например, допустим некто разрабатывает отдельный, достаточно изолированный модуль. Тому, кто будет копаться в коде все равно придетя изучать кучу бизнес сущностей. EQB прост для изучения - это всего лишь результат применения паттерна ExpressionBuilder по отношению к аксаптовскому Query. Несколько минут, если уже знаешь то и другое, зато сэкономит время и объем внимаения, т.к. под ногами не будет болтатьсся всякие fetchMode(0) и прочие дубли |
|
|
|
|
#2 |
|
Участник
|
Могу ошибаться, но мне кажется, что:
1. при построении перекрестных ссылок у Аксапты может пехать крыша 2. query лучше строить не в коде, а в AOT, а в коде инстанцировать одной строкой query = new Query(querystr(mySuperQuery)) |
|
|
|
|
#3 |
|
Участник
|
Цитата:
2. Query плохо читаемо: для того, чтобы узнать, какие есть условия на поля надо активно возить мышкой и нажимать на плюсики. Даже для того, что убедится, что оно не отсортировано. Т.е. визуализация Query содержит много лишних деталей, но при жтом нужные детали запрятаны глубоко. Сорри, при наведении на датасурс часть структуры показывается... Последний раз редактировалось belugin; 13.12.2007 в 15:46. |
|
|
|
|
#4 |
|
Участник
|
Не совсем. Уровней вложености много.
Цитата:
Сообщение от belugin
2. Query плохо читаемо: для того, чтобы узнать, какие есть условия на поля надо активно возить мышкой и нажимать на плюсики. Даже для того, что убедится, что оно не отсортировано. Т.е. визуализация Query содержит много лишних деталей, но при жтом нужные детали запрятаны глубоко.
В АОТ структура запроса отделена от кода. Следовательно: 1. заниматься оптимизацией и улучшизмами можно отдельно от кода (может отдельный человек) 2. апгрейд сильно упрощается, поскольку самым трудоемким является апгрейд кода. А количество кода при использовании Query из АОТ сильно уменьшается. Но что-то я ушел от темы. В общем, я согласен, что паттерн ExpressionBuilder позволяет сделать интересный код. Но у него все ж таки есть недостатки, связанные с глубиной. 1. как я уже говорил могут поехать перекрестные ссылки 2. по-моему, нельзя будет поставить точку останова на конкретный метод (дебаггер остановится на первом вызове, а затем в дебаггере нужно будет заходить в каждый парм-метод) 3. возникают очень тонкие и неявные побочные явления, связанные с порядком вызова методов и их аргументов 4. не дай бог какому-нибудь из методов вернуть значение Null. 5. непонятно как возвращать параметры В общем, все равно весь код в подобном стиле написать не получится. Значит будет дикая смесь нотаций: традиционной и через-точку. В общем, как руководитель проекта я не стал бы запрещать подобную запись, но и рекомендовать к использованию тоже бы не стал. |
|
|
|
|
#5 |
|
Участник
|
Надо проверить....
Цитата:
1. заниматься оптимизацией и улучшизмами можно отдельно от кода (может отдельный человек)
Цитата:
2. апгрейд сильно упрощается, поскольку самым трудоемким является апгрейд кода. А количество кода при использовании Query из АОТ сильно уменьшается.
Я за то, чтобы не использовать Builder в модицикациях кода подверженного апгрейдам (имеется ввиду сторонний код). Цитата:
2. по-моему, нельзя будет поставить точку останова на конкретный метод (дебаггер остановится на первом вызове, а затем в дебаггере нужно будет заходить в каждый парм-метод)
Цитата:
3. возникают очень тонкие и неявные побочные явления, связанные с порядком вызова методов и их аргументов
Цитата:
4. не дай бог какому-нибудь из методов вернуть значение Null.
Цитата:
5. непонятно как возвращать параметры
Цитата:
В общем, все равно весь код в подобном стиле написать не получится.
Значит будет дикая смесь нотаций: традиционной и через-точку. |
|
|
|
|
#6 |
|
Участник
|
Цитата:
Цитата:
Цитата:
X++: parm1(someComplexType _var)
{
// модифицируется и проверяется _var
return this;
}
parm2(someComplexType _var)
{
// модифицируется и проверяется _var
return this;
}
classvar.parm1(func1(var1)).parm2(func2(var1));Если вдобавок внутри происходит модификация переменных, то... Не помню у кого, но видел в подписи выражение типа (i=1;i+=(i++)+(i++);cout<<i); запись через точку порождает примерно такие же головоломки ![]() Во всей Аксапте принято возвращать null или пустую запись, если что-то не получилось. ![]() Например, методу передали неправильное значение и он хочет сообщить вызывающему об ошибке. В нормальных языках он должен возбудить исключение с определенным типом. А здесь непонятно что. ![]() А... дык, это только для создания query... |
|
|
|
|
#7 |
|
Участник
|
отвечю чуть ниже X++: parm1, parm2, func1, func2? func1, parm1, func2, parm2. Цитата:
Если вдобавок внутри происходит модификация переменных, то...
Не помню у кого, но видел в подписи выражение типа (i=1;i+=(i++)+(i++);cout<<i); запись через точку порождает примерно такие же головоломки
Разве есть разница между X++: query.proc1(func1(x)); query.proc2(func2(x)); X++: query.proc1(func1(x))
.proc2(func2(x));Цитата:
Например, методу передали неправильное значение и он хочет сообщить вызывающему об ошибке. В нормальных языках он должен возбудить исключение с определенным типом. А здесь непонятно что.
Цитата:
А... дык, это только для создания query...
|
|
|
|
|
#8 |
|
Axapta
|
Цитата:
Цитата:
Мне эти фетчмоды не мешают, я к ним уже привык. |
|
|
| Теги |
| ax3.0 |
|
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|