13.12.2007, 13:56 | #61 |
Участник
|
Это все равно что привыкнуть работать на нестандартной клавиатуре. Потом на другой работать не можешь.
|
|
13.12.2007, 14:15 | #62 |
Участник
|
Это наверное так же как использование шаблонов в проектах на C++ - язык повзоляет, но использовать не рекомендуется, потому что не все программисты в команде этот код поймут.
|
|
13.12.2007, 14:25 | #63 |
Moderator
|
Цитата:
Это наверное так же как использование шаблонов в проектах на C++ - язык повзоляет, но использовать не рекомендуется
|
|
13.12.2007, 14:34 | #64 |
Участник
|
Руководителями проектов. Я имею в виду не запрещение использования шаблонов вообще, а использование сложных конструкций с использованием шаблонов. Мне приходилось с таким сталкиваться.
|
|
13.12.2007, 14:57 | #65 |
Участник
|
|
|
13.12.2007, 15:01 | #66 |
Axapta
|
Ну я же сказал, что я не знаю, в чем эта мера конкретно состоит. Я пока не могу сформулировать даже сколько-нибудь четкие критерии. И параметра по которому "слишком" - не знаю. А пересек он просто по моему мнению. Поэтому я по возможности не буду его использовать.
|
|
13.12.2007, 15:12 | #67 |
Участник
|
ok. Сущсвуют ли по твоему мнению такие условия, когда примемение EQB приемлемо?
Вот, например, допустим некто разрабатывает отдельный, достаточно изолированный модуль. Тому, кто будет копаться в коде все равно придетя изучать кучу бизнес сущностей. EQB прост для изучения - это всего лишь результат применения паттерна ExpressionBuilder по отношению к аксаптовскому Query. Несколько минут, если уже знаешь то и другое, зато сэкономит время и объем внимаения, т.к. под ногами не будет болтатьсся всякие fetchMode(0) и прочие дубли |
|
13.12.2007, 15:19 | #68 |
Участник
|
Могу ошибаться, но мне кажется, что:
1. при построении перекрестных ссылок у Аксапты может пехать крыша 2. query лучше строить не в коде, а в AOT, а в коде инстанцировать одной строкой query = new Query(querystr(mySuperQuery)) |
|
13.12.2007, 15:36 | #69 |
Axapta
|
Цитата:
Цитата:
Мне эти фетчмоды не мешают, я к ним уже привык. |
|
13.12.2007, 15:42 | #70 |
Участник
|
Цитата:
2. Query плохо читаемо: для того, чтобы узнать, какие есть условия на поля надо активно возить мышкой и нажимать на плюсики. Даже для того, что убедится, что оно не отсортировано. Т.е. визуализация Query содержит много лишних деталей, но при жтом нужные детали запрятаны глубоко. Сорри, при наведении на датасурс часть структуры показывается... Последний раз редактировалось belugin; 13.12.2007 в 15:46. |
|
13.12.2007, 16:16 | #71 |
Участник
|
Не совсем. Уровней вложености много.
Цитата:
Сообщение от belugin
2. Query плохо читаемо: для того, чтобы узнать, какие есть условия на поля надо активно возить мышкой и нажимать на плюсики. Даже для того, что убедится, что оно не отсортировано. Т.е. визуализация Query содержит много лишних деталей, но при жтом нужные детали запрятаны глубоко.
В АОТ структура запроса отделена от кода. Следовательно: 1. заниматься оптимизацией и улучшизмами можно отдельно от кода (может отдельный человек) 2. апгрейд сильно упрощается, поскольку самым трудоемким является апгрейд кода. А количество кода при использовании Query из АОТ сильно уменьшается. Но что-то я ушел от темы. В общем, я согласен, что паттерн ExpressionBuilder позволяет сделать интересный код. Но у него все ж таки есть недостатки, связанные с глубиной. 1. как я уже говорил могут поехать перекрестные ссылки 2. по-моему, нельзя будет поставить точку останова на конкретный метод (дебаггер остановится на первом вызове, а затем в дебаггере нужно будет заходить в каждый парм-метод) 3. возникают очень тонкие и неявные побочные явления, связанные с порядком вызова методов и их аргументов 4. не дай бог какому-нибудь из методов вернуть значение Null. 5. непонятно как возвращать параметры В общем, все равно весь код в подобном стиле написать не получится. Значит будет дикая смесь нотаций: традиционной и через-точку. В общем, как руководитель проекта я не стал бы запрещать подобную запись, но и рекомендовать к использованию тоже бы не стал. |
|
13.12.2007, 16:27 | #72 |
Moderator
|
В общем то я понимаю, что эта ветка ничего не реит и каждый останется при своем мнении, но дабы не заканчивать на такой пессиместичной ноте:
Цитата:
1. как я уже говорил могут поехать перекрестные ссылки
Цитата:
2. по-моему, нельзя будет поставить точку останова на конкретный метод (дебаггер остановится на первом вызове, а затем в дебаггере нужно будет заходить в каждый парм-метод)
Цитата:
3. возникают очень тонкие и неявные побочные явления, связанные с порядком вызова методов и их аргументов
Цитата:
4. не дай бог какому-нибудь из методов вернуть значение Null.
Цитата:
5. непонятно как возвращать параметры
Цитата:
В общем, как руководитель проекта я не стал бы запрещать подобную запись, но и рекомендовать к использованию тоже бы не стал.
|
|
13.12.2007, 16:34 | #73 |
Участник
|
Надо проверить....
Цитата:
1. заниматься оптимизацией и улучшизмами можно отдельно от кода (может отдельный человек)
Цитата:
2. апгрейд сильно упрощается, поскольку самым трудоемким является апгрейд кода. А количество кода при использовании Query из АОТ сильно уменьшается.
Я за то, чтобы не использовать Builder в модицикациях кода подверженного апгрейдам (имеется ввиду сторонний код). Цитата:
2. по-моему, нельзя будет поставить точку останова на конкретный метод (дебаггер остановится на первом вызове, а затем в дебаггере нужно будет заходить в каждый парм-метод)
Цитата:
3. возникают очень тонкие и неявные побочные явления, связанные с порядком вызова методов и их аргументов
Цитата:
4. не дай бог какому-нибудь из методов вернуть значение Null.
Цитата:
5. непонятно как возвращать параметры
Цитата:
В общем, все равно весь код в подобном стиле написать не получится.
Значит будет дикая смесь нотаций: традиционной и через-точку. |
|
13.12.2007, 17:37 | #74 |
NavAx
|
Цитата:
1) Сами функциональщики признают, что их стиль написания часто делает программы нечитабельными. К примеру, не сложно написать полноценный интерпретатор в одну строку. Прочитать сложнее. 2) Сама суть функционального стиля заключена в рекурсии. В Axapta есть технологическое ограничение на число вложенных вызовов, т.е. использование рекурсии невозможно 3) Основные причины возобновления интереса к функциональным языкам это: - удобство работы с текстами - практически идеальное распараллеливание вычислений - дешевая оперативная память, позволяющая полностью "развернуть" граф и т.о. получить хорошую скорость работы Для axapta ни один из этих критериев не применим 4) Очень тяжело дебажить такой код
__________________
Isn't it nice when things just work? |
|
13.12.2007, 18:01 | #75 |
Участник
|
Кстати, самый объектно-ориантированный язык smalltalk тоже прижерживается такой нотации - там метод возвращает this, если не сказано обратное
|
|
13.12.2007, 18:24 | #76 |
Banned
|
Присоединюсь к мнению, высказанному glibs, и приведу еще один довод против подобных (пусть очень удобных и симпатичных) "приблуд" и "особых" синтаксических приемов. Итак, в настоящее время у нас в компании дебатируется необходимость сертификации одного вертикального решения.
- она (сертификация) стоит денег - выполняется сторонней фирмой из Англии - имеет большой набор чисто формальных проверок вроде BP. Кто гарантирует, что "проверяльщик", увидев подобный лаконичный, но не знакомый ему код, не откажется ставить "галочку" в одной из граф и не зарежет решение? Финансовые потери будут весьма ощутимы. Вообще, Microsoft не любит горизонтальных решений от партнеров. Я в нашей компании стараюсь держать неизбежный горизонтальный слой в разумных пределах и не раздуваю его сверх меры. А все эти приблуды - типичные горизонтальные решения, которые неизвестно кто поддерживает и неизвестно как долго собирается поддерживать. Так что, мой совет: "Руки прочь!" Последний раз редактировалось EVGL; 13.12.2007 в 18:28. |
|
13.12.2007, 18:36 | #77 |
Участник
|
понятно . А что у вас в горизонтальном слое и как вы определяете, где мера?
|
|
13.12.2007, 18:45 | #78 |
Banned
|
Функционал типа Workflow или интеграциии проектов с Microsoft Project. Буду рад выбросить его, как только появится что-то похожее в новой версии. А мера такая: если сходная фича запрашивается более чем 2-3 клиентами, имеет смысл встроить ее в BUS-слой. Еще пример: складской учет НЗП.
|
|
13.12.2007, 18:55 | #79 |
Участник
|
Цитата:
Цитата:
Цитата:
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... |
|
13.12.2007, 18:56 | #80 |
Участник
|
Цитата:
В данном случае, я неудачно построил фразу. Смысл в том, что с точки зрения Axata поведение будет логичным и предсказуемым, а вот с точки зрения человека, привыкшего к другой идеологии программирования - не ожидАемым. Он получит не то, что ожидал, исходя из своих предположений и опыта программирования в других средах. Простой пример: X++: static void Test(Args _args) { print true || true && false; print true || (true && false); pause; } Поэтому, если какая-то идеология работает в одной среде программирования, то далеко не факт, что ее можно один-в-один перенести в другую среду программиирования. |
|