З’яўляецца праектаванне мёртвых?
Original on http://www.martinfowler.com/articles/designDead.html
Для многіх, якія прыходзяць коратка ў кантакт з экстрэмальнага праграмавання, здаецца, што XP патрабуе смерці праграмнага забеспячэння. Не толькі значна дзейнасці дызайн высмейваюць як “Вялікі Up Front Design”, але такія метады дызайну, як UML, гнуткія структуры, і нават карціны дэ-падкрэсліў або цалкам ігнаруецца. На самай справе XP ўключае ў сябе шмат дызайн, але робіць гэта інакш, чым устаноўленыя працэсы праграмнага забеспячэння. XP амаладзіў паняцце эвалюцыйнага праектавання з практыкай, што дазволіць эвалюцыі, каб стаць жыццяздольнай стратэгіі дызайну. Ён таксама дае новыя выклікі і навыкі, дызайнеры павінны даведацца, як зрабіць просты дызайн, як выкарыстоўваць рэфактарынг захаваць дызайн чыстымі, і як выкарыстоўваць шаблоны ў эвалюцыйным стылі.
(Гэты артыкул была напісана для майго выступу на XP 2000 канферэнцыі і яе першапачатковым выглядзе быў апублікаваны як частка вытворчасці.)
Змест
- Планаваныя і Эвалюцыйны дызайн
- Уключэнне практыкі XP
- Значэнне Прастата
- Што на Зямлі з’яўляецца прастата любым выпадку
- Рэфактарынг Ці парушаць YAGNI?
- Шаблоны і XP
- Якая расце Архітэктура
- UML і XP
- На Метафара
- Ці хочаце вы быць архітэктарам, калі вырасцеш?
- Зварачальнасць
- Воля да дызайну
- Рэчы, якія цяжка раскласці ў
- З’яўляецца праектаванне адбываецца?
- Так Дызайн мёртвых?
- Падзякі
Экстрэмальнае праграмаваньне (XP) праблемамі многія з агульных здагадак аб распрацоўцы праграмнага забеспячэння. З іх адным з найбольш спрэчных з’яўляецца яго адмова ад значных намаганняў у да-дызайн пярэдняй часткі, у карысць больш эвалюцыйнага падыходу. Для яго кляцьбіт гэта вяртаньне да “код і выправіць” развіццё – як правіла, высмейваў як ўзлом. Для сваіх прыхільнікаў ён часта разглядаецца як адмова ад метадаў праектавання (напрыклад, UML), прынцыпаў і мадэляў. Не турбуйцеся аб дызайне, калі вы слухаеце ў код добры дызайн з’явіцца.
Я знаходжуся ў цэнтры гэтага аргументу. Большая частка маёй кар’еры прыцягнуў графічны дызайн мовах – Unified Modeling Language (UML) і яго папярэднікі – і ў характары. На самай справе я напісаў кнігі па абодва UML і шаблонаў. Ці мае абдымкі XP азначае, што я зрачыся ад усіх, што я напісаў па гэтых пытаннях, чысткі мой погляд, з усіх такіх контррэвалюцыйных паняцці?
Ну, я не буду чакаць, што я магу пакінуць вас абадраных на крук драматычнае напружанне. Кароткі адказ: не. Доўгі адказ на астатняй частцы гэтага артыкула.
Планаваныя і Эвалюцыйны дызайн
Па гэтым артыкуле я збіраюся апісаць двума стылямі, як дызайн робіцца ў распрацоўцы праграмнага забеспячэння. Магчыма, найбольш распаўсюджанай з’яўляецца эвалюцыйнае праектаванне. Па сутнасці эвалюцыйны дызайн азначае, што дызайн сістэмы расце як сістэма рэалізавана. Дызайн з’яўляецца часткай працэсаў праграмавання і як праграма развіваецца змяненняў у праект.
У сваім агульнага карыстання, эвалюцыйны дызайн гэта катастрофа. Дызайн заканчвае тым, што агрэгацыя кучу спецыяльных тактычных рашэнняў, кожны з якіх робіць код цяжэй змяніць. У многіх адносінах вы можаце сцвярджаць, што гэта не дызайн, вядома, гэта звычайна прыводзіць да дрэнны дызайн. Як Кент словах, дызайн ёсць, каб вы маглі пастаянна змяняць праграмнае забеспячэнне лёгка ў доўгатэрміновай перспектыве. Як дызайн пагаршаецца, і ваша здольнасць эфектыўна ўносіць змены. У вас ёсць стан праграмнага забеспячэння энтрапіі, з цягам часу дызайн становіцца ўсё горш і горш. Гэта не толькі робіць праграмнае забеспячэнне цяжэй змяніць, гэта таксама робіць памылак і лягчэй разводзіць і цяжэй знайсці і бяспечна забіць. Гэта “код і выправіць” кашмар, дзе памылкі экспаненцыяльная стаць даражэй выправіць як праект працягваецца.
Планаваныя Дызайн супярэчыць гэтаму, і змяшчае паняцці нарадзіліся з іншых галін тэхнікі. Калі вы хочаце пабудаваць будку, вы можаце проста атрымаць дрэва разам і атрымаць грубай форме. Аднак, калі вы хочаце пабудаваць хмарачос, вы не можаце працаваць такім чынам – гэта будзе проста крах, перш чым вы нават атрымаеце палову шляху. Так вы пачынаеце з інжынерныя чарцяжы, выкананыя ў канструктарскае бюро, як адна мая жонка працуе ў цэнтры Бостана. Як яна робіць дызайн яна высвятляе ўсе пытанні, часткова матэматычнага аналізу, але ў асноўным з дапамогай будаўнічых нормаў і правілаў. Будаўнічыя нормы і правілы аб тым, як вы структур дызайн, заснаваны на вопыце, што працуе (і некаторыя асноўныя матэматыцы). Пасля дызайн будзе зроблена, то яе інжынерная кампанія можа боку дызайну ад іншай кампаніі, якая будуе яго.
Планаваныя дызайну ў праграмнае забеспячэнне павінна працаваць так жа. Дызайнеры прыдумляюць вялікія пытанні загадзя. Ім не трэба пісаць код, таму што яны не будуюць праграмнага забеспячэння, яны яго планаванне. Такім чынам яны могуць выкарыстоўваць дызайн тэхнікі, як UML, які атрымлівае ад некаторых падрабязнасцяў праграмавання і дазваляе дызайнерам працаваць на больш абстрактным узроўні. Як толькі канструкцыя зроблена яны могуць руку яго да асобнай групе (ці нават асобную кампанію), каб пабудаваць. Паколькі дызайнеры думаюць пра больш буйных маштабах, яны могуць пазбегнуць серыі тактычных рашэнняў, якія прыводзяць да праграмнага забеспячэння энтрапіі. Праграмісты могуць вынікаць у напрамку распрацоўкі і, калі яны ідуць канструкцыю, мае таксама ўбудаваныя сістэмы
Зараз плануецца падыход да дызайну была прыкладна з 70-х гадоў, і многія людзі выкарыстоўваюць яго. Гэта лепш у многіх адносінах, чым кода і выправіць эвалюцыйнага праектавання. Але яна мае некаторыя недахопы. Першая памылка ў тым, што гэта немагчыма прадумаць ўсе пытанні, якія вам прыйдзецца мець справу з тым, калі вы праграмавання. Так што гэта непазбежна, што пры праграмаванні вы знойдзеце тое, што пытанне дызайну. Аднак, калі дызайнеры зрабілі, пераехаў на іншы праект, што адбываецца? Праграмісты пачынаюць кадавання вакол дызайну і энтрапіі надыходзіць Нават калі дызайнер не сышоў, гэта займае час, каб разабрацца ў пытаннях дызайну, змены малюнкаў, а затым змяніць код. Там, як правіла, хутчэй выправіць і недахопу часу. Такім чынам, энтрапія (ізноў жа).
Акрамя таго там часта культурная праблема. Дызайнеры зрабілі дызайнеры з навыкаў і досведу, але яны настолькі занятыя працай над канструкцыямі яны не атрымліваюць шмат часу, каб код больш. Аднак прылады і матэрыялы, праграмнае забеспячэнне змены развіццё хуткімі тэмпамі. Калі вам больш не кода не толькі вы можаце ўпусціць змены, якія адбываюцца з гэтым тэхналагічным патокам, вы таксама страціце павагу тых, хто кода.
Гэта супярэчнасць паміж будаўнікамі і праекціроўшчыкамі адбываецца ў будынку таксама, але гэта больш інтэнсіўным у праграмным забеспячэнні. Гэта інтэнсіўнае, таму што ёсць ключавое адрозненне. У будынку ёсць выразны падзел на навыкі паміж тымі, хто праектуе і тых, хто будуе, але і ў праграмнае забеспячэнне, якое менш выпадку. Любы праграміст, які працуе ў асяроддзі з высокай дызайн павінен быць вельмі кваліфікаваны. Кваліфікаваныя дастаткова, каб пытанне канструкцый дызайнера, асабліва, калі дызайнер менш дасведчаныя аб паўсядзённых рэалій развіцця платформы.
Цяпер гэтыя пытанні могуць быць выпраўленыя. Можа быць, мы можам мець справу з чалавечым напружанасці. Можа быць, мы можам атрымаць дызайнераў ўмелымі, каб вырашаць большасць пытанняў, і працэс досыць дысцыплінаваны, каб змяненні малюнкаў. Там яшчэ іншая праблема: змяненне патрабаванняў. Змяненне патрабаванняў нумар адзін вялікі пытанне, які выклікае галаўны боль у праграмных праектаў, што я бягу ў.
Адзін спосаб мець справу з змяненнем патрабаванняў з’яўляецца стварэнне гнуткасці дызайну, так што вы можаце лёгка змяніць яго, як змяненне патрабаванняў. Аднак для гэтага неабходна разуменне, якія змены Вы чакаеце. Дызайн могуць быць запланаваны для разгляду агменях напружанасці, але ў той час, што дапаможа для зьмены прадугледжаны патрабаванні, гэта не дапаможа (і можа пашкодзіць) на непрадбачаныя змены. Такім чынам, вы павінны зразумець патрабаванні дастаткова добра, каб асобныя нестабільных раёнах, і маё заўвагу, што гэта вельмі цяжка.
Цяпер некаторыя з гэтых патрабаванняў праблемы з-за не разумення патрабаванняў дастаткова ясна. Так шмат людзей, засяродзіць увагу на патрабаванні тэхналагічных працэсаў, каб атрымаць лепшае патрабаванні ў надзеі, што гэта прадухіліць неабходнасць змены дызайну пазней. Але нават гэта напрамак, якое не можа прывесці да лячэння. Многія непрадбачаныя змены патрабаванняў адбываюцца ў сувязі са зменамі ў бізнэсе. Тыя, хто не можа быць папярэджана, аднак асцярожнасць вашым патрабаванням тэхналагічнага працэсу.
Такім чынам, усё гэта робіць плануецца дызайн гуку немагчыма. Вядома, яны вялікія праблемы. Але я не схільны сцвярджаць, што плануецца распрацоўка горш, чым эвалюцыйны дызайн, як гэта звычайна практыкуецца ў “кодзе і выправіць” чынам. Сапраўды, я аддаю перавагу плануецца дызайн “код і выправіць”. Аднак я ведаю, праблемы плануецца праектаванне і шукаю новае напрамак.
Уключэнне практыкі XP
XP з’яўляецца спрэчнай па многіх прычынах, але адна з ключавых чырвоныя сцягі ў XP з’яўляецца тое, што прыхільнікі эвалюцыйнага праектавання, а не плануецца дызайну. Як мы ведаем, эвалюцыйнага праектавання не можа працаваць з-за спецыяльных праектных рашэнняў і праграмнага забеспячэння энтрапіі.
У аснове разумення гэты аргумент крывой зменамі праграмнага забеспячэння. Змяненне крывой кажа, што як праект запуску становіцца экспаненцыяльная больш дарагія занесці змены. Змяненне крывой звычайна выяўляецца ў тэрмінах фаз “змены, унесеныя ў аналізе за $ 1 будзе каштаваць тысячы выправіць у вытворчасці”. Гэта іранічнае, паколькі большасць праектаў ўсё яшчэ працуюць у спецыяльных працэс, які не мае фазавага аналізу, але ўзвядзенне ў ступень па-ранейшаму існуе. Экспаненцыяльная крывая змены азначае, што эвалюцыйны дызайн не можа быць эфектыўнай. Яна таксама перадае, чаму плануецца праектаванне павінна быць зроблена дбайна, таму што любыя памылкі ў запланаваных дызайн сутыкаюцца з тымі ж узвядзенне ў ступень.
Асноўнае здагадка асноўных XP з’яўляецца тое, што гэта магчыма, каб згладзіць змены крывой дастаткова, каб зрабіць эвалюцыйны-канструктарскіх работ. Гэта уплощение з’яўляецца і ўключана па XP і эксплуатацыі з боку XP. Гэта з’яўляецца часткай сувязь практыкі XP: канкрэтна вы не можаце зрабіць тыя часткі XP, якія выкарыстоўваюць уплощенная крывая без рабіць тыя рэчы, якія дазваляюць уплощения. Гэта агульны крыніца спрэчка XP. Многія людзі крытыкуюць эксплуатацыі без разумення спрыяльнай. Часта крытыкі вынікаюць з крытыкаў ўласнага досведу, дзе яны не рабілі спрыяльных практыкі, якія дазваляюць выкарыстання практыкі на працу. У выніку яны атрымалі спалены і калі яны бачаць XP яны памятаюць пажар.
Ёсць шмат частак на спрыяльных практыкі. У аснове з’яўляюцца практыкі тэсціравання і бесперапыннай інтэграцыі. Без забеспячэння бяспекі пры ўмове, праверыўшы астатнія XP будзе немагчыма. Бесперапынная інтэграцыя неабходная, каб захаваць каманду ў сінхранізацыі, так што вы можаце зрабіць змены і не турбавацца аб яе інтэграцыі з іншымі людзьмі. Разам гэтыя практыкі могуць мець вялікі ўплыў на змяненне крывой. Я ўспомніў пра гэта яшчэ раз тут, на ThoughtWorks. Уводзіны тэсціравання і бесперапыннай інтэграцыі аказалі прыкметнае паляпшэнне па развіцці намаганняў. Вядома, дастаткова, каб сур’ёзна пытанне зацвярджэння XP, што вам трэба ўсё практыкі, каб атрымаць вялікі крок наперад.
Рэфактарынг мае аналагічны эфект. Людзі, якія рэарганізаваць свой код у дысцыплінавана прапанаваных XP знайсці істотнае адрозненне ў іх эфектыўнасці ў параўнанні з робіць слабей, больш спецыяльных рэструктурызацыі. Гэта было, безумоўна, мой вопыт раз Кент вучыў мяне, каб рэарганізаваць правільна. У рэшце рэшт, толькі такія моцныя змены б заахвоціла мяне напісаць цэлую кнігу аб гэтым.
Джым Хайсмит, у яго выдатнае рэзюмэ XP, выкарыстоўваецца аналогія мноства маштабах. У адным з латкоў плануецца праектаванне, іншы рэфактарынгу. У больш традыцыйных падыходаў плануецца дызайн дамінуе, паколькі мяркуецца, што вы не можаце змяніць сваё рашэнне пазней. Як кошт ўнясення змяненняў зніжае то вы можаце зрабіць больш вашага дызайну пазней рэфактарынгу. Запланаваны праект не праходзіць цалкам, але ў цяперашні час баланс двух падыходаў да праектавання для працы з. Для мяне такое пачуццё, што да рэфактарынгу я рабіў усё праектныя маёй адной рукой.
Гэтыя спрыяльныя практыку бесперапыннай інтэграцыі, тэсціравання і рэфактарынгу, забяспечыць новую сераду, што робіць эвалюцыйны дызайн праўдападобным. Аднак адна рэч, якую мы яшчэ не высветлілі, дзе баланс кропка. Я ўпэўнены, што, нягледзячы на? ? знешні ўражанне, XP гэта не проста тэст, код, і рэфактарынг. Існуе магчымасць для праектавання да кадавання. Некаторыя гэта да таго, як любы кадоўцы, большасць з іх адбываецца ў ітэрацый да кадавання для канкрэтнай задачы. Але ёсць і новы баланс паміж да-дызайн пярэдняй часткі і рэфактарынгу.
Значэнне Прастата
Два з найвялікшых ралі крыкі ў XP з’яўляюцца лозунгі “рабіць тое, што просты, якія маглі б праца” і “Вы не будзеце мець патрэбу ў гэтым” (вядомы як YAGNI). Абодва з’яўляюцца праявай практыкі XP з простай дызайн.
Спосаб YAGNI звычайна апісваецца, ён кажа, што вы не павінны дадаваць код, які сёння будзе выкарыстоўвацца толькі на функцыю, якая неабходная заўтра. На першы погляд гэта здаецца простым. Гэтае пытанне набывае з такімі рэчамі, як рамкі, паўторна выкарыстоўваныя кампаненты, і гнуткасцю. Такія рэчы складана пабудаваць. Вы плаціце дадатковыя авансавыя выдаткі будаваць іх, у надзеі, што вы атрымаеце назад, што кошт пазней. Гэтая ідэя будынка гнуткасць авансавыя разглядаецца як ключавы элемент эфектыўнай распрацоўкі праграмнага забеспячэння.
Аднак савет XP з’яўляецца тое, што вы не ствараць гнуткія кампаненты і сістэмы для першага выпадку, што патрэбы, якія функцыянальнасці. Няхай гэтыя структуры растуць па меры неабходнасці. Калі я хачу сёння Грошы клас, які апрацоўвае таго, але не множанне, то я будую толькі таго ў класе грошы. Нават калі я ўпэўнены, што мне трэба множанне ў наступнай ітэрацыі, і зразумець, як зрабіць гэта лёгка, і думаю, гэта будзе вельмі хутка рабіць, я ўсё роўна пакінуць яго да таго наступнай ітэрацыі.
Адна з прычын гэтага з’яўляецца эканамічны. Калі я павінен зрабіць любы працы, якая выкарыстоўваецца толькі для функцыі, што трэба заўтра, гэта азначае, што я губляю высілкаў ад функцый, якія неабходна зрабіць для гэтай ітэрацыі. Плана выпуску кажа, што трэба працаваць цяпер, працуючы на? ? іншых рэчаў у будучыні супярэчыць распрацоўшчыкаў ўзгадненні з заказчыкам. Існуе рызыка таго, што гісторыі гэтай ітэрацыі не можа зрабіць. Нават калі гісторыі гэтай ітэрацыі не рызыкуюць гэта да кліента вырашыць, якія дадатковыя работы павінна быць зроблена – і што можа яшчэ не звязаны з множаннем.
Гэты эканамічны перашкодай пагаршаецца верагоднасць таго, што мы не можа атрымаць гэта права. Аднак упэўнены, што мы можа быць аб тым, як працуе гэтая функцыя, мы ўсё яшчэ можам атрымаць яго не так – тым больш, што ў нас няма падрабязных патрабаванняў яшчэ. Праца на няправільнае рашэнне рана яшчэ больш марнатраўна, чым праца на правільнае рашэнне рана. І XPerts наогул лічу, што мы значна больш верагодна, будзе няправільна, чым права (і я згодны з гэтым сцвярджэннем.)
Другая прычына простая канструкцыя з’яўляецца тое, што складаная канструкцыя з’яўляецца больш цяжкім для разумення, чым просты дызайн. Таму любая змена сістэмы вырабляецца цяжэй дадатковыя складанасці. Гэта дадае кошт у перыяд паміж тым, калі больш складаную канструкцыю быў дададзены, і калі гэта было неабходна.
Зараз гэты савет удараў шмат людзей, як глупства, і яны маюць рацыю, думаю, што. Права пры ўмове, што вы ўявіць сабе звычайны свет, дзе развіццё спрыяльнай практыкі XP не на месцы. Аднак, калі баланс паміж запланаванымі і эвалюцыйнай змяняе дызайн, то YAGNI становіцца добрай практыкай (і толькі тады).
Такім чынам, каб падвесці вынік. Вы не хочаце марнаваць намаганні дадання новых магчымасцяў, якія не будуць неабходныя да будучага ітэрацыі. І нават калі кошт роўная нулю, вы ўсё яшчэ не хочуць, каб дадаць яго, бо гэта павялічвае кошт мадыфікацыі, нават калі ён нічога не варта уставіў Аднак Вы можаце толькі разумна паводзіць сябе такім чынам, калі вы выкарыстоўваеце XP ці аналагічны тэхніка, якая зніжае кошт ўнясення змяненняў.
Што на Зямлі з’яўляецца прастата любым выпадку
Такім чынам, мы хочам, каб наш код, каб быць як мага больш простым. Гэта не падобна, што гэта занадта цяжка спрачацца, у рэшце рэшт, хто хоча быць складана? Але гэта, вядома, напрошваецца пытанне: “Што гэта проста? ”
У XPE Кент дае чатыры крытэрыі для простай сістэмы. У мэтах (найбольш важным першым):
- Выконвае ўсе тэсты
- Паказвае ўсе намеры
- Няма дубліравання
- Найменшая колькасць класаў і метадаў
Запуск усіх выпрабаванняў з’яўляецца даволі просты крытэрый. Няма дубліравання таксама даволі простая, хоць шматлікія распрацоўнікі маюць патрэбу ў кіраўніцтве аб тым, як дасягнуць гэтага. Складана, што трэба зрабіць з выяўленнем намеры. Што менавіта гэта значыць?
Асноўная каштоўнасць тут яснасці кода. XP надае вялікае значэнне на код, які лёгка чытаецца. У XP “разумны код” з’яўляецца лаянкавым. Але намеры некаторых людзей выяўлення код чужога розуму.
У сваім XP 2000 папера, Джош Kerievsky паказвае добрым прыкладам гэтага. Ён глядзіць на магчыма большасць дзяржаўных XP код ўсіх – JUnit. JUnit выкарыстоўвае дэкаратары для дадання дадатковых функцый для праверкі выпадкаў, такія рэчы, як сінхранізацыя паралелізму і партыю стварыць код. Падзяляючы гэты код у дэкаратараў дазваляе агульнага кода, які будзе ясней, чым гэта было б у адваротным выпадку.
Але вы павінны спытаць сябе, калі атрыманы код вельмі просты. Для мяне гэта, але потым я знаёмы з шаблонам Decorator. Але для многіх, што не гэта даволі складаны. Аналагічным JUnit выкарыстоўвае падключаецца метады, якія я заўважыў, большасць людзей спачатку знайсці што-небудзь, але ясна. Так мы маглі б заключыць, што дызайн JUnit з’яўляецца простай для вопытных дызайнераў, але больш складанай для менш вопытных людзей?
Я думаю, што асноўная ўвага на ліквідацыі дубліравання, як з XP, “толькі адзін раз” і прагматычны праграміста DRY (Don’t не паўтарацца) з’яўляецца адным з тых відавочных і дзіўна магутным частак добры савет. Проста пасля гэтага толькі можа прыняць вас доўгі шлях. Але гэта яшчэ не ўсё, і прастаты па-ранейшаму складаная рэч, каб знайсці.
Нядаўна я прымаў удзел у гэтым тое, што можа быць больш распрацаваны. Ён атрымаў рэструктураваць і некаторыя з гнуткасць была выдаленая. Але, як адзін з распрацоўшчыкаў сказаў: “лягчэй раскласці па-дызайн, чым гэта, каб рэарганізаваць не дызайн.” Лепш за ўсё, каб быць крыху прасцей, чым вы павінны быць, але гэта не катастрофа, каб быць крыху больш складана.
Лепшы савет, які я пачуў на ўсё гэта прыйшло ад дзядзькі Боб (Роберт Марцін). Яго савет быў не занадта павесіў трубку аб тым, што найпростай канструкцыі. Бо можна, павінна, і будзе рэарганізаваць яго пазней. У канцы гатоўнасць рэфактарынг значна важней, чым ведаць, што прасцей за ўсё адразу.
Рэфактарынг Ці парушаць YAGNI?
У гэтым раздзеле падняўся на рассылку XP нядаўна, і гэта варта чаго так, як мы глядзім на ролю дызайну ў XP.
Асноўным пытанне пачынаецца з таго, што рэфактарынгу патрабуе часу, але не дадае функцыю. З пункту YAGNI з’яўляецца тое, што вы павінны разлічваць на цяперашні час не на будучыню, гэта парушэнне?
Кропкі YAGNI з’яўляецца тое, што вы не дадасце складанасці, якія не патрэбныя для бягучай гісторыі. Гэта з’яўляецца часткай практыкі просты дызайн. Рэфактарынг з’яўляецца неабходнай для падтрымання дызайн так проста, як вы можаце, так што варта рэарганізаваць, калі вы разумееце, што вы можаце зрабіць рэчы прасцей.
Простая канструкцыя і эксплуатуе XP практыкі, а таксама спрыяльнай практыцы. Толькі калі ў вас ёсць тэставанне, бесперапынная інтэграцыя, і рэфактарынгу вы можаце практыкі простая канструкцыя эфектыўна. Але ў той жа час захоўваючы Проста канструкцыя мае важнае значэнне для падтрымання змены крывая плоская. Любыя непатрэбныя складанасці робіць сістэмы цяжэй змяніць ва ўсіх кірунках, акрамя аднаго Вы чакаеце з комплексам гнуткасць, уставіў Аднак людзі не вельмі добра Забягаючы наперад, так што лепш імкнуцца да прастаты. Аднак людзі не будуць атрымліваць самае простае, што першы раз, так што вам трэба рэарганізаваць, каб наблізіцца да мэты.
Шаблоны і XP
Напрыклад JUnit прыводзіць мяне непазбежна ў выхаванні мадэляў. Адносіны паміж вобразамі і XP цікава, і гэта агульны пытанне. Джошуа Kerievsky сцвярджае, што мадэлі недастаткова падкрэсліваецца ў XP, і ён робіць аргумент красамоўна, так што я не хачу паўтараць гэта. Але гэта варта мець на ўвазе, што для многіх мадэляў людзі, здаецца, у канфлікце XP.
Сутнасць гэтага аргументу з’яўляецца тое, што карціны часта больш выкарыстоўваць. Свет поўны легендарны праграміст, свежае з яго першае чытанне GOF які ўключае ў сябе шаснаццаць мадэляў ў 32 радкоў кода. Я памятаю адзін вечар, падсілкоўваецца вельмі добры віскі, прабягаючы з Кентом дакумент пад назвай “Не Шаблёны праектавання: 23 танныя трукі” Мы думалі пра такія рэчы, як выкарыстоўваць, калі заява, а не стратэгіі. Жарт была кропка, шаблоны часта злоўжываюць, але гэта не робіць іх дрэннай ідэяй. Пытанне, як вы іх выкарыстоўваеце.
Па адной з версій гэтага з’яўляецца тое, што сілы простая канструкцыя прывядзе вас у шаблоны. Многія рэфактарынгу гэтага відавочна, але нават без іх наступныя правілы простую канструкцыю вы прыйдзеце з шаблонамі, нават калі вы не ведаеце іх ужо. Гэта можа быць праўдай, але гэта сапраўды лепшы спосаб зрабіць гэта? Вядома, лепш, калі вы ведаеце, прыкладна, дзе вы збіраецеся і кнігі, якія могуць дапамагчы вам пытанні, замест таго каб вынаходзіць усё самастойна. Я, вядома, па-ранейшаму цягнуцца да GOF кожны раз, калі я адчуваю, карціна на падыходзе. Для мяне эфектыўнай распрацоўкі сцвярджае, што мы павінны ведаць цану карціны варта звярнуць – гэта яго ўласнае майстэрства. Сапраўды гэтак жа, як Ісус прапануе, мы павінны быць больш знаёмым пра тое, як лёгкасць у шаблон паступова. У гэтай сувязі XP ставіцца, як мы выкарыстоўваем шаблоны рознаму, як некаторыя людзі выкарыстоўваюць іх, але, вядома, не выдаляе іх кошту.
Але чытанне некаторых спісаў рассылання я атрымліваю выразнае адчуванне, што многія людзі бачаць, як XP перашкаджаючы мадэляў, нягледзячы на? ? іронію, што большасць прыхільнікаў XP былі лідэрамі руху мадэляў таксама. Гэта таму, што яны бачылі за межамі карціны, ці таму, што карціны настолькі стабільны ў іх думаць, што яны не разумеюць яго? Я не ведаю адказаў на іншыя, але для мяне мадэляў па-ранейшаму жыццёва важнае значэнне. XP можа быць працэс развіцця, але карціны аснову дызайну веды, веды, што з’яўляецца каштоўным незалежна ад вашага працэс можа быць. Розныя працэсы могуць выкарыстоўваць шаблоны па-рознаму. XP падкрэслівае, як не выкарыстоўваецца шаблон, пакуль гэта неабходна, і развіваецца ваш шлях у шаблон з дапамогай простай рэалізацыі. Але карціны па-ранейшаму ключавой часткай веды набыць.
Мая парада XPers з выкарыстаннем шаблонаў будзе
- Інвеставаць час у вывучэнне мадэляў
- Канцэнтрат аб тым, калі ўжываць шаблон (не занадта рана)
- Канцэнтрат аб тым, як рэалізаваць шаблён у сваёй найпростай форме, а затым дадаць складанасці пазней.
- Калі вы змесціце ў шаблон, а потым разумеюць, што гэта не цягне яго вага – не бойцеся ўзяць яго зноў.
Я думаю, XP варта падкрэсліць, вывучэнне мадэляў больш. Я не ўпэўнены, як бы я, што падыходзіць у практыку XP, але я ўпэўнены, што Кент можа прыдумаць спосаб.
Якая расце Архітэктура
Што мы разумеем пад архітэктуру праграмнага забеспячэння? Для мяне тэрмін архітэктуры перадае паняцце асноўных элементаў сістэмы, часткі, якія цяжка змяніць. Падмурак, на якім астатнія павінны быць пабудаваныя.
Якую ролю адыгрывае архітэктура гуляць, калі вы выкарыстоўваеце эвалюцыйны дызайн? Зноў XPs крытыкі сцвярджаюць, што XP ігнаруе архітэктуры, што маршрут XP ў тым, каб пайсці на код хутка і спадзяемся, што рэфактарынг, якая будзе вырашаць усе пытанні праектавання. Цікава, яны маюць рацыю, і што можа быць слабасць. Вядома, найбольш агрэсіўныя XPers – Кент Бек, Рон Джеффрис, і Боб Марцін – ставяць усё больш і больш энергіі ў пазбягаючы фронт архітэктурнага дызайну. Не змяшчайце ў базе дадзеных, пакуль вы сапраўды ведаеце, што вы будзеце мець патрэбу ў гэтым. Праца з файламі першай і рэфактарынгу базы даных на працягу пазней ітэрацыі.
Я вядомы як баязлівыя Xper, і ў гэтай якасці я не згодны. Я думаю, што ёсць ролю для шырокага адпраўной кропкай архітэктуры. Такія рэчы, як аб тым, рана пра тое, як да пласту прыкладання, як вы будзеце ўзаемадзейнічаць з базай дадзеных (калі гэта неабходна), якой падыход выкарыстоўваць для апрацоўкі вэб-сервера.
Па сутнасьці я думаю, што шматлікія з гэтых абласцей з’яўляюцца мадэлі, якія мы даведаліся на працягу многіх гадоў. Як ваша веданне мадэляў расце, вы павінны мець разумныя спачатку прыняць на тое, як іх выкарыстаць. Аднак ключавым адрозненнем з’яўляецца тое, што гэтыя раннія архітэктурныя рашэнні не чакаецца, будзе высечана на камені, ці, дакладней, каманда ведае, што яны могуць памыляцца ў сваіх ранніх рашэнняў, і павінны мець мужнасць, каб выправіць іх. Іншыя сказалі гісторыя аднаго праекта, які, блізкіх да разгортвання, вырашыў, што не трэба больш EJB і выдалілі яго з сваёй сістэмы. Гэта быў значны рэфактарынг, гэта было зроблена з спазненнем, але дазваляе практыкі зрабіў гэта не толькі магчыма, але варта.
Як бы гэта працавала наадварот. Калі вы вырашылі не выкарыстоўваць EJB, было б цяжэй, каб дадаць яго пазней? Калі вы такім чынам ніколі не пачынаецца з EJB, пакуль вы не спрабавалі рэчы, не знайшоў яго і не хапае? Вось пытанне, які ўключае ў сябе шмат фактараў. Вядома, працаваць без комплексу прастата кампанентаў павялічвае і робіць што-то ідзе хутчэй. Аднак часам прасцей сарваць што-то як, што, чым пакласці яго цаля
Так што мой савет пачаць з ацэнкі таго, што верагодна, архітэктура. Калі вы бачыце вялікая колькасць дадзеных з некалькімі карыстальнікамі, ісці наперад і выкарыстоўваць базу дадзеных ад 1 дня. Калі вы бачыце складанай бізнес-логікай, пакласці ў мадэлі прадметнай вобласці. Аднак з павагі да багоў YAGNI, у выпадку сумневаў памыляцца ў бок спрашчэння. Таксама гатовыя спрасціць архітэктуру, як толькі вы бачыце, што частка архітэктуры не дадае нічога.
UML і XP
З усіх пытанняў, якія я атрымаць аб маім удзеле ў XP адным з найбуйнейшых круціцца вакол маёй сувязі з UML. Не дзве несумяшчальныя?
Ёсць шэраг момантаў, пра несумяшчальнасці. Вядома XP дэ-падкрэслівае дыяграм у значнай ступені. Хоць афіцыйная пазіцыя па лініі “выкарыстоўваць іх, калі яны карысныя”, ёсць моцныя падтэкст “рэальнага XPers не робяць дыяграмы”. Гэта пацвярджаецца тым, што такія людзі, як Кент зусім не камфортна з дыяграмамі, сапраўды я ніколі не бачыў Кент добраахвотна намаляваць дыяграму праграмнага забеспячэння ў любы фіксаванае абазначэнне
Я думаю, што праблема адбываецца ад двух асобных прычынаў. Адным з іх з’яўляецца той факт, што некаторыя людзі знаходзяць праграмнага забеспячэння дыяграм карысныя, а некаторыя людзі гэтага не робяць. Небяспека заключаецца ў тым, што тыя, хто думаюць, што тыя, хто не павінен рабіць, і наадварот. Замест гэтага мы павінны проста прыняць, што некаторыя людзі будуць выкарыстоўваць дыяграмы і некаторыя не будуць.
Іншым пытаннем з’яўляецца тое, што праграмнае забеспячэнне дыяграм як правіла, атрымліваюць, звязаныя з суперцяжкай працэсу. Такія працэсы марнаваць шмат часу пабудовы дыяграм, якія не дапамагаюць і фактычна можа прычыніць шкоду. Так што я думаю, што людзі павінны быць параіў, як выкарыстоўваць дыяграмы добра і пазбегнуць пастак, а не “толькі тады, калі вы павінны (WIMP)” паведамленне, што звычайна выходзіць з XPerts.
Такім чынам, вось мой савет для выкарыстання дыяграм добра.
Першы мець на ўвазе, што вы малюеце дыяграм. Асноўная каштоўнасць з’яўляецца камунікацыя. Эфектыўныя сродкі сувязі выбары важных рэчаў, і грэбуючы менш важнымі. Гэтая выбіральнасць з’яўляецца ключом да выкарыстання UML добра. Не маляваць кожны клас – толькі важныя з іх. Для кожнага класа, не паказваюць кожны атрыбут і аперацыя – толькі важныя з іх. Не маляваць дыяграмы паслядоўнасці для ўсіх варыянтаў выкарыстання і сцэнараў – толькі…, Вы атрымаеце карціну. Агульная праблема сумеснага выкарыстання дыяграм з’яўляецца тое, што людзі спрабуюць зрабіць іх ўсёабдымнымі. Код лепшы крыніца ўсёабдымнай інфармацыі, а код прасцей за ўсё трымаць у сінхранізацыі з кодам. Для паўнаты дыяграм вораг зразумеласці.
Сумеснага выкарыстання дыяграм для вывучэння дызайну перад пачаткам кадавання. Часта ствараецца ўражанне, што такая дзейнасць з’яўляецца незаконнай у XP, але гэта не так. Многія людзі кажуць, што калі ў вас ёсць ліпкія задача стаіць збіраюцца разам, каб мець хуткі сесіі дызайн у першую чаргу. Аднак, калі вы робіце такія сесіі:
- трымаць іх кароткае
- Не спрабуйце вырашыць усе дэталі (толькі важныя)
- лячэння ў выніку дызайну, як эскіз, а не як канчатковы дызайн
Апошні пункт варта пашырэнне. Калі вы робіце некаторыя да-дызайн пярэдняй часткі, вы непазбежна выявіце, што некаторыя аспекты дызайну няправільна, і вы толькі выявіць гэта пры кадаванні. Гэта не праблема пры ўмове, што вы зменіце дызайн. Бяда прыходзіць, калі людзі думаюць, дызайн будзе зроблена, і то не бяруць веды, якія яны атрымалі праз кадавання і запусціць яго назад у дызайне.
Змяненне дызайну не абавязкова азначае змяненне дыяграм. Гэта цалкам разумна, каб маляваць дыяграмы, якія дапамогуць вам зразумець дызайну, а затым кінуць дыяграм прэч. Маляванне ім дапамаглі, і гэтага дастаткова, каб зрабіць іх варта. Яны не павінны стаць пастаяннымі артэфактамі. UML дыяграмы лепшых не з’яўляюцца артэфактамі.
Шмат XPers выкарыстанне CRC карт. Гэта не ў канфлікце з UML. Я выкарыстоўваю сумесь CRC і UML ўвесь час, паказаўшы метад найбольш карысны для працы пад рукой.
Іншае прымяненне дыяграм UML з’яўляецца бягучай дакументацыі. У сваім звычайным выглядзе гэта мадэль, якія пражываюць на выпадак інструмента. Ідэя, што захаванне гэтай дакументацыі дапамагае людзям працаваць у сістэме. На практыцы гэта часта не дапамагае наогул.
- яно займае занадта шмат часу, каб трымаць дыяграмы ў актуальным стане, таму яны выпадаюць з сінхранізацыі з кодам
- яны схаваны ў інструментальнай скрыні або таўшчыня злучнага, так што ніхто не глядзіць на іх
Так парады для бягучай дакументацыі працуе з гэтым назіраюцца праблемы:
- Толькі выкарыстанне дыяграм, якія вы можаце захаваць да даты без прыкметных болю
- Пакладзеце дыяграм, дзе кожны можа лёгка іх бачыць. Я хацеў бы размясціць іх на сцяне. Заахвочвайце людзей змяніць сцяне копію з ручкай для простых змяненняў.
- Звярніце ўвагу на тое ці людзі выкарыстоўваюць іх, калі не выкідвайце іх.
Апошні аспект выкарыстання UML для дакументацыі ў перадачы сітуацыі, напрыклад, калі адна група рукі ў іншую. Тут кропка XP з’яўляецца тое, што вырабляе дакументацыі гісторыя, як і любы іншы, і, адпаведна, яго кошт бізнесу вызначаецца заказчыкам. Зноў UML карысна тут, забяспечваючы дыяграм з’яўляюцца сэлектыўнымі, каб дапамагчы сувязі. Памятайце, што код рэпазітар падрабязнай інфармацыі, дыяграм дзейнічаць, каб абагульніць і вылучыць важныя пытанні.
На Метафара
Добра я мог бы таксама сказаць гэта публічна – я да гэтага часу не атрымаў павесіць гэтую метафару рэч. Я бачыў яго працу, і добра працаваць на C3 праекта, але гэта не значыць, у мяне ёсць ідэя, як зрабіць гэта, не кажучы ўжо, як растлумачыць, як гэта зрабіць.
Практыка XP метафары пабудаваны на падыходзе Уорд Каннингемс аб сістэме імёнаў. Справа ў тым, што вы прыдумалі вядомы набор імёнаў, які дзейнічае як слоўнікавы запас, каб гаварыць аб дамене. Гэтая сістэма імёнаў праслухоўвання ў шляху вы называеце класаў і метадаў у сістэме
Я пабудаваў сістэма імёнаў шляхам стварэння канцэптуальнай мадэлі прадметнай вобласці. Я зрабіў гэта з вобласцю экспертаў з выкарыстаннем UML або яго папярэднікаў. Я знайшоў, вы павінны быць асцярожныя, робячы гэта. Вы павінны трымаць у мінімальнай просты набор пазначэньняў, і вы павінны сцерагчыся даючы якіх-небудзь тэхнічных пытанняў паўзучага ў мадэлі. Але калі вы робіце гэта я выявіў, што вы можаце выкарыстаць гэта для стварэння слоўніка вобласці, вобласці спецыялісты могуць разумець і выкарыстоўваць для сувязі з распрацоўнікамі. Мадэль не адпавядае класу канструкцыі выдатна, але гэтага дастаткова, каб даць агульны слоўнік на ўсю вобласць.
Цяпер я не бачу ніякай прычыны, чаму гэты слоўнік не можа быць метафарычна, такі, як C3 метафара, якая ператварыла заработнай платы ў зборачнай лініі завода. Але я таксама не бачу, чаму аснове сістэмы імёнаў на слоўнік дамен такая дрэнная ідэя небудзь. І я не схільны адмовіцца ад тэхнікі, якая працуе добра для мяне ў атрыманні сістэмы імёнаў.
Часта людзі крытыкуюць XP на той падставе, што вам трэба па крайняй меры некаторыя накіды дызайну сістэмы. XPers часта адказваюць з адказам “гэта метафара”. Але я ўсё роўна не думаю, што я бачыў метафара тлумачыцца ў пераканаўчай манеры. Гэта рэальны разрыў у XP, і той, які XPers неабходна разабрацца.
Ці хочаце вы быць архітэктарам, калі вырасцеш?
На працягу большай частцы апошняга дзесяцігоддзя, тэрмін “архітэктар праграмнага забеспячэння” стала папулярнай. Гэта тэрмін, які цяжка асабіста для мяне выкарыстоўваць. Мая жонка інжынер-будаўнік. Адносіны паміж інжынерамі і архітэктарамі… цікава. Мой любімы быў “архітэктараў добрыя для трох Б: цыбуліны, кусты, птушкі”. Паняцце з’яўляецца тое, што архітэктары прыдумалі ўсе гэтыя мілыя малюнкі, але гэта інжынеры, якія павінны гарантаваць, што яны на самой справе можа ўстаць. У выніку я пазбягаў тэрміна архітэктар праграмнага забеспячэння, у рэшце рэшт, калі мая ўласная жонка не можа ставіцца да мяне з прафесійнай паважаць тое, што шанец я стаю з кім-небудзь яшчэ?
У праграмным забеспячэнні, тэрмін архітэктар азначае, што многія рэчы. (У праграмнае забеспячэнне любы тэрмін, азначае, што многія рэчы.) У цэлым, аднак яно нясе пэўныя аўтарытэтам, як у “Я не проста просты праграміст – Я архітэктар”. Гэта можа перавесці на “Я архітэктар цяпер – я занадта важныя, каб зрабіць любы праграмавання”. Тады ўзнікае пытанне аднаго з падзяляюць Ці сябе ад мірскіх намаганняў праграмавання тое, што вы павінны рабіць, калі вы хочаце ажыццяўляць тэхнічнае кіраўніцтва.
Гэтае пытанне спараджае вялізная колькасць эмоцый. Я бачыў, як людзі атрымліваюць вельмі злы на думку, што яны не маюць ролю больш як архітэктары. “Існуе няма месца ў XP для вопытных архітэктараў” часта я чую крык.
Больш, чым у ролі дызайну сябе, я не думаю, што гэта выпадак, што XP не адчувае значэнне або добрыя навыкі дызайну. Сапраўды, многія прыхільнікі XP – Кент Бек, Боб Марцін, і, вядома, Ward Cunningham – гэта тыя, ад каго я даведаўся шмат пра тое, што канструкцыя а. Аднак гэта азначае, што іх роля зьменаў ад таго, што многія людзі бачаць, як ролю тэхнічнага лідэрства.
У якасці прыкладу, я прывяду адзін з нашых тэхнічных кіраўнікоў у ThoughtWorks: Дэйв Райс. Дэйв быў праз некалькі жыццёвых цыклаў і ўзяла на сябе неафіцыйных мантыі тэхнічны кіраўнік па пяцьдзесят чалавек праекта. Яго роля як лідэра азначае марнаваць шмат часу з усімі праграмістамі. Ён будзе працаваць з праграмістам, калі яны маюць патрэбу ў дапамозе, ён глядзіць вакол, каб бачыць, хто мае патрэбу ў дапамозе. Значнае знак, дзе ён сядзіць. У якасці доўгатэрміновай ThoughtWorker, ён можа вельмі добра ёсць якія-то пасаду, ён спадабаўся. Ён падзяліўся адзін на некаторы час з Кара, менеджэр выпуску. Аднак у апошнія некалькі месяцаў ён пераехаў у адкрытае бухты, дзе праграмісты працы (з выкарыстаннем адкрытай “вайны пакоі” стылі, што XP паслугі.) Гэта важна для яго, таму што такім чынам ён бачыць, што адбываецца, і, даступных для крэдытавання боку, дзе гэта неабходна.
Тыя, хто ведае XP зразумееце, што я апісваю, выразна пэўную ролю XP трэнера. Сапраўды адна з некалькіх гульняў са словамі, што робіць XP з’яўляецца тое, што яна называе вядучы тэхнічны малюнак “Трэнер”. Сэнс ясны: у XP тэхнічнае кіраўніцтва паказвае навучання праграмістаў і дапамагаючы ім прымаць рашэнні. Гэта той, які патрабуе добрых навыкаў людзей, а таксама добрыя тэхнічныя навыкі. Джэк Боллс на XP 2000 адзначыў, што мала месцы зараз для самотнага гаспадара. Супрацоўніцтва і навучанне з’яўляюцца ключом да поспеху.
На канферэнцыі абед, Дэйв і я гаварыў з вакальнай праціўнікам XP. Як мы ўжо абмяркоўвалі, што мы зрабілі, падабенства ў нашым падыходзе былі даволі прыкметная. Мы ўсе любілі адаптыўнай, итеративной распрацоўкі. Тэставанне было важна. Такім чынам, мы былі збянтэжаныя на гарачнасць яго апазіцыі. Потым яго заяву, па аналогіі з “Апошняе, што я хачу, гэта мае праграмісты рэфактарынгу і monkeying вакол з дызайнам”. Зараз усё было ясна. Канцэптуальных заліва яшчэ больш эксплицируется Дэйв казаў мне потым “, калі ён не давярае сваім праграмістам чаму ён наняць іх? “. У XP самае галоўнае вопытны распрацоўшчык можа зрабіць, гэта перадаць, як шмат навыкаў, як ён можа на больш маладых распрацоўнікаў. Замест таго, архітэктар, які робіць усё важныя рашэнні, у вас ёсць трэнер, які вучыць распрацоўнікаў для прыняцця важных рашэнняў. Як Ward Cunningham адзначыў, што ён па ўзмацняе свае навыкі, і дадае ў праект, чым любы герой-адзіночка можа.
Зварачальнасць
На XP 2002 Энрыка Zaninotto распавёў нам выдатную гісторыю, што абмяркоўваецца ўрэзкі паміж гнуткіх метадаў і беражлівага вытворчасці. На яго думку, адным з ключавых аспектаў і падыходаў у тым, што яны вырашаюцца за кошт скарачэння складанасці незваротнасці працэсу.
З гэтага пункту гледжання адным з асноўных крыніц складанасці незваротнасць рашэння. Калі вы можаце лёгка мяняць свае рашэнні, гэта азначае, што гэта менш важна, каб прымусіць іх права – што робіць вашу жыццё нашмат прасцей. Наступствы для эвалюцыйнага праектавання з’яўляецца тое, што дызайнеры павінны думаць пра тое, як яны могуць пазбегнуць незваротнасці ў сваіх рашэннях. Замест таго, каб атрымаць правільнае рашэнне цяпер, звярніце ўвагу на спосаб альбо адкласці рашэнне да больш позняй версіі (калі вы будзеце мець больш інфармацыі) або прымаць рашэнні такім чынам, што вы будзеце ў стане цалкам змяніць яго пазней без асаблівых цяжкасцяў.
Гэта рашэнне для падтрымкі зварачальнасці з’яўляецца адной з прычын таго, што гнуткія метады пакласці шмат акцэнтаў на сістэм-крыніц код кіравання, і пакласці ўсё ў такой сістэме. Хоць гэта не гарантуе зварачальнасць, асабліва для жаданы жыў рашэнні, яна дае аснову, што дае ўпэўненасць у тым, каб каманда, нават калі яна выкарыстоўваецца рэдка.
Праектаванне для зварачальнасці таксама мае на ўвазе працэс, які робіць памылкі з’яўляюцца хутка. Адно са значэнняў итеративной распрацоўкі з’яўляецца тое, што хуткае ітэрацый дазваляе кліентам бачыць сістэмы, як ён расце, і калі дапушчаная памылка ў патрабаванні яна можа быць выстаўлены і фіксаванай перад кошт выпраўлення становяцца надмерна высокімі. Гэта ж хуткае выяўленне таксама важна для дызайну. Гэта азначае, што вы павінны наладзіць сістэму так, што патэнцыйныя праблемы хутка праверцы на якія пытанні прыходзяць. Гэта таксама азначае, што гэта варта рабіць эксперыменты, каб убачыць, як цяжка будучых змен можа быць, нават калі вы на самой справе не робяць рэальныя змены ў цяперашні час – эфектыўна рабіць выкідваць прататып на галіны сістэмы. Некалькі каманд справаздачнасці апрабаваць будучыя змены ў пачатку прататып рэжыме, каб убачыць, як цяжка гэта будзе.
Воля да дызайну
Пакуль я засяроджаны шмат тэхнічных практыкі ў гэтым артыкуле, адна рэч, якая занадта лёгка апусціць з’яўляецца чалавечы аспект.
Для таго каб працаваць, эвалюцыйны дызайн павінен сіла, якая гоніць яго да сыходзяцца. Гэтая сіла можа зыходзіць толькі ад людзей – хтосьці ў камандзе павінен мець рашучасць забяспечыць, каб якасць дызайну застаецца высокім.
Гэта не павінны зыходзіць ад усіх (хоць і гэта нядрэнна, калі б яна), як правіла, толькі адзін ці два чалавека ў камандзе ўзяць на сябе адказнасць па падтрыманню дызайн цэлым. Гэта адна з задач, якія звычайна падпадаюць пад “архітэктара тэрмін.
Гэтая адказнасць азначае падтрыманне пастаяннай вочы на? ? базу кода, гледзячы Ці ёсць якія-небудзь абласцях яна становіцца бруднай, а затым прымаць аператыўныя меры для ліквідацыі праблемы, перш чым яна выйдзе з-пад кантролю. Захавальнік дызайн не павінен быць той, хто фіксуе гэта – але яны павінны гарантаваць, што яна атрымлівае фіксаваны кім-то.
Адсутнасьць волі да дызайн-відаць, асноўнай прычынай, чаму эвалюцыйны дызайн можа пацярпець няўдачу. Нават калі людзі знаёмыя з рэчамі, пра якія я казаў у гэтым артыкуле, не будзе, што праект не адбудзецца.
Рэчы, якія цяжка раскласці ў
Ці можам мы выкарыстоўваць рэфактарынг для разгляду ўсіх праектных рашэнняў, або ёсць некаторыя пытанні, якія так шырока, што іх цяжка дадаць у далейшым? На дадзены момант, праваслаўе XP з’яўляецца тое, што ўсе рэчы лёгка дадаць, калі гэта неабходна, бо YAGNI заўсёды ўжываецца. Цікава, калі Ёсць выключэнні. Добры прыклад таго, што з’яўляецца спрэчным, каб дадаць пазней з’яўляецца інтэрнацыяналізацыя. Ці з’яўляецца гэта тое, што такое боль дадаць пазней, што вы павінны пачаць з ім прама цяпер?
Я магу лёгка ўявіць, што Ёсць некаторыя рэчы, якія трапляюць у гэтую катэгорыю. Аднак рэальнасць такая, што мы да гэтага часу вельмі мала дадзеных. Калі ў вас ёсць што-то дадаць, як інтэрнацыяналізацыя, у больш позніх вы вельмі ўсведамляе намаганняў для таго, каб зрабіць гэта. Вы, менш свядомыя намаганняў было б на самай справе ўзялі, тыдзень за тыднем, пакласці яго і захаваць яго да яго сапраўды неабходна. Таксама ты менш ўсведамляе той факт, што вы можаце таксама атрымалі гэта няправільна, і таму неабходна зрабіць некаторыя рэфактарынгу ў любым выпадку.
Частка абгрунтаванне YAGNI з’яўляецца тое, што шматлікія з гэтых патэнцыйных запатрабаванняў у канчатковым выніку не патрэбен, або па крайняй меры не так, як вы чакалі. Па не рабіць іх, вы захаваеце шмат намаганняў. Хоць будзе намаганні, неабходныя для рэфактарынгу простае рашэнне ў тое, што вам сапраўды трэба, гэта рэфактарынг, верагодна, будзе менш працы, чым будаўніцтва ўсіх сумніўных асаблівасці.
Яшчэ адно пытанне, мець на ўвазе, у гэтым ці вы не ведаеце як гэта зрабіць. Калі вы зрабілі інтэрнацыяналізацыі некалькі разоў, то вы будзеце ведаць, шаблоны, неабходна выкарыстаць. Як такое вы, хутчэй за ўсё, каб гэта права. Даданне папераджальнай структур, верагодна, лепш, калі вы знаходзіцеся ў такім становішчы, чым калі вы навічок ў праблеме. Так што мой савет будзе, што калі вы ведаеце, як гэта зрабіць, вы знаходзіцеся ў стане судзіць выдаткаў зрабіць гэта зараз, каб зрабіць гэта пазней. Аднак, калі вы не зрабілі гэтага раней, а не толькі вы не ў стане ацаніць затраты досыць добра, вы таксама менш верагодна, рабіць гэта добра. У гэтым выпадку вы павінны дадаць яго пазней. Калі дадаць тое, і знайсці яго хваравітым, вы, верагодна, лепш, чым вы б, калі б вы дадалі яго ў пачатку. Ваша каманда з’яўляецца больш дасведчаным, вы ведаеце вобласці лепш, і вы разумееце, патрабаванні лепш. Часта ў гэтай пазіцыі вы паглядзіце на тое, як лёгка было б з 20/20 заднім лікам. Магчыма, гэта было значна цяжэй, каб дадаць яго раней, чым вы думаеце.
Гэта таксама сувязяў ў пытанні аб замове гісторый. У планавання XP, Кент, і я адкрыта паказаў сваю нязгоду. Кент на карысць таго, каб дазволіць кошту бізнесу быць адзіным фактарам у прасоўванні упарадкавання гісторыі. Пасля першапачатковага рознагалоссі Рон Джеффрис цяпер згодны з гэтым. Я ўсё яшчэ не ўпэўнены. Я лічу, што баланс паміж коштам бізнесу і тэхнічных рызык. Гэта будзе дыск мяне прадставіць па крайняй меры некаторыя інтэрнацыяналізацыі рана знізіць гэты рызыка. Аднак гэта дакладна толькі калі інтэрнацыяналізацыі было неабходна для першага выпуску. Як дабрацца да рэлізу як мага хутчэй, мае жыццёва важнае значэнне. Любыя дадатковыя складанасці гэта варта рабіць пасля таго, што першы рэліз, калі яно не з’яўляецца неабходным для першага выпуску. Сіла адгружаны, выкананне кода велізарная. У цэнтры ўвагі кліентаў ўвагу, расце давер, і масіўныя крыніца ведаў. Зрабіце ўсё магчымае, каб давесці гэтую дату бліжэй. Нават калі гэта больш намаганняў, каб нешта дадаць пасля першага рэлізу, то лепш выпусціць раней.
З любой новай тэхнікі гэта натуральна, што яго прыхільнікі не ўпэўненыя ў сваіх межавых умоў. Большасць XPers было сказана, што эвалюцыйнае праектаванне немагчыма пэўныя праблемы, толькі каб выявіць, што гэта сапраўды магчыма. Гэта заваёва “немагчыма” сітуацыі прыводзіць да ўпэўненасці, што ўсе такія сітуацыі могуць быць пераадолены. Вядома, вы не можаце зрабіць такія абагульнення, але пакуль супольнасць XP хіты межаў і не атрымалася, мы ніколі не можам быць упэўненыя, дзе гэтыя мяжы ляжаць, і гэта правільна, каб паспрабаваць і націснуць за патэнцыйных межаў, што іншыя могуць убачыць.
(Апошнія артыкулы Джым шор абмяркоўваюцца некаторыя сітуацыі, у тым ліку інтэрнацыяналізацыі, дзе патэнцыйныя межы апынуўся не быць перашкодай у рэшце рэшт.)
З’яўляецца праектаванне адбываецца?
Адна з цяжкасцяў эвалюцыйнага дызайну з’яўляецца тое, што гэта вельмі цяжка сказаць, калі канструкцыя на самай справе адбываецца. Небяспека змешвання з дызайнам праграмавання з’яўляецца тое, што праграмаванне можа адбыцца без дызайну – гэта сітуацыя, калі Эвалюцыйны дызайн і не разыходзіцца.
Калі вы знаходзіцеся ў камандзе распрацоўшчыкаў, то вы адчуваеце Ці дызайн, што адбываецца на якасць кода. Калі код базы становіцца ўсё больш складанай і цяжкай для працы, не хапае дызайну атрымліваць зрабіць. Але на жаль гэта суб’ектыўнай пункту гледжання. У нас няма надзейных паказчыкаў, якія могуць даць нам аб’ектыўны погляд на якасць дызайну.
Калі гэта абмежаванне бачнасці цяжка для тэхнічнага персаналу, гэта значна больш трывожны для нетехнических членаў каманды. Калі вы менеджэр або кліенту, як вы можаце сказаць, калі праграмнае забеспячэнне добра распрацавана? Гэта важна для вас, таму што дрэнна распрацаванае праграмнае забеспячэнне будзе даражэй змяніць у будучыні. Там няма простага адказу на гэты, але вось некалькі саветаў.
- Слухайце тэхнічных людзей. Калі яны скардзяцца на цяжкасці ўнясення змяненняў, а затым прыняць такія скаргі сур’езна і даць ім час, каб выправіць становішча.
- Трымайце вочы ад таго, наколькі код выкідваюцца. Праекта, што робіць здаровы рэфактарынгу будзе няўхільна выдаленне дрэнны код. Калі нічога не атрымліваю выдалены, то гэта амаль напэўна знакам таго, што не хапае рэфактарынгу адбываецца – што прывядзе да дэградацыі дызайну. Аднак, як і любая метрыка гэтага можна злоўжываць, на думку добрым тэхнічным людзей пераўзыходзіць любы метрыкі, нягледзячы на? ? сваю суб’ектыўнасць.
Так Дызайн мёртвых?
Не з дапамогай любых сродкаў, але характар? ? Змяніўся дызайн. XP дызайну шукае наступныя навыкі
- Пастаяннае жаданне трымаць код як ясна і проста, як магчыма
- Рэфактарынг навыкі, каб вы маглі ўпэўнена ўносіць удасканалення, калі вы бачыце неабходнасць.
- Добрае веданне шаблонаў: не толькі рашэнняў, але і ацаніць, калі іх выкарыстоўваць, і як развіваць у іх.
- Праектаванне з прыцэлам на будучыя змены, ведаючы, што рашэнні, прынятыя ў цяперашні час павінны быць зменены ў будучыні.
- Ведаючы, як камунікаваць дызайн для людзей, якія павінны разумець яго, выкарыстоўваючы код, дыяграмы і, перш за ўсё размовы.
Гэта страшны выбар навыкаў, але тады быць добрым дызайнерам заўсёды быў жорсткім. XP не рэальна зрабіць гэта крыху лягчэй, па меншай меры не для мяне. Але я думаю, XP дае нам новы спосаб думаць аб эфектыўнай канструкцыі, паколькі яна зрабіла эвалюцыйнае праектаванне праўдападобным стратэгіі зноў. І я вялікі прыхільнік эвалюцыі – інакш хто ведае, што я мог бы быць?
Падзякі
За апошнія пару гадоў я ўзяў і скраў шмат добрых ідэй з многіх добрых людзей. Большасць з іх страцілі ў паўзмроку маёй памяці. Але я памятаю, шчыпаць добрыя ідэі ад Джошуа Kerievsky. Я памятаю шмат карысных артыкулаў, дасланых Фреда Джордж і Рон Джеффрис. Я таксама не магу забыцца, як шмат добрых ідэй, працягваюць паступаць з палаты і Кент.
Я заўсёды ўдзячны за тыя, якія задаюць пытанні і месцы памылкі друку. Я лакса аб захаванні спіс гэтых прызнаць, але яны ўключаюць Крэйг Джонс, Найджэл Торн, Свен горцы, Хілары Нэльсан, Тэры Камерленго.
