Банда четырёх и прочие боги "настоящего программирования" #792106


#0 by Mort
У нас один бог (ну или два), а там целая кодла. И среди них есть некие кто называются "банда четырех". Если ты не знаешь кто это такие, можешь на собеседование на кресты не соваться. В ходе изучения C# в рамках использования в Unity плотно пообщался с гуру использования C++ в QT. На каждый вопрос - используй тот или иной паттерн, особо часто описанный в книге вышеупомянутых четырёх. Ну и пресловутый MVC, конечно. После поверхностного изучения и применения на практике тех же "синглтонов" и "наблюдателей", как у тупого 1сника возникло смутное ощущение, что паттерны проектирования это просто средство в плохо проектированной среде не потерять концы. Может это конечно и обусловлено тем, что сложность всей программы в отличие от 1с взлетает  шопц с каждой строчкой, но привкус ненатуральности остается. Вы как считаете?
#0 by Mort
У нас один бог (ну или два), а там целая кодла. И среди них есть некие кто называются "банда четырех". Если ты не знаешь кто это такие, можешь на собеседование на кресты не соваться. В ходе изучения C# в рамках использования в Unity плотно пообщался с гуру использования C++ в QT. На каждый вопрос - используй тот или иной паттерн, особо часто описанный в книге вышеупомянутых четырёх. Ну и пресловутый MVC, конечно. После поверхностного изучения и применения на практике тех же "синглтонов" и "наблюдателей", как у тупого 1сника возникло смутное ощущение, что паттерны проектирования это просто средство в плохо проектированной среде не потерять концы. Может это конечно и обусловлено тем, что сложность всей программы в отличие от 1с взлетает  шопц с каждой строчкой, но привкус ненатуральности остается. Вы как считаете?
#1 by Mort
Забыл вставить, вот эта книга:
#2 by Неверный Параметр И
Старая песня про то, что 1Сник не сталкивается с типовыми проблемами проектирования большого мира, поэтому архитектурные шаблоны вызывают у него оторопь, а все непонятное объявляется искусственным и ненатуральным. Там не "программа сложная", а мироздание другое. Jedem das Seine, чо.
#3 by Курцвейл
Изучал ООП. Про этих четырех не слышал.
#4 by Курцвейл
Хорошие спецы рекомендуют вот это -
#5 by Курцвейл
#6 by Курцвейл
Кажется понял - речь о фабрике, патернах и прочей шелупони ООП.
#7 by ILM
Это скорее всего кирпичи или блоки. Решаешь задачу, взял нужные паттерны набросал в них свой код получил меньший г-код, чем получил бы без них.
#8 by Dmitry1c
GOF - это не для 1Це.
#9 by NorthWind
Интересовался еще году в 2000. Познавательно. При работе в C++Builder пользовался.
#10 by Shur1cIT
Мне понравилась достаточно простым не напряжным языком объясняют, более глубоко для меня не надо
#11 by Asmody
Вечно одинесники ноют, что они "жизнью обиженные". На самом деле, многие паттерны уже реализованы в платформе.
#12 by 1Снеговик
Вы о чем вообще? Опять заставляете чувствовать натуральных 1с-ников себя тупыми)
#13 by 1dvd
Не толерантно напоминать одинеснекам, что они тупые. Это оскорбляет их чувства
#14 by lock19
При вдумчивом проектировании следование устоявшимся паттернам выходит само собой и можно даже ничего не знать ни о каких бандах паттернов.
#15 by Это_mike
Теорема Бородатой Женщины -Соболя: Все одинэсники тупые -- Теорема БЖС в редакции Рупора: Все одинэсники тупые, в особенности те, кто считает себя умными, ибо сим лишь подтверждают свою тупость, равно и те, кто знают что они тупые, ибо думают, что раз они знают, что они тупые - на самом деле они умные, тем самым подтверждая свою тупость ... -- Дополнение к теореме БЖС Октябрьского Молота: если одинэсник в качестве критерия тупости-ума начинает мерять свою... простите... зарплату, то он считается еще и неудачником... Вообще, любой одинэсник, который задается вопросом - тупой он или умный - тупой. -- Доказательство теоремы БЖС (© Абырвалг): 1Сник = РТФМ+Т1С РТФМ = ПНХ+[:|||:] Т1С=LOL 1Сник = LOL+ПНХ+[:|||:] LOL = тупой смех ПНХ = пошел ты, тупой [:|||:] = ну сколько можно, тупой 1Сник = тупой смех+ пошел ты, тупой+ну сколько можно, тупой 1Сник = тупой(смех+ ну сколько можно + пошел ты)
#16 by NorthWind
в принципе да, но знать хотя бы простейшие типа одиночки или фабрики классов вреда не будет
#17 by Shur1cIT
"вдумчивое проектирование" - это процесс озобретания велосипеда, зачем это делать когда уже за тебя всё придумали,лучше силы и время непосредственно на разработку потратить плюс остальным разработчикам будет понятно когда скажешь им тут задействован например такой то патерн и не придеться ломать голову что тут вообще такое.
#18 by lock19
Можно просто читать чужой хороший код - там всё будет.
#19 by Shur1cIT
даже нужно, но после того как прочитаешь про используемый патерн, просто разглядывая код не понимая для чего  не поймешь зачем тут столько абстрактных классов в цепочке или интерфейсов почему они так переплетены.
#20 by ILM
Ветка  какая-то совсем не толерантная выходит0)) Я не вижу разницы или плюсов в GOF и С++ по  сравнению с 1С. За что деньги платят, с тем и работаем... Ну не буду я синглетон или фабрику на 1С делать, а печатную форму для УПП на С++. Каждый сверчок, знай свой шесток.
#21 by Лефмихалыч
Паттерны - это средство не изобретать заново решения типовых задач. У 1сников паттерны тоже есть, только ни гораздо более высокоуровневые и их ни кому не пришло в голову систематизировать
#22 by lock19
Код разглядывают имея целью разобраться в его работе чтобы модифицировать, или позаимствовать. Естественно возникают вопросы почему сделано именно так.
#23 by DmitrO
точна! :) Главный паттерн 1сников - никогда не изменяй типовую конфигурацию. Главный паттерн TRUE 1сников - никогда не используй типовую конфигурацию.
#24 by Лефмихалыч
по-русски это можно выразить просто: "с дури можно и хрен сломать". В программировании нельзя слепо применять какой-то один подход ко всему. Всегда нужно чувствовать грань между адекватным решением и оверинженирингом. Наличием такого чувства профессиональный программист от копрокодера и отличается (в том числе - не только этим).
#25 by lock19
"Питер Норвиг утверждает, что 16 из 23 шаблонов, описанных в книге «Банды Четверых», в динамически-типизируемых языках реализуются существенно проще, чем в С++, либо оказываются незаметны. Пол Грэхэм считает саму идею шаблонов проектирования — антипаттерном, сигналом о том, что система не обладает достаточным уровнем абстракции, и необходима её тщательная переработка. Нетрудно видеть, что само определение шаблона как «готового решения, но не прямого обращения к библиотеке» по сути означает отказ от повторного использования в пользу дублирования. Это, очевидно, может быть неизбежным для сложных систем при использовании языков, не поддерживающих комбинаторы и полиморфизм типов, и это в принципе может быть исключено в языках, обладающих свойством гомоиконничности (хотя и не обязательно эффективно), так как любой шаблон может быть реализован в виде исполнимого кода"
#26 by kyvv
Кто может посоветовать книгу по 1С, написанную для программистов, а не для гуманитариев
#27 by lock19
Кем она написана имеет значение? )
#28 by Лефмихалыч
я не понимаю, как общаться, если ты своих слов не говоришь
#29 by kyvv
Нет.
#30 by Лефмихалыч
профессиональная разработка, которая теперь уже в двух или трех томах. У гумманитариев от нее мозг выкипает
#31 by kyvv
Терминология там не совсем программистская.
#32 by lock19
До сих пор говорил своими словами. Паттерны применять можно, а умеренно и с умом - нужно.
#33 by FIXXXL
а БСП это паттерны?
#34 by Лефмихалыч
я не понимаю, чего ты хочешь. Что там не так с терминологией?
#37 by Лефмихалыч
а, ну, вот так лучше, теперь я тебя понимаю.
#38 by БледноЗолотистый
Эта книга - СП.
#39 by kyvv
Там могут применяться паттерны, ИМХО.
#40 by Kyon8
Вообще 1С-ники ежедневно используют паттерн от "банды четырёх" Iterator, когда пишут цикл Для Каждого ... Из ... Цикл А так очень низкоуровневая и малополезная тема в плане 1С. В плане литературы по программированию (не по паттернам) мне понравилась книга "Совершенный код" Макконела, многое к 1С применимо (и есть краткий обзор этих самых паттернов).
#41 by Лефмихалыч
нет. БСП - это фрэймворк
#42 by Лефмихалыч
нет, это просто цикл. А вот те, кто написал объекты платформы, которые можно в этот цикл пихать, вот они использовали паттерн iterator
#43 by Лефмихалыч
у 1Сников паттерны тоже есть, но они гораздо более высокоуровневые. Например "партионное списание" или "срез последних на каждую дату"
#44 by Kyon8
<< нет, это просто цикл Это обход коллекции с помощью итератора, т.е. использование реализованного в платворме паттерна.
#45 by Fish
"И среди них есть некие кто называются "банда четырех"" - Кто эти люди, и зачем о них знать?
#46 by kyvv
Для внедренцев-сопровожденцев о них знать вредно, будешь чувствовать себя сам знаешь кем.
#47 by Naf2017
например
#48 by trdm
> Опять заставляете чувствовать натуральных 1с-ников себя тупыми) Невежество - не порок. Неприятно становится, если мнишь себя всезнайкой, а тут облом.
#49 by Naf2017
#50 by Fish
Я не про содержание, а конкретно про авторов. Что они совершили такого, что заслужили звания "богов"? Придумали новый ЯП? Совершили некий прорыв? Или тупо очередной систематизировали (как и многие до них) некие стандартные приёмы, известные и без них?
#51 by Лефмихалыч
да, они придумали язык пррования и этим совершили некий прорыв. А вот паттерны - это как раз систематизация. Другое дело, что все эти концепции немножечко слишком сложны для обычных человеческих мозгов и прорыв получился сильно академический и в обычных полях до сих пор процветают велосипед и костыли.
#52 by PCcomCat
Эти "боги" просто в отличие от остальных еще умеют описать приемы буковками, о которых и другие знают, не не умеют рассказывать. Как-то так... ;)
#53 by kyvv
Если бы все было так, то не было бы (40...44). Ну как пример: объекты конфигурации и объекты базы данных, их связь с классами, и есть ли в 1С классы как класс.
#54 by Asmody
Выборка данных из результата запроса — в чистом виде итератор.
#55 by Живой Ископаемый
MVC в 1С используется. Практически в каждой форме объекта. Наблюдатель - аналогично, либо в Подписках на события(на уровне платформы), либо через Обработчик ожидания для формы (есть во многих последних типовых).
#56 by Лефмихалыч
но это не шаблонов. Говорить, что это есть применение шаблонов, это все равно, что говорить, что шаблоны проектирования применяет пользователь, который тыкает кнопку, по которой вызывается цикл "для каждого". Это ж ересь. Тем более, что наличие поведения у объекта не говорит о том, что при его разработке были применены шаблоны - может автор изобрел велосипед сам, ни чего не зная про шаблоны проектирования.
#57 by kyvv
Автор может "изобретать" велосипед, на шаблон это не влияет, шаблоны описаны до него. А вот сам велосипед может следовать неким шаблонам или нет. Если нет, то тогда можно говорить об изобретении.
#58 by Живой Ископаемый
А, делегирование в 1С постоянно используется. Во внешних печатных формах, в формах подбора.
#59 by kyvv
+ Тыканье в кнопку - тоже шаблон, но к паттернам банды не имеющий никакого отношения.(ИМХО)
#60 by kyvv
Кстати, среди авторов упоминавшегося выше двухтомника нет ни одного профессионального программиста. Подход 1С в обучении хорош для гуманитариев, для технарей можно было бы поглубже копнуть. Профессиональные программисты могут, конечно, и сами разобраться, но их среди одинесников не так уж и много.
#61 by Лефмихалыч
а здесь, я вижу, много кто не понимает разницу меду [применять шаблоны проектирования при разработке программ] и [использовать код, при разработке которого применялись шаблоны проектирования]
#62 by Naf2017
кстати об итераторе: "Особенностью полноценно реализованного итератора является то, что код, использующий итератор, может ничего не знать о типе итерируемого агрегата." в 1С это не совсем так с выборками, сравним: //итерируем по таблице значений // или табличной части // или массиву структур //нам все равно Для каждого Стр из Нечто Цикл   А = Стр.Чтото; КонецЦикла; //какой-то другой интерфейс итератора выборок //но почему? Пока Выборка.Следующий Цикл А = Выборка.Количество; //что? итератор обладает интерфейсом коллекции?
#63 by Mort
Кстати в БСП используется, например, "наблюдатель". Подсистемы "сами" подписываются на события, которые происходят при старте системы.
#64 by Жан Пердежон
потому что это фрагмент ADO переведенный на русский.
#65 by Лефмихалыч
1С - предметно-ориентированная платформа разработки. Большинство шаблонов проектирования, о которых речь в топике, для нее не имеют смысла, т.к. у них уровень абстракции существенно ниже, чем у платформы. Но у нее есть свои. Ни кто просто не дал себе труда их систематизировать.
#66 by Mort
Языки низкого уровня это такие языки, где нужно уделять много внимания вещам, никак не связанным с программами на этом языке. (не помню кто сказал) вот я и думаю шо все эти шаблоны как подпорки на более высокий уровень. По поводу итераторов, недавеча ознакомился с адской конструкцией C# "iEnumerator - yield". Может для гуру всяких замыканий и т.д. выглядело просто, но для 1сника было сначала сложно въехать, таки с разрывами шоблонов. А потом уже привычно стало. Советую кто не в курсе для разминки мозга изучить.
#67 by Вафель
на js тоже есть
#68 by Это_mike
"с разрывами паттернов"? :-)
#69 by Живой Ископаемый
iyeld это типа async/await? или росто async? реализуется в 1С через запуск на сервере фонового задания и ожидания его завершения через обработчик ожидания. В рамках одного клиента вроде бы не реализовать никак (разве что запускать паралельно другой клиент)
#70 by Вафель
yield - это выход из процедуры, а птом продолжение с того же места откуда выщел. например с середины цикла
#71 by Живой Ископаемый
аа..
#72 by Господин ПЖ
хавно все это... пусть софт покажут реальный где есть что-то за пределами синглетона и фабрики надутие щек
#73 by Живой Ископаемый
2 но ведь это кал коней! Этож очень фигово читается и поддерживается... Как-то человечней нельзя разве реализовать?
#74 by Вафель
наоборот. Например у тебя есть цикл обхода перестановок. Попробуй-ка с срередины в него зайди
#75 by Garykom
yield - это бесполезная хре которая ничего кроме немного уменьшения текста кода не делает полезного. Можно прекрасно обходится или объединив цикл по итератору с его вычислением внутри или передавая-возвращая нужные параметры для продолжения вычисления "следующего значения"
#76 by Вафель
читабельность кода повышается многократно. нет этих лишних вычислений по ноужным параметрам чтобы попасть в нужную точку входа
#77 by Garykom
+ ибо какая разница передавать туда-сюда параметры или неявно сохранять их где то для продолжения цикла/процедуры
#78 by Garykom
дада, ну давай покажи класс с 2-3 "елдами"
#79 by Вафель
ты и замыкания считаешь бесполезной хренью?
#80 by Mort
yield очень распростанён в геймдеве, где нужно какой-нибудь длительный процесс (например, подгрузка объектов сцены) распределить по кадрам так шоб незаметно было и без присяда до 0.1 fps.
#81 by Garykom
Замыкания как и делегаты это немного из другой оперы, на js все функции замыкания и это прикольно ))
#82 by Garykom
Эээ а разве для этого не используют классику с несколькими потоками и семафорами? Или это для тех кто многопоточное программирование не освоил да?
#83 by Живой Ископаемый
2 Ну вот мне тоже кажется что просто асинхронного выполнения кода должно хватить. Но наверное есть какие-то задачи, где и такая штука тоже удобная. Но я манал ее в 1С использовать. Тем более что многопоточность. Ну вот как ее реализовать в рамках одного сеанса на 1С? В мобильном приложении можно?
#84 by Лефмихалыч
это просто очень дорогой и сложный способ реализации goto
#85 by Вафель
как оно внутри работает не важно
#86 by Господин ПЖ
>Тем более что многопоточность. Ну вот как ее реализовать в рамках одного сеанса на 1С? фоновыми задачами
#87 by kyvv
Как работает yield от программистов
#88 by Живой Ископаемый
2 фоновая задача она ж в рамках другого сеанса выполняется, на сервере. Или нет?
#89 by Naf2017
yield вообще-то для ленивого возврата коллекций
#90 by Вафель
можешь пример написать?
#91 by Naf2017
using System; using System.Collections.Generic; public class Test {     public static void Main     {         foreach (var x in Range(5,10)) {             Console.WriteLine(x);         }     }          public static IEnumerable<int> Range(int a, int b)     {         for(int i=a; i<=b; ++i) {             yield return i;         }     } }
#92 by Вафель
а где тут возврат коллекции?
#93 by Вафель
аа, range же это коллекция
#94 by Garykom
генератор а не коллекция как бы
#95 by Вафель
IEnumerable is the base interface for all non-generic collections (c) MSDN
#96 by Garykom
И?
#97 by Garykom
"виртуальная коллекция" = генератор
#98 by Вафель
Это и есть ленивый возврат коллекции
#99 by Garykom
Да млин, никакая "коллекция" никуда не возвращается! Фактически запомнили в памяти состояние стека выполнения процедуры и вернули промежуточное значение из генератора. Затем при следующем вызове (попытке прочитать следующее значение из "виртуальной коллекции" по итератору) вычисляется (по запомненному состоянию процедуры) еще одно значение и снова возвращается и т.д.
#100 by Garykom
100
Тэги: IT-новости
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С