Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2014-04-10

Шаблоны проектирования

Шаблоны проектирования в том смысле, что это software design patterns.

Как правильно замечено, design patterns облегчают общение программистов — вместо того, чтобы долго объяснять «берем вон ту загогулину и пихаем ее в эту заковырину», достаточно сказать нечто типа «а тут мы применим шаблон делегирования», и тебя поймут. И что немаловажно, поймут правильно.

С другой стороны, изучение шаблонов проектирования позволяет получить представление о best practices при решении разных программерских задачек. Нет нужды изобретать велосипеды — все уже изобретено, причем неоднократно :)

Лично я полагаю, что design patterns это обоюдоострое оружие. Можно легко пораниться. Посмотрите, к примеру, на Zope. Сделано как в лучших домах — по всем правилам и паттернам. С точки зрения надежности, применимости и расширяемости — все прекрасно. Архитектура на ять. Но каково человекам, которые пытаются разобраться в этом хитровыебанном сплетении миллионов интерфейсов, адаптеров, утилит и прочих сервисов? Инструмент прекрасен, архитектура бесподобна, но никто не пользуется, ибо проще сделать что-то свое, с блекджеком и шлюхами, чем разобраться в том, как правильно использовать Zope.

Или вот, замечено, что некоторые шаблоны просто не нужны, если использовать правильный язык программирования:
Peter Norvig demonstrates that 16 out of the 23 patterns in the Design Patterns book (that is primarily focused on C++) are simplified or eliminated (via direct language support) in Lisp or Dylan.

Тем не менее, design patterns необходимо изучать и применять на практике.
Поэтому — вот нам, питонистам, набор ресурсов для изучения:

Коллекция модулей Python с шаблонной реализацией шаблонов (хаха) https://github.com/faif/python-patterns

Несколько более структурированная коллекция модулей Python, человек книгу пишет https://bitbucket.org/davidcorne/design-patterns-in-python/src
И набор блогостатей от автора http://davidcorne.com/category/design-patterns-in-python/




original post http://vasnake.blogspot.ru/2014/04/blog-post_10.html

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Klaipeda (15) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) Baltic (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) seaside (1) serialization (1) shore (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)