|
|
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
Dima Ttchingiz вызов функции и возврат из неё - точно такая же неограниченность как у goto. goto может быть в другую функцию. break/return/continue работают в пределах одной функции. В этом принципиальное различие. return и вызов функции - работают в другую функцию throw - такой же goto, так и другие, но не упомянутый Софтварером - работает в другую функцию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 20:21 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
Dima T... В список могу предложить только АСМ. + первоначальные версии FORTRAN, позволявшие, кроме этого, иметь несколько альтернативных точек входа в процедуру (ENTRY). Есть две причины, по которым goto считают нежелательным: одна обращена к "стилю" программиста, вторая к эффективности выполнения goto компьютером. Причина, обращенная к программистам, по по которой великие Дейкстра и Вирт изживали/проклинали goto заключается в том, что код с использованием goto может оказаться непригоден (а может оказаться и пригоден) для автоматического улучшения оптимизирующим компилятором. код вида (стрелки - переходы по GOTO) ---------- |блок 0 | ---------- / \ / \ --------- ---------- | блок 1| -> | блок 2 | | | <- | | ---------- ---------- откажется оптимизировать, наверно, любой компилятор. Как и "полу-вложенные" циклы вида --------- цикл 1 | | | цикл 2 ----| | | | | ---------- | | ----| Но такой цикл, буде он понадобится, вряд ли возможно выписать "эффективно" иначе, как с использованием goto. (Сдается, что именно величие Дейкстры и Вирта привело к превращению программистов в обезьян, хотя и не они были родоначальниками анти-goto движения. Т.к. обучение было просто заменено запретом использования.) В смысле потери времени на выполнение goto компьютером тут есть тема историческая - в некоторых, мертвых уже, языках реализация команды goto как команды языка высокого уровня, была неэффективной по дизайну. А современные процессорные реалии для платформ с много-конвейерным выполнением, вроде Intel, говорят так - любые варианты переходов приводят к разрыву потока выполнения машинных команд. Вместо помещения следующей команды на конвейер выполнения, идет вычисление адреса и чтение в кеш инструкций с вычисленного адреса. В этом смысле "структурный" if, switch, continue, try-catch и т.д. и т.п. - все зло одного порядка с goto. Иногда в целях определяют "близкий" и "далекий" переход (как в байт-кодах java-машины, например), но факта "разрыва потока выполнения" это отменить не может, даже если удается не перезаполнять кеш инструкций при "близком" переходе. Чем больше goto, тем медленнее работает программа. И не важно - сидит он в кишках структурных If, try-cacth или в явно выписанном программистом гонимом goto. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 20:27 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
tchingizreturn и вызов функции - работают в другую функцию Они работают очевидно. Т.е. понятно как работают с первого взгляда на код. tchingizthrow - такой же goto, так и другие, но не упомянутый Софтварером - работает в другую функцию Про это вообще отдельный холивар можно устроить. Исключения - мутная тема, не пользуюсь, поэтому не буду спорить. Недавно на хабре была тема про исключения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 20:50 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
Dima Ttchingizreturn и вызов функции - работают в другую функцию Они работают очевидно. Т.е. понятно как работают с первого взгляда на код. goto работает очевидно. Т.е. понятно как работает с первого взгляда на код. в случае вызова функции func - надо сказать Код: plaintext 1. в случае перехода на метку metka - надо сказать Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 21:05 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
booby. Чем больше goto, тем медленнее работает программа. я уж боюсь вообразить как затормозить программу добавление в нее циклов while ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 21:08 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
tchingizgoto работает очевидно. Т.е. понятно как работает с первого взгляда на код. Я честно сознался что думал goto позволяет перейти из одной функции в другую. В С/С++ не позволяет, не компилируется. Почему - вопрос второстепенный. При таком ограничении goto очевидно, не буду спорить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 21:16 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
Dima Ttchingiz вызов функции и возврат из неё - точно такая же неограниченность как у goto. goto может быть в другую функцию. break/return/continue работают в пределах одной функции. В этом принципиальное различие.Нет. Языки в которых явно существуют "функции" не позволяют делать goto в другие "функции". А вот языки в которых нету такой сущности - там можно прыгать как вздумается. Примеры: Asm, Basic, Fortran. По существу, из-за этих языков и началась мода на запрет goto. Из-за которой уже и появились языки с четко выраженными структурными блоками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 21:24 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
tchingizbooby. Чем больше goto, тем медленнее работает программа. я уж боюсь вообразить как затормозить программу добавление в нее циклов while деталь: на сей момент я программирую исключительно в pl/sql, в котором нет циклов с постусловием. Однажды, разглядывая вложенный цикл, я преодолел страх , и заменил while на допотопно-рукописный do ... while - <<my_label>> ... some code ... if condition then goto loop_label end; И код тот я не показываю зевакам, и дело свое полезное он делает. В общем же плане - бояться не надо - техника оптимизации, заключающаяся в объединении мелких циклов в один придумана специфически для того, чтобы избежать слишком мелких, "однострочных" циклов. Прежде чем начать бояться добавить while, разумно посмотреть - не может ли его тело быть объединено без разрыва потока c одним из уже выписанных while. Разумному программисту не всякий while страшен. А не разумному и море по колено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 21:59 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
Dima TИсключения - мутная тема, ничего мутного, особенно если разобраться с реализацией ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 23:40 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
softwarerF#С моей точки зрения, основной вред от goto в его неограниченности Вред от неограниченности невозможен. Возможен вред от ограниченности - невозможности применить там, где стоило бы. И возможен вред от неудачного применения. Мне кажется только из за любви к спору такой знающий человек как вы написали такую фразу. Существуют польза от ограничений (к лестницам зачем-то приделывают перила) и в последние несколько десятилетий в программировании это все довольно сильно эксплуатируется (см безопасные языки, DBC и так далее) F#(то есть при помощи goto можно перейти куда угодно - и именно пожтому трудно читать) Для меня это звучит религиозным догматом. Попробую привести фрагмент кода, который проиллюстрирует мысль: Код: plaintext 1. 2. Никогда не использовал break с меткой, и, как мне кажется, ни один язык с которым я работал этого не позволяет. Но мне кажется, логически по второму утверждению можно сказать больше чем по первому - например, что будет очуществлен выход из какого-то цикла, а не передача управления в произвольное место функции. Так? F#Более того catch и finaly вполне себе структурные - они не влияют на поведение кода внутри данного блока, а только на обработку ошибочных ситуаций вне его и не мешают анализу кода. Это снова вопрос восприятия. catch и finally - это goto, который заменяет "правильный структурный" if (!error) ..... Влияют ли они на анализ - зависит от того, как они используются. Если вы процессор который выполняет код, то для вас все эквивалентно goto, если вы человек, то для анализа кода важны гарантии и ограничения. Catch и finally ограничены по сравнению с goto и также декларируют предназнаяение кусков кода. "Структурные операторы" заставляют делать длинные блоки там, где они совершенно излишни. Скажем, условно Если наложить на себя ограничение не писать такого кода нигде кроме начала функции, вред от нескольких точек выхода уменьшается - фактически, поверх стандартного синтаксиса языка такое соглашение добавляет некоторую секцию guard conditions в описание функции которая просто переиспользует фигурные скобки тела функции для условия. А еще я люблю равиолли-код и стараюсь не делать больших функций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 08:29 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
Не об хорошей архитектуре, а хоть какой-то ... Рассмотрим к примеру создание проектов, которые имеют скажем много диалоговых форм и формируют много отчетов. Начнем с простого примера. К примеру рассмотрим ту часть проекта, которая связана с формированием отчетов. Без всякой архитектуры ---------------------------- Формируем отчеты с использованием "жесткого" кода без предоставления всяких настроек ... С хоть какой-то архитектурой ---------------------------------- Имеется какая-либо подсистема управления отчетами, которая к примеру /упрощенно/ предоставляет возможности настройки и работы с отчетами. К примеру: - опции формируемых pages берутся из /например/ xml file; - сохраняются данные об сформированных отчетах /в т.ч. last reports/; - возможность отправки отчетов на e-mail; - ... - ... - ... В чем разница в подходах? Программы без всякой архитектуры не позволяют и не умеют ... ... .. Программы у которых имеется хоть какая-то подсистема управления отчетами малого того, что позволяет ... ... ..., но также экономит много времени при создании новых проектов. PS: Вопросы организации программного кода также важны, но на мой взгляд это уже скорее подход к реализации архитектуры. При этом архитектура и реализация программного кода должна быть спроектирована так, чтобы эту подсистему /например "управления отчетами"/ могли легко расширить и использовать другие программисты. Конечно об выше сказанном можно сказать это "тривиально и об этом и так всем известно" ... Что по этому поводу можно ответить? Знать и использовать "знания" это как "небо и земля". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 11:21 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
Dima TВ список могу предложить только АСМ. Ну, ещё древние версии бейсика, те, которые обязывали нумеровать строки и не имели подпрограмм. Но в целом goto за пределы функции действительно нехарактерен, например, в Си для этого придумали специальную сладкую парочку setjmp/longjmp . В древние времена одной из претензий к goto называли то, что им можно прыгнуть внутрь цикла, что, в принципе, может привести программу в непредсказуемое состояние, но сказать честно, я никогда не видел того "спагетти", о котором писал Дейкстра, и никогда не видел, чтобы goto использовался человеком, который не знал бы очень чётко что и зачем он делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 11:55 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
ищщинна сей момент я программирую исключительно в pl/sql, в котором нет циклов с постусловием Это не совсем правда. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. - вполне себе неплохой заменитель цикла с пост-условием. В PL/SQL действительно иногда целесообразно использовать goto, но потому, что там нет finally и continue. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 12:02 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
Dima TИсключения - мутная тема, не пользуюсь, поэтому не буду спорить. У Джоэля была хорошая фраза про то, что оперирование указателями - это не навык, а способность, которая либо есть, либо нет. Я иногда думаю, что её можно сказать и про исключения. Чтобы понять исключения, надо просто заставить человек год-другой-третий хорошо попрограммировать без исключений. Не простые учебные задачи, а настоящие. После этого показать ему исключения - и он бросится на них как на манну небесную. К сожалению, на практике сейчас чаще получается наоборот - человеку показывают исключения, а он толком не знает и не понимает, зачем они. И тогда они действительно порой на всю жизнь становятся "мутной темой". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 12:07 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
На тему сабжа. Не знаю что добавить. Пока - ни за ни против. Но хотелось-бы обсудить различные варианты использования с теми кто кодил на Гоу. https://golang.org/doc/faq#exceptions Why does Go not have exceptions? We believe that coupling exceptions to a control structure, as in the try-catch-finally idiom, results in convoluted code. It also tends to encourage programmers to label too many ordinary errors, such as failing to open a file, as exceptional. Go takes a different approach. For plain error handling, Go's multi-value returns make it easy to report an error without overloading the return value. A canonical error type, coupled with Go's other features, makes error handling pleasant but quite different from that in other languages. Go also has a couple of built-in functions to signal and recover from truly exceptional conditions. The recovery mechanism is executed only as part of a function's state being torn down after an error, which is sufficient to handle catastrophe but requires no extra control structures and, when used well, can result in clean error-handling code. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 12:20 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
softwarer, заменитель, только с двумя goto вместо одного. Надо сказать, что сделал сделал я это один единственный раз, в одном единственном месте. Там, где идет работа с базой данных, о желании пооптимизировать работу goto не стоит рассказывать вслух и прилюдно. Могут и уволить, не дождавшись конца рассказа. continue есть с 11 версии, потребности в finally ощутить не сумел, так как практически не использую "объектные возможности". Лично для себя вывел следующее "отдаленно похожее на finally" правило большого пальца: Серверная процедура , возвращающая скалярные значения ( не курсоры) и предназначенная для вызова с клиента, должна исключать возможность явного выброса ошибки наружу. Здесь в качестве finally работает блок when others такой процедуры. Может быть это плохое правило, т.к. ведет к явному разделению серверного кода на предназначенный для вызова с клиента и не предназначенный, за счет включения "лишних" возвращаемых параметров об успешности выполнения. Но лучшего пока не изобрел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 12:28 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
softwarer... никогда не видел, чтобы goto использовался человеком, который не знал бы очень чётко что и зачем он делает. Примеров полно . Открывай любой студенческий топик :) softwarerDima TИсключения - мутная тема, не пользуюсь, поэтому не буду спорить. Чтобы понять исключения, надо просто заставить человек год-другой-третий хорошо попрограммировать без исключений. Не простые учебные задачи, а настоящие. После этого показать ему исключения - и он бросится на них как на манну небесную. Я тот самый человек. Долго писал на FoxPro 2 (DOS), затем на 6-м фоксе, затем перешел на 9-й, где одно из новшеств это исключения. Как-то не впечатлился этой манной небесной, не пользуюсь. Теорию знаю, после изучения теории желание применить было, но было негде. Сейчас есть где, но желания нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 12:37 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
F#Мне кажется только из за любви к спору такой знающий человек как вы написали такую фразу. Я никогда не делаю чего-либо из любви к спору. Но нередко за неё принимают любовь к неочевидной собеседнику истине. F#Существуют польза от ограничений (к лестницам зачем-то приделывают перила) Польза от ограничений и вред от неограниченности - разные вещи. Правильнее сказать так - от ограничений бывает польза и бывает вред, от неограниченности бывает польза и бывает вред. Лестничные перила, кстати - исключительно удачный пример. Они бывают далеко не на всех лестницах, а там, где бывают - как правило, позволяют через себя перелезть. То есть защищают от случайных проблем, но не сдерживают целенаправленное действие. Для ЯП именно такой подход обычно является лучшим вариантом. F#Никогда не использовал break с меткой, и, как мне кажется, ни один язык с которым я работал этого не позволяет. Я не знаю точно, какие именно позволяют, но суть ведь не в этом. F#Но мне кажется, логически по второму утверждению можно сказать больше чем по первому - например, что будет очуществлен выход из какого-то цикла, а не передача управления в произвольное место функции. Так? Имхо, по обоим можно сказать, что в результате произойдёт выход из какого-то количества вложенных циклов и управление останется внутри другого количества вложенных циклов (то и другое может быть и нулевым). Это если формально. А если фактически - то в обоих случаях надо отыскать глазами метку и дальше никакой разницы (ну кроме того, что первая строчка зациклится, а вторая - нет, но этого так никто и не увидел ) F#softwarerЭто снова вопрос восприятия. catch и finally - это goto, который заменяет "правильный структурный" if (!error) ..... Влияют ли они на анализ - зависит от того, как они используются. Если вы процессор который выполняет код, то для вас все эквивалентно goto, если вы человек, то для анализа кода важны гарантии и ограничения. Catch и finally ограничены по сравнению с goto и также декларируют предназнаяение кусков кода. Метка в goto обычно является осмысленным идентификатором и также декларирует предназначение goto. Ещё раз: это вопрос сугубо восприятия. Вы привыкли к некоторым конструкциям, и они кажутся Вам проще и понятнее. Возьмёте другой язык, другую практику - привыкнете к его специфике. Я, вот, привык даже к такому убожеству, как неименованные и ненаследуемые конструкторы :) F#Если наложить на себя ограничение не писать такого кода нигде кроме начала функции, вред от нескольких точек выхода уменьшается - фактически, поверх стандартного синтаксиса языка такое соглашение добавляет некоторую секцию guard conditions в описание функции которая просто переиспользует фигурные скобки тела функции для условия. Можно воспринимать и так. Но, в общем, не суть. Вред от "длинного блока" в любом случае больше, чем от "нескольких точек выхода". F#А еще я люблю равиолли-код и стараюсь не делать больших функций. Я тоже, но это зависит от задачи и инструмента. Не так редко большие функции являются естественным и правильным (с точки зрения в том числе читаемости кода и прочего удобства сопровождения) выражением мысли. Чтобы искусственно внедрить мелкие функции, приходится делать либо вложенные функции (сомнительная практика, имхо) либо искусственный класс (что, пожалуй, ещё хуже). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 12:44 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
boobyзаменитель, только с двумя goto вместо одного Эдак Вы и в самом структурном цикле найдёте goto. boobycontinue есть с 11 версии Эх, с одиннадцатой. Ещё хватает клиентов, которые с девятки-то не ушли :) booby потребности в finally ощутить не сумел, так как практически не использую "объектные возможности" Пожму плечами. finally - наиболее очевидно необходимая вещь во всех исключениях. Если Вы хоть раз явно открывали курсор, странно не ощущать потребности в ней. boobyЛично для себя вывел следующее "отдаленно похожее на finally" правило большого пальца: Серверная процедура , возвращающая скалярные значения ( не курсоры) и предназначенная для вызова с клиента, должна исключать возможность явного выброса ошибки наружу. Здесь в качестве finally работает блок when others такой процедуры. Блок when others при всём желании не сможет работать как finally (ну разве что если возбуждать исключение специально чтобы в него попасть). Что же до правила - оно имхо максимально неудачно и может быть понято только если в качестве клиента выступает какое-нибудь древнее убожество, которое не умеет работать с исключениями. Но это тема скорее для форума Oracle. booby Может быть это плохое правило, т.к. ведет к явному разделению серверного кода на предназначенный для вызова с клиента и не предназначенный, В инкапсуляции в принципе нет ничего плохого. Просто это правило - примерно как оглобли, приделанные к автомобилю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 12:51 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
Dima T Примеров полно . Открывай любой студенческий топик :) Открыл первый же. Применение осознанное и разумное, укладывающееся как раз в последнюю оставшуюся типовую ситуацию - "вроде finally для continue". Я бы, допустим, предпочёл реализовать этот участок кода через цикл for и без goto, но возмущаться тупостью автора меня не тянет. Dima TЯ тот самый человек. Долго писал на FoxPro 2 (DOS), затем на 6-м фоксе, затем перешел на 9-й, где одно из новшеств это исключения. Как-то не впечатлился этой манной небесной, не пользуюсь. Теорию знаю, после изучения теории желание применить было, но было негде. Сейчас есть где, но желания нет. От второго фокса у меня осталось смутное воспоминание о чём-то жутком. Скажу так, лично я истинный смысл исключений ощутил в тот момент, когда, уже какое-то время поработав с ними (ну так - приятная фенька) вдруг оказался перед необходимостью написать на Турбо-Паскале вещь гораздо более сложную, чем писал в студенческие времена. И вот, после того как я в третий раз переписал код так, чтобы ошибки обрабатывались где нужно и как нужно, и при этом работа с ними не загромождала логику, не занимала места в пять раз больше, чем собственно основной код итп, я вдруг осознал, что та подсистема обработки ошибок, которую я делаю - это велосипедная реализация исключений. И сравнив лучшее, чего мне удалось добиться, с чеканной стройностью, понятностью и красотой кода с исключениями - я, мягко говоря, не захотел больше возвращаться в тёмное прошлое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 13:10 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
softwarerЯ бы, допустим, предпочёл реализовать этот участок кода через цикл for и без goto, но возмущаться тупостью автора меня не тянет. Думаю потянет, если он привыкнет и начнет все циклы так реализовывать. softwarerОт второго фокса у меня осталось смутное воспоминание о чём-то жутком. Скорее всего просто не освоил. В фоксе многое не так "как везде", из-за этого большой порог входа. softwarerСкажу так, лично я истинный смысл исключений ощутил в тот момент, когда, уже какое-то время поработав с ними (ну так - приятная фенька) вдруг оказался перед необходимостью написать на Турбо-Паскале вещь гораздо более сложную, чем писал в студенческие времена. И вот, после того как я в третий раз переписал код так, чтобы ошибки обрабатывались где нужно и как нужно, и при этом работа с ними не загромождала логику, не занимала места в пять раз больше, чем собственно основной код итп, я вдруг осознал, что та подсистема обработки ошибок, которую я делаю - это велосипедная реализация исключений. И сравнив лучшее, чего мне удалось добиться, с чеканной стройностью, понятностью и красотой кода с исключениями - я, мягко говоря, не захотел больше возвращаться в тёмное прошлое. ИМХУ ты не на то акцент сделал. Главное тут "в третий раз переписал", а с исключениями или без - дело десятое. Думаю и без исключений уже не было бы в пять раз больше кода обработки ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 14:53 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
Покурил Golang - и в третий раз снова переписал. Уже клиника ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 15:02 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
softwarer... Эдак Вы и в самом структурном цикле найдёте goto. неужели есть сомнения в его там наличии? :) softwarerПожму плечами. finally - наиболее очевидно необходимая вещь во всех исключениях. Если Вы хоть раз явно открывали курсор, странно не ощущать потребности в ней. Пожму плечами. Finally - в части обязательной достижимости - синтаксический сахар, "Играет" он только сохранением контекста возникшего в try неконтролируемого исключения. Что с какой-то долей приближения тоже имитируется при необходимости. Зачем придумали try-with-resources, если finally и без него великолепен? И почему их теперь два - try? Как понять где resources, а где нет. Вот выделенный массив в памяти - это не resources, а манипулятор файлом - resources. Потому что ресурс под названием массив полностью управляется машиной времени выполнения. Его она сама освободит (когда-нибудь) без участия программиста. А манипулятор файла - ресурс, запрашиваемый из внешнего, по отношению к runtime, мира. Для pl/slq курсорная переменная, объявленная и открытая в блоке - локально управляемый ресурс, аналогично памяти в системах со сбором мусора. Машина выполнения pl/sql гарантирует освобождение этого ресурса если не сразу по выходу курсорной переменной из области видимости, то по завершению вызова. И обычно гораздо раньше, чем проснется сборщик мусора в java. Закрывать явно локально открытые курсоры - гораздо ближе к благим пожеланиям и правилам хорошего тона, чем к мечтам о finally. softwarerБлок when others при всём желании не сможет работать как finally (ну разве что если возбуждать исключение специально чтобы в него попасть). значит, все-таки может. Хотя я на этом в детальной точности не настаиваю. Речь идет о "замыкании", гарантии завершения одного блока в целях 100% попадания в следующий. В частном случае следующим может быть сам раздел when others. softwarerЧто же до правила - оно имхо максимально неудачно и может быть понято только если в качестве клиента выступает какое-нибудь древнее убожество, которое не умеет работать с исключениями. Но это тема скорее для форума Oracle. ... Мне кажется, что "убожество" здесь ключевое слово. В том смысле, что все не соответствующее "моей" модели восприятия мира является убожеством. Мне вот может представляться убожеством, что где-то еще есть клиенты , эксплуатирующие Oracle 9i. Раз клиенты, значит эксплуатируют 9i, оплачивая при этом Sustaining Support, и не имея технической возможности замены версии. Верю я в это или нет (верю) - не имеет "архитектурного" значения. В смысле заголовка, заявленного в топике имеет значение другое - где и как проходит граница того, что вы называете разрабатываемой системой или ее ядром и внешнего по отношению к ней мира. С максимально ясным и простым обозначением этих границ, не требующим расширенных навыков для опознавания стоящих по границе плакатов. Та тропинка, которая привела меня к моей оглобле, в целом двигалась из точки зрения, считающей, что клиент - внешний по отношению к "системе" потребитель. К степени убожества которого я, если смогу, не буду предъявлять специальных требований, а если не смогу, то буду искать способ их минимизации. Думаю, что вы попутали. Если клиент - автомобиль, то я не предполагаю наличие или отсутствие у него оглоблей. Я предлагаю ему трос, уцепившись за который он сможет вытащить интересующую его информацию из внешней по отношению к нему, клиенту, системы. О том - открываются курсоры и как закрываются - в нормальной истории ему знать не положено, предположительно совсем. Это в предположении, что слой доступа к данным и взаимодействия с сервером он не рожает сам, а берет любой готовый, с любым крюком, пригодным к цеплянию за мой трос. Хотя, если убрать оглобли и убожество, все действительно сведется к техническим особенностям, связанным с обработкой исключений "убогими клиентами" тоже. Как у телеги две оглобли, так и у меня есть еще одно, второе "правило большого пальца" по вопросу взаимодействия с убогими клиентами. Но от темы исключений/goto оно еще дальше, так что пусть ждет следующих встреч. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 15:55 |
|
||
|
Какие есть объективные метрики "хорошей архитектуры"?
|
|||
|---|---|---|---|
|
#18+
Встречаются разные извращения, например Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 16:44 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39081120&tid=1340876]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
146ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
78ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 521ms |

| 0 / 0 |
