|
![]() |
#1 |
Участник
|
Цитата:
Наследование не позволит вам сделать то, что делает CoC, на статических методах. Наследование не позволит нормально сосуществовать двум различным имплементациям которые одновременно должны влиять на выполнение кода. |
|
![]() |
#2 |
Участник
|
Цитата:
Дык. Механизм extensions в Аксапте - это механизм плугинов у нормальных людей. механизм плугинов позволяет вызвать все методы с одинаковыми сигнатурами, которые находятся в разных местах. В этом смысле наследование и плугины - да, ортогональны друг-другу. Но опять же - майкрософт ведут себя как пионеры-первопроходцы, как будто не было нескольких десятилетий после изобретения плугинов, отважно наступая на все грабли. ========================= Я о чем:
в общем, extension-методы не новость, есть куча аналогов. и очень хочется видеть не заклинания (cast) в стиле "This is my new favorite X++ feature", а сравнение с другими инструментами/языками. и анализ плюсов-минусов и способов минимизации минусов. Для сравнения см. того же Страустрапа. Да, не во всем он по итогу прав (см. тот же Boost). но его доводы внушают уважение и к ним стоит прислушаться. а тут броуновское движение какое-то. Почему в одном случае таки расширили значение ключевого слова next, а в другом вставили какой-то атрибут? какое-нибудь ключевое слово использовать в том же месте, где "живут" extends-implements. Например, by, case, like. Да хоть тот же delegate! https://msdn.microsoft.com/en-us/lib...or=-2147217396 |
|
![]() |
#3 |
Участник
|
Цитата:
Синтаксис ужасный, конечно. Но он уже есть. Зачем ключевое слово там где без него можно обойтись? и атрибут там, где как раз требуется ключевое слово. сейчас, без ключевого слова, смысл private/protected/public в extension-классе предельно извратный. |
|
![]() |
#4 |
Участник
|
Цитата:
Атрибутом можно помечать классы и методы им нельзя обозначать какие-то штуки чем-то внутри метода. |
|
![]() |
#5 |
Участник
|
Цитата:
ключевое слово next накладывает сильные ограничения в случае, если один метод в одном классе расширяет несколько других базовых. например, мы создаем расширение post, которое должно срабатывать во всех журналах (в ГК, в складских журналах, в авансовых отчетах, в проектах и в других). имея только ключевое слово next нельзя будет указать какой именно метод расширяемого класса вызываем. опять же, навсидку думается, что синтаксис вызова метода в map решил бы и эту проблему. и, похоже, господа архитекторы не предполагали, что кто-то захочет сделать расширение для нескольких классов. Хотя атрибуты это позволяют сделать. ======================= Господи, ну почему сразу всплывает столько вопросов к "favorite X++ feature", стоит хотя бы на 10-15 минут подумать об этой фиче. Последний раз редактировалось mazzy; 05.07.2017 в 12:16. |
|
![]() |
#6 |
Участник
|
Цитата:
Сообщение от mazzy
![]() Подумав еще...
ключевое слово next накладывает сильные ограничения в случае, если один метод в одном классе расширяет несколько других базовых. например, мы создаем расширение post, которое должно срабатывать во всех журналах (в ГК, в складских журналах, в авансовых отчетах, в проектах и в других). имея только ключевое слово next нельзя будет указать какой именно метод расширяемого класса вызываем. опять же, навсидку думается, что синтаксис вызова метода в map решил бы и эту проблему. Можно заврэпить конкретный метод конкретного саб-класса, если нужно сделать только что-то именно для этого саб-класса. |
|
![]() |
#7 |
Участник
|
например, универсальный лог.
например, какую-нибудь обработку/заполнение dimensions. т.е. что-то общее для разных журналов. журналы в аксапте могут быть никак не связаны ни в какую иерархию. да-да. я об этом. ты очень точно написал в единственном числе. хотя атрибуты, представленные в исходном видео, вполне допускают несколько extensionOf-классов. Последний раз редактировалось mazzy; 05.07.2017 в 18:30. |
|
Теги |
chain of command |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|