Насколько важный Шаблоны разработки действительно? [закрытый]

Простым JOIN вы можете достичь цели повторения записей n раз.
Следующий запрос повторяет каждую запись 20 раз.

SELECT  TableName.*
FROM    TableName
JOIN    master.dbo.spt_values on type = 'P' and number < 20


Примечание для master.dbo.spt_values on type = 'P':
Эта таблица используется для получения серии чисел, жестко закодированных в ней при условии type='P'.

49
задан meagar 29 July 2016 в 05:38
поделиться

16 ответов

Вы можете неявно преобразовать массив символов в ] LPCSTR без приведения типов:

void SomeFunction(LPCSTR aString);
...
char myArray[] = "hello, world!";
SomeFunction(myArray);

LPCSTR - это определение типа Windows для длинного указателя на постоянную строку. В темные времена программирования Win16 были разные типы указателей: ближние указатели и дальние указатели, иногда также известные как короткие и длинные указатели соответственно. Ближние указатели могли указывать только на сегмент памяти размером 64 КБ, определяемый одним из сегментных регистров x86. Далекие указатели могут указывать на что угодно. В настоящее время в Win32 с виртуальной памятью нет необходимости в ближних указателях - все указатели длинные.

Итак, LPSTR - это определение типа для char * или указателя к строке. LPCSTR - это версия const , то есть это определение типа для const char * . В C массивы распадаются на указатели на свои первые элементы, поэтому char [] распадается на char * . Наконец, любой тип «указателя на T» (для любого типа T) может быть неявно преобразован в «указатель на const T». Таким образом, объединяя эти три факта, мы видим, что мы можем неявно преобразовать char [] в LPCSTR .


В ответ на ваше редактирование, я собираюсь предположить, что вы компилируете приложение Unicode . Если вы внимательно посмотрите документацию для CreateFile () , вы заметите, что параметр имени файла на самом деле является LPCTSTR , а не LPCSTR ( обратите внимание на T ).

Практически для каждой функции Win32, которая принимает аргумент некоторого строкового типа (возможно, косвенно, то есть как член структуры, переданной как параметр), на самом деле существует две версии этой функции: одна принимает 8-битные строки ANSI, а другая - 16-битные строки широких символов. Чтобы получить фактические имена функций, вы добавляете A или W к имени функции. Так, версия ANSI CreateFile () называется CreateFileA () , а версия для расширенных символов - CreateFileW () . В зависимости от того, компилируете ли вы с включенным Unicode (т.е. определен ли символ препроцессора _UNICODE ), символ CreateFile будет #define d либо CreateFileA или CreateFileW в зависимости от ситуации, а также для любой другой функции, имеющей версию ANSI и версию для расширенных символов.

В тех же строках тип TCHAR - это typedef , измененное на char или wchar_t , в зависимости от того, включен ли Unicode, а LPCTSTR - это typedef на указатель на const TCHAR .

Таким образом,

97
ответ дан 7 November 2019 в 11:09
поделиться

Программные шаблоны важны вне зависимости от того, используете ли вы их или нет ... по определению.

Шаблон проектирования - это просто обобщенное, многократно используемое решение часто встречающейся проблемы.

Вы можете либо обходиться вокруг, пока не изобретете заново решение каждой проблемы, с которой сталкиваетесь, либо вы можете изучить «шаблоны», которые программисты использовались поколениями. Если вы формализуете свои знания о наиболее распространенных именованных шаблонах, у вас будет общий словарь для обсуждения и применения решений.

2
ответ дан 7 November 2019 в 11:09
поделиться

Шаблоны проектирования изучаются в классах проектирования для CS. Они не являются важными, но действительно полезны, если вы можете найти аналогичные ситуации, чтобы найти решение, которое было продумано.

Это также позволяет программистам более легко общаться. Вы также можете поговорить со своим коллегой о шаблонах. Если вы скажете, что у меня есть свой Наблюдатель, тогда он довольно хорошо понимает, что происходит.

Люди, естественно, будут предлагать решения, которые сами по себе будут вписываться в шаблон проектирования, но шаблоны проектирования помогают определить терминология и стандартные идеи, которые могут быть полезны.

В шаблонах нет ничего сверхъестественного, самое приятное то, что это идеи, которые канонизированы и определены способами, которые многократно используются.

1
ответ дан 7 November 2019 в 11:09
поделиться

Отличный вопрос! Я задавал себе этот вопрос неделю назад. Я использую их всякий раз, когда могу, но на самом деле я не нахожу много возможностей их использовать. Я лично считаю, что идея шаблонов дизайна прекрасна. Инженеры-механики и инженеры-электронщики не проектируют с нуля, а применяют хорошо понятные шаблоны, которые, помимо прочего, позволяют новичкам опираться на знания, заложенные их предшественниками. Шаблоны проектирования - это шаг в правильном направлении, но необходимо сделать гораздо больше.

3
ответ дан 7 November 2019 в 11:09
поделиться

Я бы сказал, что они определенно важны.

Среди типичных причин (общий словарный запас, отказ от изобретения велосипеда заново) они являются ступенькой к изучению хорошего дизайна программного обеспечения. Большинство существующих шаблонов проектирования начинаются программистами, хорошо разбирающимися в принципах объектно-ориентированного проектирования, применяя свои знания для решения проблемы и замечая, что другие люди предлагают такое же решение. Если вы думаете о шаблонах проектирования как о кулинарной книге для решения текущей проблемы, на которой вы застряли, они на самом деле бесполезны, и именно здесь вы видите «молоток шаблонов проектирования», который усложняет дизайн.

Если вместо этого воспринимайте это как окно в хороший объектно-ориентированный дизайн, и вы начинаете понимать, насколько они ценны, т.е.

4
ответ дан 7 November 2019 в 11:09
поделиться

Я бы сказал очень

Уловка с шаблонами проектирования состоит в том, чтобы узнать, где и когда их использовать . Затем вы можете делать все, что вам нравится:

  1. Сделайте ваш код более читаемым
  2. Сделайте его простым в обслуживании
  3. Сделайте его более гибким
  4. И этот список можно продолжить ...

Но иногда они могут сделать прямо противоположное некоторым из этих преимуществ, опять же, зная, как и когда ...

Вы когда-нибудь пробовали вытащить ленту с помощью молотка? Вы можете любить свой фреймворк, но он вызовет всевозможные проблемы, если вы попытаетесь использовать его таким образом ...

Я думаю, что по мере того, как вы реорганизуете код, он иногда превращается в определенный шаблон, или вы, возможно, использовали шаблон все время, даже не осознавая этого.

4
ответ дан 7 November 2019 в 11:09
поделиться

Важно не то слово, которое я бы использовал. Я бы использовал слово «полезный». Полезно дать разработчикам общий язык для описания частых проблем / решений, особенно в среде совместной работы.

8
ответ дан 7 November 2019 в 11:09
поделиться

Я считаю паттерны проектирования малопригодными. Любая хорошо организованная и спроектированная программная среда имеет сотни шаблонов проектирования, и очень немногие из них описаны в формальной «литературе по шаблонам».

До появления шаблонов проектирования существовало хорошо разработанное программное обеспечение, в котором было много шаблонов, которые можно было повторно использовать во многих ситуациях. Например, книга Кернигана и Ричи по C содержала пример калькулятора, реализованного с использованием yacc и lex, а также стека, таблицы символов, передачи указателя на функцию (т.е. в основном динамического связывания) и содержал большое количество шаблонов для размера книги.

Вы, вероятно, сможете изучить сотни более полезных шаблонов проектирования, изучив, например, платформу Microsoft .NET, библиотеки классов Java и т. Д., Чем прочитав книгу по шаблонам проектирования.

Действительно, хороший софт имеет дизайн. И если дизайн хороший, его, вероятно, можно будет использовать повторно. Вуаля - шаблон дизайна.

7
ответ дан 7 November 2019 в 11:09
поделиться

Мы использовали шаблоны проектирования в 80-х годах, мы просто не знали, что это шаблоны проектирования.

Таким образом, шаблоны проектирования - это просто формальный язык для определения общих способов решения проблем программной инженерии. Я думаю, что большинство людей используют шаблоны проектирования, даже не подозревая об этом. Таким образом, эти общие решения проблем программного обеспечения могут возникать очень давно, просто у них не было формального языка для описания того, что они делают.

Я считаю, что шаблоны проектирования важны, потому что они учат вас командным способам решения проблем в областях, к которым применяются шаблоны проектирования.

9
ответ дан 7 November 2019 в 11:09
поделиться

Я видел слишком много случаев синдрома «маленького мальчика с узором». Обычно это проявляется сильнее всего сразу после того, как человек впервые прочитает книгу GoF, и мгновенно убегает, чтобы посмотреть, сколько из них они могут вписаться в проект, над которым они работают. (Дополнительные баллы за то, чтобы втиснуть все 23 в один проект.) В итоге получается система, которая спроектирована в пределах одного дюйма от ее срока службы и которую невозможно понять или изменить.

В конце концов лихорадка проходит, и они успокаиваются, чтобы использовать их по назначению. Но ущерб может быть огромным.

Поучительная история - книга "Core Java EE Patterns". В нем перечислено множество материалов, касающихся «лучших практик» для EJB 1.0 и 2.0, которые теперь считаются анти-шаблонами. Спецификация EJB 3.0 устраняет многие из них. Весна убивает все остальное.

Узоры, как и UML, нашли свое применение на солнце. Но солнце садится на обоих. Я не думаю, что кто-то спас мир или поднял шумиху.

10
ответ дан 7 November 2019 в 11:09
поделиться

Лично я считаю их сильно преувеличенными и несущественными . Идея звучит великолепно, но когда вы дойдете до нее, на самом деле есть лишь несколько общих и достаточно полезных, чтобы их стоило запомнить (и их можно было запомнить).

Я бы сказал, что их общий эффект отрицательный из-за чудовищный сверхинженер, совершаемый людьми, недавно увлеченными этой концепцией и пытающимися втиснуть в свой код как можно больше шаблонов. Возможно, еще хуже эффект молотка Маслоу , приводящий к плохому дизайну, потому что вместо того, чтобы найти оптимальный, разработчик запомнил шаблон проектирования, который подходит (плохо).

27
ответ дан 7 November 2019 в 11:09
поделиться

Они не абсолютно необходимы, но хорошее определенно перевешивает плохое.

Плюсы:

  1. Читаемость кода: Они действительно помогают вам писать более понятный код с лучшими названиями для того, что вы пытаетесь выполнить.
    • Поддерживаемость кода: Позволяет поддерживать ваш код проще, потому что он более понятен.
    • Коммуникация: Они помогают вам сообщать о целях дизайна среди программистов.
    • Намерение: Они мгновенно показывают намерение вашего кода тому, кто его изучает.
    • Повторное использование кода: Они помогают вам определить общие решения общих проблем.
    • Меньше кода: Они позволяют писать меньше кода, потому что большая часть вашего кода может получить общие функции из общих базовых классов .
    • Проверенные и надежные решения: Большинство шаблонов проектирования проверены, проверены и надежны.

Плохо:

  1. Дополнительные уровни косвенного обращения: Они обеспечивают дополнительный уровень косвенного обращения и, следовательно, сделайте код немного сложнее.
    • Знание, когда их использовать: Они часто подвергаются злоупотреблениям и используются в случаях, которых не следует. Простая задача может не нуждаться в дополнительной работе по решению с использованием шаблона проектирования.
    • Различные интерпретации: Люди иногда имеют несколько разные интерпретации шаблонов проектирования. Пример MVC с точки зрения django и MVC с точки зрения Ruby on Rails.
    • Синглтон: Нужно ли мне сказать больше?
40
ответ дан 7 November 2019 в 11:09
поделиться

На мой взгляд, самое большое преимущество шаблонов проектирования состоит в том, что они дают разработчикам общий словарь для разговоров о программных решениях.

Если я скажу: «Мы должны реализовать это с помощью одноэлементного шаблона», у нас будет общая точка отсчета, чтобы начать обсуждение того, хорошая ли это идея, без необходимости сначала реализовать решение, чтобы вы знали, что я значит.

Добавьте удобочитаемость и удобство сопровождения, которые приходят со знакомыми решениями общих проблем, вместо того, чтобы каждый разработчик пытался решить проблему по-своему снова и снова.

Довольно важно. Программное обеспечение можно сделать и без них, но это, безусловно, намного сложнее.

61
ответ дан 7 November 2019 в 11:09
поделиться

Хотя это может быть полезно Говоря иногда о шаблонах проектирования, я склонен соглашаться с теми, кто считает их вредными во многих ситуациях.

Главный аргумент, который я бы выдвинул, заключается в том, что часто они фактически мешают людям найти правильные решения для конкретной проблемы. Вместо того, чтобы думать о том, как решить эту конкретную проблему, люди пытаются применять один шаблон дизайна за другим.

Они также склонны скрывать языковые недостатки. Многие из них банальны на достаточно выразительном языке. Ярким примером может служить шаблон «Стратегия», который, по сути, представляет собой сложное переосмысление функционального программирования. Часто людям было бы лучше понять настоящие принципы программирования, чем просто говорить на языках шаблонов.

Сказав это: я бы лучше поговорил о шаблонах с кем-нибудь, чем вообще не имел бы общего языка. В этом смысле они важны, если нет лучшего варианта. Если я могу объясниться более формально (например, алгебры), тогда я перестану беспокоиться о языках шаблонов. Конечно, некоторые утверждают, что таким образом я просто изобрел свои собственные языки шаблонов; -)

Они также склонны скрывать языковые недостатки. Многие из них банальны на достаточно выразительном языке. Ярким примером может служить шаблон «Стратегия», который, по сути, представляет собой сложное переосмысление функционального программирования. Часто людям было бы лучше понять настоящие принципы программирования, чем просто говорить на языках шаблонов.

Сказав это: я бы лучше поговорил о шаблонах с кем-нибудь, чем вообще не имел бы общего языка. В этом смысле они важны, если нет лучшего варианта. Если я могу объясниться более формально (например, алгебры), тогда я перестану беспокоиться о языках шаблонов. Конечно, некоторые утверждают, что таким образом я просто изобрел свои собственные языки шаблонов; -)

Они также склонны скрывать языковые недостатки. Многие из них банальны на достаточно выразительном языке. Ярким примером может служить шаблон «Стратегия», который, по сути, представляет собой сложное переосмысление функционального программирования. Часто людям было бы лучше понять настоящие принципы программирования, чем просто говорить на языках шаблонов.

Сказав это: я бы лучше поговорил о шаблонах с кем-нибудь, чем вообще не имел бы общего языка. В этом смысле они важны, если нет лучшего варианта. Если я могу объясниться более формально (например, алгебры), тогда я перестану беспокоиться о языках шаблонов. Конечно, некоторые утверждают, что таким образом я просто изобрел свои собственные языки шаблонов; -)

Ярким примером может служить шаблон «Стратегия», который, по сути, представляет собой сложное переосмысление функционального программирования. Часто людям было бы лучше понять настоящие принципы программирования, чем просто говорить на языках шаблонов.

Сказав это: я бы лучше поговорил о шаблонах с кем-нибудь, чем вообще не имел бы общего языка. В этом смысле они важны, если нет лучшего варианта. Если я могу объясниться более формально (например, алгебры), тогда я перестану беспокоиться о языках шаблонов. Конечно, некоторые утверждают, что таким образом я просто изобрел свои собственные языки шаблонов; -)

Ярким примером может служить шаблон «Стратегия», который, по сути, представляет собой сложное переосмысление функционального программирования. Часто людям было бы лучше понять настоящие принципы программирования, чем просто говорить на языках шаблонов.

Сказав это: я бы лучше поговорил о шаблонах с кем-нибудь, чем вообще не имел бы общего языка. В этом смысле они важны, если нет лучшего варианта. Если я могу объясниться более формально (например, алгебры), тогда я перестану беспокоиться о языках шаблонов. Конечно, некоторые утверждают, что таким образом я просто изобрел свои собственные языки шаблонов; -)

Я лучше буду говорить с кем-то о закономерностях, чем не иметь общего языка. В этом смысле они важны, если нет лучшего варианта. Если я могу объясниться более формально (например, алгебры), тогда я перестану беспокоиться о языках шаблонов. Конечно, некоторые утверждают, что таким образом я просто изобрел свои собственные языки шаблонов; -)

Я лучше буду говорить с кем-то о закономерностях, чем не иметь общего языка. В этом смысле они важны, если нет лучшего варианта. Если я могу объясниться более формально (например, алгебры), тогда я перестану беспокоиться о языках шаблонов. Конечно, некоторые утверждают, что таким образом я просто изобрел свои собственные языки шаблонов; -)

9
ответ дан 7 November 2019 в 11:09
поделиться

Начните с принципов, прежде чем рассматривать шаблоны, потому что это всеобъемлющие принципы дизайна, которые информируют и мотивируют появление шаблонов.

. Для решения вашей конкретной проблемы вам лучше всего будет служить, прежде всего, следуя принципам. Если вы придете к хорошо известному Узору, поздравляю, вы только что заново открыли Узор, и это хорошо для вас. Проблема в том, что это может занять у вас много времени, поэтому все зависит от того, хотите ли вы рискнуть изобрести несколько анти-паттернов по пути или хотите сократить путь к чему-то, что уже было опубликовано. Учтите это, потому что вы узнаете больше, чем читая чужие описания своей работы.

2
ответ дан 7 November 2019 в 11:09
поделиться

прокомментировал Шаблоны проектирования полезны, если вы пытаетесь внести свой вклад в проекты с открытым исходным кодом ... достаточно сказано!

1
ответ дан 7 November 2019 в 11:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: