តើអ្នកអាចស្វែងរកគំរូរចនាដែលអ្នកត្រូវការដោយរបៀបណា? លំនាំរចនា។ លំនាំ OOP នៅក្នុង Metaphors

មុនពេលចាប់ផ្តើមអត្ថបទ ខ្ញុំចង់ផ្តល់របាយការណ៍មួយដោយមិត្តរបស់ខ្ញុំឈ្មោះ Denis Porplenko ស្តីពីគំរូរចនាក្នុងកម្មវិធី៖

ខ្ញុំ​ចង់​រំលឹក​អ្នក​ថា គំរូ​រចនា​បាន​កើត​ឡើង​ជា​ដំណោះ​ស្រាយ​ចំពោះ​បញ្ហា​ស្រដៀង​គ្នា​ដែល​កើត​ឡើង​ជា​ញឹក​ញាប់ តាម​ពិត​ទៅ​ក្នុង​ការ​រចនា។ ប៉ុន្តែពួកគេបានទទួលការអភិវឌ្ឍន៍ដ៏សំខាន់របស់ពួកគេនៅក្នុង ការអភិវឌ្ឍន៍កម្មវិធី. ហើយខ្ញុំនឹងបន្តរឿងក្នុងបរិបទនៃការអភិវឌ្ឍន៍ កម្មវិធី.

ប្រធានបទនៃលំនាំគឺទូលំទូលាយណាស់ គំរូនៃការរចនាអាចត្រូវបានបែងចែកជាប្រភេទដូចជា លំនាំសរសេរកម្មវិធី គំរូស្ថាបត្យកម្មប្រព័ន្ធ និងលំនាំផ្ទុកទិន្នន័យ។ ទាំងនេះគឺជាគំរូពេញនិយមបំផុតមានផ្សេងទៀត។ ខ្ញុំនឹងរាយបញ្ជីពួកគេទាំងអស់ខាងក្រោម។

ក្រុមហ៊ុនជាច្រើនប្រើលំនាំក្នុងការអនុវត្តរបស់ពួកគេ។ ការប្រើប្រាស់លំនាំមានគុណសម្បត្តិនិងគុណវិបត្តិរបស់វា។
អត្ថប្រយោជន៍នៃការប្រើប្រាស់លំនាំរចនា:
- អត្ថប្រយោជន៍ចម្បងនៃការប្រើប្រាស់លំនាំលើការរចនាដោយឥតគិតថ្លៃគឺថា គំរូផ្តល់ឈ្មោះដល់បញ្ហា និងកំណត់វិធីដោះស្រាយបញ្ហាជាច្រើនតាមរយៈសំណុំអរូបីដែលត្រៀមរួចជាស្រេច។
- សម្របសម្រួលទំនាក់ទំនងរវាងអ្នកអភិវឌ្ឍន៍ប្រព័ន្ធ
- ការប្រើប្រាស់គំរូរចនាគឺស្រដៀងគ្នាទៅនឹងការប្រើប្រាស់បណ្ណាល័យកូដដែលត្រៀមរួចជាស្រេច
ការប្រើប្រាស់ត្រឹមត្រូវ។គំរូជួយអ្នកអភិវឌ្ឍន៍កំណត់វ៉ិចទ័រដែលចង់បាននៃការអភិវឌ្ឍន៍ និងជៀសវាងបញ្ហាជាច្រើនដែលអាចកើតឡើងក្នុងអំឡុងពេលដំណើរការអភិវឌ្ឍន៍។

បញ្ហាដែលបង្កើតលំនាំរចនា:
— តាមគំនិតរបស់ខ្ញុំ បញ្ហាសំខាន់បំផុតក្នុងការប្រើប្រាស់គំរូគឺការបាត់បង់ភាពបត់បែនក្នុងការរចនា និងការអភិវឌ្ឍន៍ប្រព័ន្ធ
- ការប្រើប្រាស់គំរូធ្វើឱ្យប្រព័ន្ធស្មុគស្មាញ
- ការធ្វើតាមគំរូជាក់លាក់មួយដោយងងឹតងងុល ហើយការប្រើប្រាស់វានៅគ្រប់ទីកន្លែងអាចបង្កឱ្យមានបញ្ហាស្ថាបត្យកម្ម និងឡូជីខលជាច្រើន

លំនាំសរសេរកម្មវិធីមូលដ្ឋាន

មូលដ្ឋាន

គំរូគណៈប្រតិភូគំរូប្រតិភូកម្ម - វត្ថុមួយបង្ហាញខាងក្រៅពីអាកប្បកិរិយាមួយចំនួន ប៉ុន្តែតាមពិត ផ្ទេរការទទួលខុសត្រូវសម្រាប់ការអនុវត្តអាកប្បកិរិយានោះទៅវត្ថុដែលពាក់ព័ន្ធ។
គំរូ ការរចនាមុខងារការរចនាមុខងារ - ធានាថាម៉ូឌុលនីមួយៗនៃកម្មវិធីកុំព្យូទ័រមានទំនួលខុសត្រូវតែមួយ ហើយអនុវត្តវាជាមួយនឹងផលប៉ះពាល់អប្បរមាលើផ្នែកផ្សេងទៀតនៃកម្មវិធី។
ចំណុចប្រទាក់ដែលមិនអាចផ្លាស់ប្តូរបាន។(ចំណុចប្រទាក់ដែលមិនអាចផ្លាស់ប្តូរបាន) - ការបង្កើតវត្ថុដែលមិនអាចផ្លាស់ប្តូរបាន។
ចំណុចប្រទាក់ - វិធីសាស្រ្តទូទៅសម្រាប់រចនាសម្ព័ន្ធ កម្មវិធីកុំព្យូទ័រដើម្បីធ្វើឱ្យពួកគេកាន់តែងាយស្រួលយល់។
ចំណុចប្រទាក់(ចំណុចប្រទាក់សញ្ញាសម្គាល់) - វត្តមានឬអវត្តមាននៃការអនុវត្តចំណុចប្រទាក់សញ្ញាសម្គាល់ត្រូវបានប្រើជាគុណលក្ខណៈ (ជាសញ្ញាសម្គាល់នៃធាតុវត្ថុ) ។ ភាសាសរសេរកម្មវិធីទំនើបអាចប្រើគុណលក្ខណៈ ឬចំណារពន្យល់ជំនួសវិញ។
ធុងទ្រព្យសម្បត្តិ(Property container) - អនុញ្ញាតឱ្យអ្នកបន្ថែមលក្ខណសម្បត្តិបន្ថែមសម្រាប់ class ទៅកាន់ container (ក្នុង class) ជំនួសឱ្យការពង្រីក class ជាមួយនឹង properties ថ្មី។
លំនាំព្រឹត្តិការណ៍(ប៉ុស្តិ៍ព្រឹត្តិការណ៍) - ពង្រីកគំរូបោះពុម្ព/ជាវ ដើម្បីបង្កើតប៉ុស្តិ៍កណ្តាលសម្រាប់ព្រឹត្តិការណ៍។ ប្រើវត្ថុប្រូកស៊ីដើម្បីជាវ និងវត្ថុប្រូកស៊ីដើម្បីផ្សព្វផ្សាយព្រឹត្តិការណ៍មួយទៅកាន់ប៉ុស្តិ៍។ អ្នកតំណាងមានដាច់ដោយឡែកពីអ្នកបោះពុម្ព ឬអ្នកជាវពិតប្រាកដ។ អតិថិជនអាចទទួលបានព្រឹត្តិការណ៍ដែលបានបោះពុម្ពផ្សាយពីអង្គភាពច្រើនជាងមួយ បើទោះបីជាវាត្រូវបានចុះឈ្មោះក្នុងឆានែលតែមួយក៏ដោយ។

លំនាំបង្កើត

គំរូនៃការបង្កើតគឺជាគំរូនៃការរចនាដែលអរូបីដំណើរការនៃការបង្កើតភ្លាមៗ។ ពួកគេធ្វើឱ្យវាអាចធ្វើទៅបានដើម្បីធ្វើឱ្យប្រព័ន្ធឯករាជ្យពីវិធីដែលវត្ថុត្រូវបានបង្កើត តែង និងបង្ហាញ។ គំរូដែល instantiates classs ប្រើ inheritance ដើម្បីកែប្រែ class instantiated ហើយ template ដែល instantiates object ផ្ទេរ instantiation ទៅ object ផ្សេងទៀត។
រោងចក្រអរូបី(រោងចក្រអរូបី) - ថ្នាក់ដែលតំណាងឱ្យចំណុចប្រទាក់សម្រាប់បង្កើតសមាសធាតុប្រព័ន្ធ។
អ្នកសាងសង់(Builder) - ថ្នាក់ដែលផ្តល់ចំណុចប្រទាក់សម្រាប់បង្កើតវត្ថុស្មុគស្មាញ។
វិធីសាស្រ្តរោងចក្រ(វិធីសាស្ត្ររោងចក្រ) - កំណត់ចំណុចប្រទាក់សម្រាប់បង្កើតវត្ថុមួយ ប៉ុន្តែទុកវាឱ្យថ្នាក់រងដើម្បីសម្រេចថាថ្នាក់ណាដែលត្រូវបង្កើតភ្លាមៗ។
ការចាប់ផ្តើមខ្ជិល។(Lazy initialization) — វត្ថុ​មួយ​ដែល​ត្រូវ​បាន​ចាប់​ផ្ដើម​អំឡុង​ពេល​ហៅ​ទៅ​វា​ជា​លើក​ដំបូង។
អាងទោល។(ច្រើន) - ធានាថាថ្នាក់មួយបានដាក់ឈ្មោះវត្ថុវត្ថុ និងផ្តល់ចំណុចចូលដំណើរការសកលដល់ពួកគេ។
អាងវត្ថុ(Object pool) - ថ្នាក់ដែលតំណាងឱ្យចំណុចប្រទាក់សម្រាប់ធ្វើការជាមួយសំណុំនៃវត្ថុដែលបានចាប់ផ្ដើម និងរួចរាល់សម្រាប់ប្រើ។
គំរូដើម(គំរូ) — កំណត់ចំណុចប្រទាក់សម្រាប់បង្កើតវត្ថុមួយដោយក្លូនវត្ថុមួយផ្សេងទៀតជំនួសឱ្យការបង្កើតវាតាមរយៈអ្នកបង្កើត។
ការទទួលបានធនធានគឺជាការចាប់ផ្តើម(Resource acquisition is initialization (RAII)) - ការទទួលបានធនធានជាក់លាក់មួយត្រូវបានផ្សំជាមួយនឹងការចាប់ផ្តើមដំបូង ហើយការចេញផ្សាយវាត្រូវបានផ្សំជាមួយនឹងការបំផ្លាញវត្ថុមួយ។
ឯកោ(Singleton) - class ដែលអាចមានតែមួយ instance ។

លំនាំរចនាសម្ព័ន្ធ

គំរូរចនាសម្ព័ន្ធកំណត់ភាពខុសគ្នា រចនាសម្ព័ន្ធស្មុគស្មាញដែលផ្លាស់ប្តូរចំណុចប្រទាក់នៃវត្ថុដែលមានស្រាប់ ឬការអនុវត្តរបស់វា ដែលធ្វើឱ្យវាកាន់តែងាយស្រួលក្នុងការអភិវឌ្ឍ និងបង្កើនប្រសិទ្ធភាពកម្មវិធី។
អាដាប់ទ័រ(អាដាប់ធ័រ / រុំ) - វត្ថុដែលផ្តល់អន្តរកម្មរវាងវត្ថុពីរផ្សេងទៀតដែលមួយប្រើនិងមួយទៀតផ្តល់ចំណុចប្រទាក់មិនឆបគ្នាជាមួយទីមួយ។
ស្ពាន(ស្ពាន) - រចនាសម្ព័ន្ធដែលអនុញ្ញាតឱ្យអ្នកផ្លាស់ប្តូរចំណុចប្រទាក់ចូលដំណើរការនិងចំណុចប្រទាក់ការអនុវត្តថ្នាក់ដោយឯករាជ្យ។
អ្នកភ្ជាប់( ន. ) - វត្ថុ​ដែល​ផ្សំ​វត្ថុ​ស្រដៀង​នឹង​ខ្លួន ។
អ្នកតុបតែងរុំ(Decorator) ឬ (Wrapper) - ថ្នាក់ដែលពង្រីកមុខងារនៃថ្នាក់មួយទៀតដោយមិនប្រើមរតក។
ផ្នែកខាងមុខ(facade) - វត្ថុ​ដែល​សង្ខេប​ការងារ​ដោយ​ថ្នាក់​ជា​ច្រើន ដោយ​ផ្សំ​វា​ជា​មួយ​ទាំងមូល។
ចំណុចចូលតែមួយ(ឧបករណ៍បញ្ជាខាងមុខ) - ផ្តល់ ចំណុចប្រទាក់បង្រួបបង្រួមសម្រាប់ចំណុចប្រទាក់នៅក្នុងប្រព័ន្ធរង។ Front Controller កំណត់ចំណុចប្រទាក់កម្រិតខ្ពស់ដែលធ្វើឱ្យប្រព័ន្ធរងងាយស្រួលប្រើ។
អ្នកឆ្លៀតឱកាស(Flyweight) - នេះគឺជាវត្ថុដែលតំណាងឱ្យខ្លួនវាថាជាឧទាហរណ៍តែមួយគត់នៅក្នុង កន្លែងផ្សេងគ្នាកម្មវិធី ប៉ុន្តែតាមពិតមិនមែនតែមួយទេ។
អនុប្រធាន(ប្រូកស៊ី) - វត្ថុដែលដើរតួជាអន្តរការីរវាងវត្ថុពីរផ្សេងទៀត ហើយដែលអនុវត្ត/រឹតបន្តឹងការចូលប្រើវត្ថុដែលបានចូលប្រើតាមរយៈវា។

លំនាំអាកប្បកិរិយា

លំនាំអាកប្បកិរិយាកំណត់អន្តរកម្មរវាងវត្ថុ ដូច្នេះបង្កើនភាពបត់បែនរបស់វា។
ខ្សែសង្វាក់នៃការទទួលខុសត្រូវ(ខ្សែសង្វាក់នៃការទទួលខុសត្រូវ) - ត្រូវបានបង្កើតឡើងដើម្បីរៀបចំនៅក្នុងប្រព័ន្ធនៃកម្រិតនៃការទទួលខុសត្រូវមួយ។
ក្រុម(បញ្ជា) - តំណាងឱ្យសកម្មភាព។ វត្ថុបញ្ជាមានសកម្មភាពខ្លួនវា និងប៉ារ៉ាម៉ែត្ររបស់វា។
អ្នកបកប្រែ(អ្នកបកប្រែ) - ដោះស្រាយបញ្ហាដែលកើតឡើងញឹកញាប់ ប៉ុន្តែត្រូវផ្លាស់ប្តូរ។
Iterator(Iterator) - តំណាងឱ្យវត្ថុដែលអនុញ្ញាតឱ្យអ្នកទទួលបានការចូលដំណើរការជាបន្តបន្ទាប់ទៅកាន់ធាតុនៃវត្ថុសរុបដោយមិនប្រើការពិពណ៌នាអំពីវត្ថុនីមួយៗដែលជាផ្នែកមួយនៃការប្រមូលផ្តុំ។
អ្នកសម្របសម្រួល(អ្នកសម្របសម្រួល) - ផ្តល់នូវអន្តរកម្មរវាងវត្ថុជាច្រើនខណៈពេលដែលបង្កើត ការភ្ជាប់រលុងនិងលុបបំបាត់តម្រូវការសម្រាប់វត្ថុដើម្បីយោងគ្នាទៅវិញទៅមកយ៉ាងច្បាស់។
អាណាព្យាបាល(Memento) - អនុញ្ញាតឱ្យអ្នកចាប់យក និងរក្សាទុកស្ថានភាពខាងក្នុងរបស់វត្ថុដោយមិនបំបែកការវេចខ្ចប់ ដូច្នេះអ្នកអាចស្ដារវាឡើងវិញនៅក្នុងស្ថានភាពទាំងនេះនៅពេលក្រោយ។
វត្ថុទទេ(Null object) - រារាំងទ្រនិចទទេដោយផ្តល់នូវវត្ថុ "លំនាំដើម" ។
អ្នកសង្កេតការណ៍(អ្នកសង្កេតការណ៍) - កំណត់ភាពអាស្រ័យមួយទៅច្រើនរវាងវត្ថុ ដូច្នេះនៅពេលដែលស្ថានភាពនៃវត្ថុមួយផ្លាស់ប្តូរ វត្ថុទាំងអស់ដែលពឹងផ្អែកលើវាត្រូវបានជូនដំណឹងអំពីព្រឹត្តិការណ៍នេះ។
អ្នកបម្រើ(អ្នកបម្រើ) - ប្រើដើម្បីផ្តល់មុខងារទូទៅដល់ក្រុមនៃថ្នាក់មួយ។
ការបញ្ជាក់(Specification) - បម្រើដើម្បីភ្ជាប់តក្កវិជ្ជាអាជីវកម្ម។
រដ្ឋ(រដ្ឋ) - ប្រើក្នុងករណីដែលក្នុងអំឡុងពេលដំណើរការកម្មវិធី វត្ថុមួយត្រូវតែផ្លាស់ប្តូរឥរិយាបថអាស្រ័យលើស្ថានភាពរបស់វា។
យុទ្ធសាស្ត្រ(យុទ្ធសាស្ត្រ) - រចនាឡើងដើម្បីកំណត់ក្រុមគ្រួសារនៃក្បួនដោះស្រាយ រុំព័ទ្ធពួកវានីមួយៗ និងធានាលទ្ធភាពផ្លាស់ប្តូររបស់ពួកគេ។
វិធីសាស្រ្តគំរូ(វិធីសាស្ត្រគំរូ) - កំណត់មូលដ្ឋាននៃក្បួនដោះស្រាយ និងអនុញ្ញាតឱ្យកូនចៅកំណត់ឡើងវិញនូវជំហានមួយចំនួននៃក្បួនដោះស្រាយដោយមិនផ្លាស់ប្តូររចនាសម្ព័ន្ធរបស់វាទាំងមូល។
អ្នកទស្សនា(អ្នកទស្សនា) - ពិពណ៌នាអំពីប្រតិបត្តិការដែលត្រូវបានអនុវត្តលើវត្ថុនៃថ្នាក់ផ្សេងទៀត។ នៅពេលអ្នកផ្លាស់ប្តូរថ្នាក់អ្នកទស្សនា មិនចាំបាច់ផ្លាស់ប្តូរថ្នាក់ដែលបានបម្រើនោះទេ។
គោលការណ៍សាមញ្ញ- ខ្ញុំដឹងថាគំរូបែបនេះមាន ប៉ុន្តែខ្ញុំមិនទាន់រកឃើញអត្ថន័យរបស់វានៅឡើយទេ។ ប្រសិនបើអ្នកមានព័ត៌មានណាមួយសូមបង្ហោះវានៅក្នុងមតិយោបល់។
អ្នកស្តាប់(អ្នកស្តាប់ព្រឹត្តិការណ៍) - ស្រដៀងគ្នា
អ្នកទស្សនាតែមួយដង(អ្នកទស្សនាទោល) - បង្កើនប្រសិទ្ធភាពការអនុវត្តគំរូអ្នកទស្សនា ដែលត្រូវបានចាប់ផ្តើម ប្រើម្តង ហើយបន្ទាប់មកលុប។
អ្នកទស្សនាតាមឋានានុក្រម(អ្នកទស្សនាតាមឋានានុក្រម) - ផ្តល់មធ្យោបាយដើម្បីឆ្លងកាត់ចំណុចកំពូលទាំងអស់នៃរចនាសម្ព័ន្ធទិន្នន័យតាមឋានានុក្រម (ឧទាហរណ៍ ដើមឈើ)។

លំនាំកម្មវិធីប៉ារ៉ាឡែល

ប្រើដើម្បីសរសេរកម្មវិធីច្រើនខ្សែកាន់តែមានប្រសិទ្ធភាព និងផ្តល់នូវដំណោះស្រាយដែលត្រៀមរួចជាស្រេចចំពោះបញ្ហានៃការធ្វើសមកាលកម្ម។
វត្ថុសកម្ម(វត្ថុសកម្ម) - បម្រើដើម្បីបំបែកខ្សែស្រឡាយនៃការប្រតិបត្តិនៃវិធីសាស្រ្តពីខ្សែស្រឡាយដែលវាត្រូវបានគេហៅថា។ ប្រើគំរូ ការហៅអសមកាលវិធីសាស្រ្តនិងកម្មវិធីកំណត់ពេល។
Dodger(Balking) - បម្រើដើម្បីអនុវត្តសកម្មភាពលើវត្ថុមួយនៅពេលដែលវាស្ថិតនៅក្នុងស្ថានភាពត្រឹមត្រូវ។
ការចងទ្រព្យសម្បត្តិ(លក្ខណសម្បត្តិចងភ្ជាប់) - រួមបញ្ចូលគ្នានូវអ្នកសង្កេតការណ៍ជាច្រើន ដើម្បីធានាបាននូវការធ្វើសមកាលកម្មនៃលក្ខណៈសម្បត្តិឆ្លងកាត់វត្ថុផ្សេងៗគ្នា
ការផ្ញើសារ(លំនាំរចនាសារ (MDP)) - អនុញ្ញាតឱ្យសមាសធាតុ និងកម្មវិធីផ្លាស់ប្តូរព័ត៌មាន (សារ)។
ពិនិត្យសោពីរដង(ការចាក់សោដែលបានត្រួតពិនិត្យពីរដង) - ត្រូវបានរចនាឡើងដើម្បីកាត់បន្ថយការលើសដែលទាក់ទងនឹងការទទួលបានសោ។
ព្រឹត្តិការណ៍អសមកាល(អសមកាលផ្អែកលើព្រឹត្តិការណ៍) - ដោះស្រាយបញ្ហាជាមួយនឹងលំនាំអសមកាលដែលកើតឡើងនៅក្នុងកម្មវិធីដែលមានខ្សែស្រឡាយច្រើន។
ការព្យួរការពារ(Guarded suspension) - ប្រើដើម្បីទប់ស្កាត់ការប្រតិបត្តិនៃសកម្មភាពលើវត្ថុតែនៅពេលដែលវាស្ថិតក្នុងស្ថានភាពត្រឹមត្រូវ។
ពាក់កណ្តាលសមកាលកម្ម(Half-Sync/Half-Async) - មិនមានទិន្នន័យអំពីគំរូនេះនៅឡើយទេ។
អ្នកដឹកនាំ(អ្នកដឹកនាំ/អ្នកដើរតាម) - មិនមានទិន្នន័យអំពីគំរូនេះនៅឡើយទេ។
ចាក់សោ(ចាក់សោ) - ខ្សែសង្វាក់មួយចាក់សោធនធាន ដើម្បីការពារខ្សែស្រឡាយផ្សេងទៀតពីការចូលប្រើ ឬផ្លាស់ប្តូរវា។
ម៉ូនីទ័រ(Monitor object) — វត្ថុ​ដែល​មាន​បំណង​សម្រាប់ ការប្រើប្រាស់ដោយសុវត្ថិភាពខ្សែស្រឡាយច្រើនជាងមួយ។
រ៉េអាក់ទ័រ - ត្រូវបានរចនាឡើងសម្រាប់ការបញ្ជូនសមកាលកម្មនៃសំណើទៅសេវាកម្មពីប្រភពមួយឬច្រើន។
ការចាក់សោការអាន-សរសេរ(អានការសរសេរសោ) - អនុញ្ញាតឱ្យខ្សែស្រឡាយជាច្រើនអានព័ត៌មានក្នុងពេលដំណាលគ្នាពីកន្លែងផ្ទុករួមគ្នា ប៉ុន្តែអនុញ្ញាតឱ្យមានខ្សែស្រឡាយតែមួយដើម្បីផ្លាស់ប្តូរវាក្នុងពេលតែមួយ។
អ្នករៀបចំកាលវិភាគ(Scheduler) - ផ្តល់យន្តការសម្រាប់ការអនុវត្តគោលនយោបាយកំណត់ពេលដោយមិនពឹងផ្អែកលើគោលនយោបាយជាក់លាក់ណាមួយឡើយ។
អាងខ្សែស្រឡាយ(បណ្តុំខ្សែស្រឡាយ) - ផ្តល់នូវបណ្តុំនៃខ្សែស្រឡាយសម្រាប់ដំណើរការការងារ ដែលជាធម្មតាបង្ហាញក្នុងទម្រង់ជាជួរ។
ការផ្ទុកស្ទ្រីមពិសេស(ការផ្ទុកជាក់លាក់នៃខ្សែស្រឡាយ) - បម្រើដើម្បីផ្តល់នូវអថេរសកលផ្សេងគ្នាសម្រាប់ខ្សែស្រឡាយផ្សេងគ្នា។
ការប្រតិបត្តិខ្សែតែមួយ(ការប្រតិបត្តិខ្សែតែមួយ) - រារាំងការហៅវិធីសាស្ត្រដំណាលគ្នា ដោយហេតុនេះហាមឃាត់ការប្រតិបត្តិដំណាលគ្នានៃវិធីសាស្ត្រនេះ។
គំរូសហប្រតិបត្តិការ(លំនាំសហករណ៍) - ផ្តល់នូវយន្តការមួយដើម្បីបញ្ឈប់ការប្រតិបត្តិដោយសុវត្ថិភាព ដោយប្រើទង់ទូទៅដើម្បីផ្តល់សញ្ញាអំពីការបញ្ចប់ខ្សែស្រឡាយ។

លំនាំស្ថាបត្យកម្មប្រព័ន្ធ

ម៉ូដែល-មើល-ឧបករណ៍បញ្ជា(MVC) - Model-View-Controller ។
គំរូ-មើល-ធ្វើបទបង្ហាញ
គំរូ-មើល-មើលគំរូ
បទបង្ហាញ-អរូបី-ការត្រួតពិនិត្យ
វត្ថុអាក្រាត
គំរូឋានានុក្រម-មើល-ឧបករណ៍បញ្ជា

គំរូសហគ្រាស

កំណត់ត្រាសកម្ម - មធ្យោបាយដើម្បីចូលប្រើទិន្នន័យ មូលដ្ឋានទិន្នន័យទំនាក់ទំនងទិន្នន័យនៅក្នុងកម្មវិធីតម្រង់ទិសវត្ថុ។
ប្រតិភូធុរកិច្ច
អង្គធាតុផ្សំ
ទិដ្ឋភាពសមាសធាតុ
DAO (ទិន្នន័យ ចូលប្រើវត្ថុ) វត្ថុចូលប្រើទិន្នន័យ
ទិដ្ឋភាពអ្នកបញ្ជូន
ឧបករណ៍បញ្ជាខាងមុខ
តម្រងស្ទាក់ចាប់
ការចុះឈ្មោះ
ភ្នាក់ងារធ្វើឱ្យសកម្មសេវាកម្ម
ទីតាំងសេវាកម្ម
សេវាកម្មដល់កម្មករ
វគ្គ Facade/Session Facade
ផ្ទេរវត្ថុប្រមូលផ្តុំ
ផ្ទេរវត្ថុ
កម្មវិធីគ្រប់គ្រងបញ្ជីតម្លៃ
មើលជំនួយ
ឯកតាការងារ

ប្រភេទផ្សេងទៀតនៃគំរូ

វាក៏មានគំរូមួយចំនួនផ្សេងទៀតដែលអាចរកបាននៅថ្ងៃនេះ។
ការផ្ទុក(ឃ្លាំង)
ក្រុមហ៊ុនដឹកជញ្ជូន Rider Mapperពិពណ៌នាអំពីការផ្តល់សិទ្ធិចូលប្រើព័ត៌មានដែលបានរក្សាទុក។
គំរូវិភាគពិពណ៌នាអំពីវិធីសាស្រ្តជាមូលដ្ឋានសម្រាប់ការអភិវឌ្ឍន៍តម្រូវការកម្មវិធី (ការវិភាគតម្រូវការ) មុនពេលដំណើរការបង្កើតកម្មវិធីចាប់ផ្តើម
គំរូទំនាក់ទំនងពិពណ៌នាអំពីដំណើរការទំនាក់ទំនងរវាងអ្នកចូលរួមបុគ្គល/និយោជិតនៃអង្គការមួយ។
គំរូអង្គការពិពណ៌នាអំពីឋានានុក្រមអង្គការរបស់សហគ្រាស/ក្រុមហ៊ុន
ប្រឆាំងលំនាំ(Anti-Design-Patterns) ពិពណ៌នាអំពីអ្វីដែលមិនគួរធ្វើនៅពេលបង្កើតកម្មវិធី ការបង្ហាញ កំហុសធម្មតា។នៅក្នុងការរចនានិងការអនុវត្ត

ប្រសិនបើអ្នកធ្លាប់ឆ្ងល់ថាតើគំរូរចនាជាអ្វីនោះ សូមស្វាគមន៍។ នៅក្នុងអត្ថបទនេះ ខ្ញុំនឹងប្រាប់អ្នកពីអ្វីដែលពួកគេមាន ហេតុអ្វីបានជាពួកគេត្រូវការ របៀបប្រើពួកវា និងផ្តល់ឧទាហរណ៍នៃគំរូទូទៅបំផុតនៅក្នុង PHP ។

តើអ្វីជាគំរូរចនា?

គំរូនៃការរចនាត្រូវបានបញ្ជាក់ ដំណោះស្រាយរួចរាល់សម្រាប់ការប្រើប្រាស់ចំពោះបញ្ហាដែលជួបប្រទះញឹកញាប់។ កម្មវិធីប្រចាំថ្ងៃកិច្ចការ។ នេះ​មិន​មែន​ជា​ថ្នាក់ ឬ​បណ្ណាល័យ​ដែល​អាច​ភ្ជាប់​ទៅ​នឹង​គម្រោង​នោះ​ទេ វា​ជា​អ្វី​មួយ​ទៀត​។ គំរូរចនាដែលសមរម្យសម្រាប់ភារកិច្ចត្រូវបានអនុវត្តនៅក្នុងករណីជាក់លាក់នីមួយៗ។ លើសពីនេះទៀតវាឯករាជ្យនៃភាសាសរសេរកម្មវិធី។ គំរូដ៏ល្អមួយត្រូវបានអនុវត្តយ៉ាងងាយស្រួលជាភាសាភាគច្រើន ប្រសិនបើមិនមែនគ្រប់ភាសាទេ អាស្រ័យលើការបង្ហាញនៃភាសា។ ទោះជាយ៉ាងណាក៏ដោយគួរចងចាំថាគំរូបែបនេះប្រសិនបើអនុវត្តមិនត្រឹមត្រូវឬខុសអាចបណ្តាលឱ្យមានបញ្ហាច្រើន។ ទោះយ៉ាងណាក៏ដោយ គំរូដែលបានអនុវត្តត្រឹមត្រូវនឹងជួយដោះស្រាយបញ្ហាបានយ៉ាងងាយស្រួល និងសាមញ្ញ។

គំរូមានបីប្រភេទ៖

  • រចនាសម្ព័ន្ធ;
  • ការបង្កើត;
  • អាកប្បកិរិយា។

រចនាសម្ព័ន្ធគំរូកំណត់ទំនាក់ទំនងរវាងថ្នាក់ និងវត្ថុ ដែលអនុញ្ញាតឱ្យពួកវាធ្វើការជាមួយគ្នា។

ជំនាន់គំរូផ្តល់នូវយន្តការចាប់ផ្តើម ដែលអនុញ្ញាតឱ្យអ្នកបង្កើតវត្ថុតាមមធ្យោបាយងាយស្រួល។

អាកប្បកិរិយាគំរូត្រូវបានប្រើដើម្បីសម្រួលអន្តរកម្មរវាងអង្គភាព។

ហេតុអ្វីបានជាត្រូវការគំរូរចនា?

គំរូរចនាដែលជាស្នូលរបស់វា គឺជាដំណោះស្រាយប្រកបដោយការគិតគូរចំពោះបញ្ហាជាក់លាក់មួយ។ ប្រសិនបើអ្នកប្រឈមមុខនឹងបញ្ហាដែលគេស្គាល់ ហេតុអ្វីមិនប្រើ ដំណោះស្រាយដែលត្រៀមរួចជាស្រេចបញ្ជាក់ដោយបទពិសោធន៍?

ឧទាហរណ៍

ចូរយើងស្រមៃថាអ្នកត្រូវការបញ្ចូលគ្នានូវថ្នាក់ពីរដែលធ្វើ ប្រតិបត្តិការផ្សេងៗអាស្រ័យលើស្ថានភាព។ ថ្នាក់ទាំងនេះត្រូវបានប្រើប្រាស់យ៉ាងខ្លាំងដោយប្រព័ន្ធដែលមានស្រាប់ ដែលធ្វើឱ្យវាមិនអាចដកចេញមួយក្នុងចំណោមពួកវា ហើយបន្ថែមមុខងាររបស់វាទៅទីពីរ។ លើសពីនេះ ការផ្លាស់ប្តូរលេខកូដនឹងត្រូវការការធ្វើតេស្តយ៉ាងប្រុងប្រយ័ត្ន ព្រោះការកែតម្រូវបែបនេះនាំឱ្យមានកំហុសដែលជៀសមិនរួច។ ផ្ទុយទៅវិញ អ្នកអាចអនុវត្តគំរូយុទ្ធសាស្ត្រ និងអាដាប់ធ័រ ហើយប្រើវាដើម្បីដោះស្រាយបញ្ហា។

Class StrategyAndAdapterExampleClass (ឯកជន $_class_one; ឯកជន $_class_two; ឯកជន $_context; មុខងារសាធារណៈ __construct($context) ( $this->_context = $context; ) public function operation1() ( if($this->_context == "context_for_class_one ") ( $this->_class_one->operation1_in_class_one_context(); ) else ($this->_context == "context_for_class_two") ( $this->_class_two->operation1_in_class_two_context(); ) )

សាមញ្ញណាស់មែនទេ? សូមក្រឡេកមើលគំរូយុទ្ធសាស្រ្តឱ្យបានដិតដល់។

គំរូ "យុទ្ធសាស្ត្រ"

យុទ្ធសាស្ត្រ- គំរូអាកប្បកិរិយាដែលអនុញ្ញាតឱ្យអ្នកជ្រើសរើសឥរិយាបថរបស់កម្មវិធីកំឡុងពេលប្រតិបត្តិអាស្រ័យលើបរិបទដោយបញ្ចូលក្បួនដោះស្រាយជាច្រើននៅក្នុងថ្នាក់ផ្សេងៗគ្នា។

ក្នុងឧទាហរណ៍ខាងលើ ជម្រើសនៃយុទ្ធសាស្ត្រគឺផ្អែកលើតម្លៃនៃអថេរ $context នៅពេលវត្ថុត្រូវបានបង្កើត។ ប្រសិនបើតម្លៃគឺ "context_for_class_one" កម្មវិធីនឹងប្រើ class class_one ។ និងច្រាសមកវិញ។

មិនអីទេ ប៉ុន្តែតើវាអាចប្រើបាននៅឯណា?

ស្រមៃថាអ្នកកំពុងបង្កើតថ្នាក់មួយដែលអាចបង្កើត ឬធ្វើបច្ចុប្បន្នភាពកំណត់ត្រានៅក្នុងមូលដ្ឋានទិន្នន័យ។ ក្នុងករណីទាំងពីរ ប៉ារ៉ាម៉ែត្របញ្ចូលនឹងដូចគ្នា (ឈ្មោះ អាស័យដ្ឋាន លេខទូរស័ព្ទ។ល។) ប៉ុន្តែអាស្រ័យលើស្ថានភាព គាត់នឹងត្រូវប្រើ មុខងារផ្សេងៗដើម្បីធ្វើបច្ចុប្បន្នភាព និងបង្កើតកំណត់ត្រា។ អ្នកអាចសរសេរលក្ខខណ្ឌ if/else ឡើងវិញរាល់ពេល ឬអ្នកអាចបង្កើតវិធីសាស្រ្តមួយដែលនឹងទទួលយកបរិបទ៖

អ្នកប្រើប្រាស់ថ្នាក់ (មុខងារសាធារណៈ CreateOrUpdate($name, $address, $mobile, $userid = null) ( if(is_null($userid)) (// the user does not exist, create a record) else (// record exists, ធ្វើបច្ចុប្បន្នភាពវា)))

ជាធម្មតា លំនាំយុទ្ធសាស្រ្តពាក់ព័ន្ធនឹងការបញ្ចូលក្បួនដោះស្រាយនៅក្នុងថ្នាក់ ប៉ុន្តែនៅក្នុង ក្នុងករណីនេះនេះមិនចាំបាច់ទេ។ សូមចងចាំថាអ្នកមិនចាំបាច់ធ្វើតាមគំរូពាក្យសម្រាប់ពាក្យនោះទេ។ ជម្រើសណាមួយអាចទទួលយកបាន ប្រសិនបើពួកគេដោះស្រាយបញ្ហា និងត្រូវគ្នាទៅនឹងគោលគំនិត។

គំរូអាដាប់ធ័រ

អាដាប់ទ័រ- គំរូរចនាសម្ព័ន្ធដែលអនុញ្ញាតឱ្យអ្នកប្រើថ្នាក់ដែលអនុវត្ត មុខងារដែលត្រូវការប៉ុន្តែមានចំណុចប្រទាក់មិនសមរម្យ។

វាក៏អនុញ្ញាតឱ្យអ្នកផ្លាស់ប្តូរធាតុបញ្ចូលមួយចំនួនដើម្បីឱ្យត្រូវគ្នាជាមួយចំណុចប្រទាក់ថ្នាក់ខាងក្នុង។

តើត្រូវប្រើវាដោយរបៀបណា?

ឈ្មោះផ្សេងទៀតសម្រាប់អាដាប់ទ័រគឺ "រុំ" ។ វា "រុំ" ចំណុចប្រទាក់ថ្មីនៅជុំវិញថ្នាក់សម្រាប់ប្រើ។ ឧទាហរណ៍បុរាណ៖ អ្នកត្រូវបង្កើតថ្នាក់ គំរូប្រធានបទមានថ្នាក់វត្ថុនៅក្នុងមូលដ្ឋានទិន្នន័យ។ ជំនួសឱ្យការចូលប្រើថ្នាក់តារាងដោយផ្ទាល់ និងហៅវិធីសាស្ត្ររបស់ពួកគេម្តងមួយៗ អ្នកអាចបំប្លែងការហៅទៅកាន់វិធីសាស្ត្រទាំងនោះក្នុងវិធីសាស្ត្រតែមួយក្នុងអាដាប់ទ័រ។ វាមិនត្រឹមតែអនុញ្ញាតឱ្យអ្នកប្រើសំណុំនៃប្រតិបត្តិការឡើងវិញប៉ុណ្ណោះទេ ប៉ុន្តែវាក៏នឹងជួយសង្រ្គោះអ្នកពីការសរសេរកូដឡើងវិញជាបន្តបន្ទាប់ផងដែរ ប្រសិនបើអ្នកត្រូវការអនុវត្តសំណុំសកម្មភាពដូចគ្នានៅកន្លែងផ្សេង។

ប្រៀបធៀបឧទាហរណ៍ពីរ។

ដោយគ្មានអាដាប់ទ័រ
$user = អ្នកប្រើប្រាស់ថ្មី(); $user->CreateOrUpdate(// ប៉ារ៉ាម៉ែត្រ); $profile = ពត៌មានថ្មី(); $profile->CreateOrUpdate(// ប៉ារ៉ាម៉ែត្រ);

ប្រសិន​បើ​យើង​ត្រូវ​ប្រើ​កូដ​បែប​នេះ​ឡើង​វិញ យើង​នឹង​ត្រូវ​បង្ខំ​ឱ្យ​សរសេរ​រឿង​ទាំង​មូល​ឡើង​វិញ។

ដោយប្រើអាដាប់ទ័រ

យើងអាចបង្កើត Account wrapper class៖

គណនីថ្នាក់() (មុខងារសាធារណៈ NewAccount(// ប៉ារ៉ាម៉ែត្រ) ( $user = new User(); $user->CreateOrUpdate(// part of parameters); $profile = new Profile(); $profile->CreateOrUpdate( // ផ្នែកនៃប៉ារ៉ាម៉ែត្រ ) ) $account_domain = គណនីថ្មី(); $account_domain->NewAccount(// ប៉ារ៉ាម៉ែត្រ);

ឥឡូវនេះយើងអាចប្រើថ្នាក់គណនីរាល់ពេល ហើយលើសពីនេះទៀតយើងអាចបន្ថែមមុខងារបន្ថែមទៅវាបាន។

គំរូវិធីសាស្រ្តរោងចក្រ

រោងចក្រ- generating template ដែលជា class ដែលមាន method សម្រាប់បង្កើត object ផ្សេងៗ។

គោលបំណងសំខាន់នៃលំនាំនេះគឺដើម្បីបំប្លែងនីតិវិធីសម្រាប់បង្កើតថ្នាក់ផ្សេងៗក្នុងមុខងារតែមួយ ដែលអាស្រ័យលើបរិបទដែលបានបញ្ជូនទៅវា ត្រឡប់វត្ថុដែលត្រូវការ។

តើត្រូវប្រើវាដោយរបៀបណា?

រោងចក្រមួយត្រូវបានប្រើជាធម្មតាដើម្បីបង្កើតវ៉ារ្យ៉ង់ផ្សេងគ្នានៃថ្នាក់មូលដ្ឋាន។ ចូរនិយាយថាអ្នកមានថ្នាក់ប៊ូតុង - ប៊ូតុង - និងជម្រើសបី - ប៊ូតុងរូបភាព, ប៊ូតុងបញ្ចូលនិងប៊ូតុងពន្លឺ។ ជាមួយនឹងរោងចក្រដែលអ្នកអាចបង្កើតបាន។ ជម្រើសផ្សេងៗប៊ូតុងអាស្រ័យលើស្ថានភាព។

ដំបូងយើងបង្កើតថ្នាក់បី៖

Abstract class Button (ការពារ $_html; public function getHtml() ( return $this->_html; )) class ImageButton extends Button (ការពារ $_html = "..."; // HTML code of the image button) class InputButton extends ប៊ូតុង (ការពារ $_html = "..."; // កូដ HTML សម្រាប់ប៊ូតុងធម្មតា ( ); ) ថ្នាក់ FlashButton ពង្រីកប៊ូតុង (ការពារ $_html = "..."; // កូដ HTML នៃប៊ូតុង Flash)

ឥឡូវនេះយើងអាចសរសេររោងចក្ររបស់យើង:

Class ButtonFactory (មុខងារឋិតិវន្តសាធារណៈ createButton($type) ( $baseClass = "Button"; $targetClass = ucfirst($type).$baseClass; if (class_exists($targetClass) && is_subclass_of($targetClass, $baseClass)) (ត្រឡប់ $targetClass ថ្មី ) else (បោះ Exception ថ្មី ("ប្រភេទប៊ូតុង "$type" មិនត្រូវបានទទួលស្គាល់ទេ។");

ហើយប្រើវា៖

$buttons = អារេ("រូបភាព","បញ្ចូល","flash"); foreach($buttons as $b) ( echo ButtonFactory::createButton($b)->getHtml())

លទ្ធផលគួរតែជា HTML ដែលមានប៊ូតុងគ្រប់ប្រភេទ។ វិធីនេះយើងអាចបញ្ជាក់ប្រភេទប៊ូតុងដែលយើងចង់បាន ហើយប្រើលេខកូដឡើងវិញ។

គំរូអ្នកតុបតែង

អ្នកតុបតែងគឺ​ជា​គំរូ​រចនាសម្ព័ន្ធ​ដែល​អនុញ្ញាត​ឱ្យ​អ្នក​បន្ថែម​ឥរិយាបទ​ថ្មី​ទៅ​វត្ថុ​កំឡុង​ពេល​ប្រតិបត្តិ​កម្មវិធី អាស្រ័យ​លើ​ស្ថានភាព។

គោលដៅគឺដើម្បីពង្រីកឥរិយាបថនៃវត្ថុជាក់លាក់មួយដោយមិនចាំបាច់ផ្លាស់ប្តូរឥរិយាបថនៃថ្នាក់មូលដ្ឋាន។ នេះនឹងអនុញ្ញាតឱ្យអ្នកប្រើគ្រឿងតុបតែងជាច្រើនក្នុងពេលតែមួយ។ គំរូនេះគឺជាជម្រើសមួយសម្រាប់មរតក។ មិនដូចមរតកទេ អ្នកតុបតែងបន្ថែមអាកប្បកិរិយាកំឡុងពេលដំណើរការកម្មវិធី។

ដើម្បីអនុវត្តការតុបតែងយើងត្រូវការ:

  1. ទទួល​មរតក​ថ្នាក់​តុបតែង​ពី​ថ្នាក់​មូលដ្ឋាន។
  2. បន្ថែមវាលមួយដែលមានតំណទៅ ថ្នាក់មូលដ្ឋាននៅក្នុងអ្នកតុបតែង។
  3. បញ្ជូនឯកសារយោងទៅវត្ថុដែលត្រូវតុបតែងទៅអ្នកសាងសង់អ្នកតុបតែង។
  4. ប្តូរទិសវិធីសាស្រ្តពីអ្នកតុបតែងទៅវត្ថុដែលកំពុងតុបតែង។
  5. បដិសេធវិធីសាស្រ្តក្នុងការតុបតែងដែលអ្នកចង់ផ្លាស់ប្តូរអាកប្បកិរិយារបស់អ្នក។

តើត្រូវប្រើវាដោយរបៀបណា?

ឧបមាថាយើងមានវត្ថុមួយដែលត្រូវមានឥរិយាបទជាក់លាក់ក្នុងស្ថានភាពជាក់លាក់មួយ។ ឧទាហរណ៍ យើង​មាន​តំណ HTML ដើម្បី​ចេញ​ពី​គណនី​របស់​អ្នក ដែល​គួរ​ត្រូវ​បាន​បង្ហាញ​ខុស​គ្នា​អាស្រ័យ​លើ​ទំព័រ​ណា​ដែល​យើង​បើក។ នេះជាករណីដែលអ្នកតុបតែងនឹងជួយយើង។

ជាដំបូង ចូរយើងសម្រេចថាតើ "ទេសភាព" មួយណាដែលយើងត្រូវការ៖

  • ប្រសិនបើយើងនៅលើទំព័រមេ ហើយចូល តំណភ្ជាប់គួរតែនៅក្នុងស្លាក h2 ។
  • ប្រសិនបើយើងនៅលើទំព័រណាមួយផ្សេងទៀត ហើយត្រូវបានចូល តំណភ្ជាប់គួរតែត្រូវបានគូសបញ្ជាក់។
  • ប្រសិនបើយើងចូល តំណភ្ជាប់គួរតែស្ថិតនៅក្នុងស្លាកខ្លាំង។

ឥឡូវនេះយើងអាចសរសេរអ្នកតុបតែងដោយខ្លួនឯង:

ថ្នាក់ HtmlLinks ( // វិធីសាស្រ្តសម្រាប់ធ្វើការជាមួយតំណ HTML ណាមួយ) ថ្នាក់ LogoutLink ពង្រីក HtmlLinks (ការពារ $_html; មុខងារសាធារណៈ __construct() ( $this->_html = "Logout"; ) មុខងារសាធារណៈ setHtml($html) ( $this - >_html = $html; ) មុខងារសាធារណៈ render() ( បន្ទរ $this->_html; )) class LogoutLinkH2Decorator ពង្រីក HtmlLinks (ការពារ $_logout_link; មុខងារសាធារណៈ __construct($logout_link) ($this->_logout_link = $logout_link; $ this ->setHtml("" . $this->_html . "") មុខងារសាធារណៈ __call($name, $args) ($this->_logout_link->$name($args); )) class LogoutLinkUnderlineDecorator ពង្រីក HtmlLinks (ការពារ $ _logout_link; មុខងារសាធារណៈ __construct($logout_link) ( $this->_logout_link = $logout_link; $this->setHtml("" . $this->_html . "");) មុខងារសាធារណៈ __call($name, $args) ( $this->_logout_link->$name($args); )) ថ្នាក់ LogoutLinkStrongDecorator ពង្រីក HtmlLinks (ការពារ $_logout_link; មុខងារសាធារណៈ __construct($logout_link) ( $this->_logout_link = $logout_link;

$this->setHtml("" . $this->_html . "");

) មុខងារសាធារណៈ __call($name, $args) ( $this->_logout_link->$name($args); ))

ឥឡូវនេះយើងអាចប្រើពួកវាដូចនេះ៖

$logout_link = ថ្មី LogoutLink(); if($is_logged_in) ( $logout_link = new LogoutLinkStrongDecorator($logout_link); ) if($in_home_page) ($logout_link = new LogoutLinkH2Decorator($logout_link); ) else ($logout_link = new LogoutLinkUnderlineDecorator($logout_link);) > render();

សូមកត់សម្គាល់ពីរបៀបដែលអ្នកអាចប្រើឧបករណ៍តុបតែងជាច្រើននៅលើវត្ថុតែមួយ។ ពួកគេទាំងអស់ប្រើមុខងារ __call ដើម្បីហៅវិធីសាស្ត្រដើម។ ប្រសិនបើយើងចូលទៅក្នុងគណនីរបស់យើង ហើយចូលទៅកាន់ទំព័រដើម លទ្ធផលនឹងដូចនេះ៖

ឯកោចេញ

គំរូ "នៅលីវ"

តើត្រូវប្រើវាដោយរបៀបណា?

- គំរូបង្កើតដែលអនុញ្ញាតឱ្យអ្នកធ្វើឱ្យប្រាកដថាក្នុងអំឡុងពេលដំណើរការកម្មវិធីមានតែឧទាហរណ៍មួយនៃថ្នាក់ដែលមានការចូលប្រើជាសកលត្រូវបានបង្កើតឡើង។

Class Session (private static $instance; public static function getInstance() ( if(is_null(self::$instance)) ( self::$instance = new self(); ) return self::$ instance; ) private function __construct ។

ឥឡូវនេះ យើងអាចចូលប្រើវគ្គពីផ្នែកផ្សេងៗនៃកូដ សូម្បីតែពីថ្នាក់ផ្សេងទៀតក៏ដោយ។ វិធីសាស្ត្រ getInstance នឹងត្រលប់មកវិញនូវសម័យដូចគ្នាជានិច្ច។

សេចក្តីសន្និដ្ឋាន

នៅក្នុងអត្ថបទនេះ យើងបានមើលតែគំរូធម្មតាបំផុតក្នុងចំណោមគំរូជាច្រើន។ ប្រសិនបើអ្នកចង់ស្វែងយល់បន្ថែមអំពីគំរូរចនា អ្នកនឹងឃើញព័ត៌មានជាច្រើននៅលើវិគីភីឌា។ សម្រាប់ច្រើនទៀត ព័ត៌មានពេញលេញសូមក្រឡេកមើលសៀវភៅដ៏ល្បីល្បាញ "បច្ចេកទេសរចនាទិសដៅវត្ថុ" ដោយក្រុម Gang of Four ។

ហើយចុងក្រោយ៖ នៅពេលប្រើគំរូនេះ ឬនោះ ត្រូវប្រាកដថាអ្នកដោះស្រាយបញ្ហា វិធីត្រឹមត្រូវ។. ដូចដែលបានរៀបរាប់ ប្រសិនបើប្រើមិនត្រឹមត្រូវ លំនាំនៃការរចនាអាចបណ្តាលឱ្យមាន បញ្ហាច្រើនទៀតជាងការសម្រេចចិត្ត។ ប៉ុន្តែ​ប្រសិន​បើ​ធ្វើ​បាន​ត្រឹម​ត្រូវ អត្ថប្រយោជន៍​របស់​វា​មិន​អាច​ត្រូវ​បាន​ប៉ាន់​ស្មាន​លើស​ពី​នេះ​ទេ។

អាប់ដេតចុងក្រោយ៖ 10/31/2015

តើអ្វីជាគំរូរចនា? គំរូតំណាងឱ្យវិធីជាក់លាក់នៃការសាងសង់ កូដកម្មវិធីដើម្បីដោះស្រាយបញ្ហារចនាទូទៅ។ ក្នុងករណីនេះ វាត្រូវបានសន្មត់ថាមានសំណុំជាក់លាក់នៃបញ្ហាផ្លូវការទូទៅដែលកើតឡើងជាញឹកញាប់ ហើយគំរូផ្តល់នូវសំណុំនៃគោលការណ៍សម្រាប់ការដោះស្រាយបញ្ហាទាំងនេះ។

ទោះបីជាគំនិតនៃលំនាំជាវិធីនៃការពិពណ៌នាអំពីដំណោះស្រាយចំពោះបញ្ហាការរចនាទូទៅបានលេចឡើងជាយូរយារណាស់មកហើយក៏ដោយក៏ប្រជាប្រិយភាពរបស់ពួកគេបានចាប់ផ្តើមកើនឡើងយ៉ាងខ្លាំងដោយសារតែ ការងារដ៏ល្បីល្បាញអ្នកនិពន្ធចំនួនបួនរូបគឺ Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides ដែលត្រូវបានគេហៅថា "Design Patterns: Elements of Reusable Object-Oriented Software" (ជាភាសារុស្សីដែលគេស្គាល់ថា "Object-Oriented Design Techniques. Design Patterns") ហើយដែលត្រូវបានបោះពុម្ពនៅក្នុង ឆ្នាំ 1994 ។ ហើយក្រុមអ្នកនិពន្ធខ្លួនឯងជារឿយៗត្រូវបានគេហៅថា "Gang of Four" ឬ Gang of Four ឬ GoF សម្រាប់រយៈពេលខ្លី។ សៀវភៅនេះគឺជាការប៉ុនប៉ងទ្រង់ទ្រាយធំជាលើកដំបូងដើម្បីពិពណ៌នាអំពីវិធីសាស្រ្តទូទៅនៃការរចនាកម្មវិធី។ ហើយយូរ ៗ ទៅការប្រើប្រាស់លំនាំបានចាប់ផ្តើមត្រូវបានចាត់ទុកថាជាការអនុវត្តកម្មវិធីដ៏ល្អ។

តើការប្រើប្រាស់លំនាំផ្តល់ឱ្យយើងអ្វីខ្លះ? នៅពេលសរសេរកម្មវិធី យើងអាចកំណត់បញ្ហាជាផ្លូវការក្នុងទម្រង់នៃថ្នាក់ និងវត្ថុ និងទំនាក់ទំនងរវាងពួកវា។ ហើយអនុវត្តលំនាំដែលមានស្រាប់មួយដើម្បីដោះស្រាយវា។ ជាលទ្ធផល យើងមិនចាំបាច់បង្កើតអ្វីនោះទេ។ យើងមានគំរូដែលត្រៀមរួចជាស្រេច ហើយយើងគ្រាន់តែត្រូវអនុវត្តវានៅក្នុងកម្មវិធីជាក់លាក់មួយ។

លើសពីនេះទៅទៀត លំនាំ ជាក្បួនមិនអាស្រ័យលើភាសាសរសេរកម្មវិធីទេ។ គោលការណ៍នៃការអនុវត្តរបស់ពួកគេនឹងស្រដៀងគ្នានៅក្នុង C#, Jave និងភាសាផ្សេងទៀត។ ទោះបីជានៅក្នុងការណែនាំនេះ យើងនឹងនិយាយអំពីលំនាំនៅក្នុងបរិបទនៃភាសា C# ក៏ដោយ។

ការគិតតាមលំនាំក៏ធ្វើឱ្យវាកាន់តែងាយស្រួលក្នុងការបង្កើតកម្មវិធីជាក្រុម។ ការដឹងពីគំរូរចនាដែលបានប្រើ និងគោលការណ៍ជាមូលដ្ឋានរបស់វានឹងធ្វើឱ្យវាកាន់តែងាយស្រួលសម្រាប់អ្នកសរសេរកម្មវិធីផ្សេងទៀតក្នុងការយល់ និងប្រើប្រាស់ការអនុវត្តរបស់វា។

ក្នុងពេលជាមួយគ្នានេះអ្នកមិនគួរប្រើលំនាំសម្រាប់ជាប្រយោជន៍នៃគំរូខ្លួនឯង។ កម្មវិធីល្អ។ពាក់ព័ន្ធនឹងការប្រើប្រាស់លំនាំ។ ទោះជាយ៉ាងណាក៏ដោយ លំនាំមិនតែងតែធ្វើឱ្យកម្មវិធីងាយស្រួល និងប្រសើរឡើងនោះទេ។ ការប្រើប្រាស់មិនសមហេតុផលរបស់ពួកគេអាចនាំឱ្យមានភាពស្មុគស្មាញនៃកូដកម្មវិធី និងការថយចុះគុណភាពរបស់វា។ លំនាំត្រូវតែត្រឹមត្រូវនិង តាមរបៀបដ៏មានប្រសិទ្ធភាពការដោះស្រាយបញ្ហា។

មានលំនាំផ្សេងៗគ្នាជាច្រើនដែលដោះស្រាយ បញ្ហាផ្សេងគ្នានិងអនុវត្ត កិច្ចការផ្សេងៗ. ប៉ុន្តែយោងទៅតាមសកម្មភាពរបស់ពួកគេពួកគេអាចបញ្ចូលគ្នាជាក្រុមមួយចំនួន។ សូមក្រឡេកមើលក្រុមមួយចំនួននៃគំរូ។ ការចាត់ថ្នាក់នៃគំរូមូលដ្ឋានគឺផ្អែកលើគោលបំណង ឬភារកិច្ចដែលលំនាំជាក់លាក់មួយអនុវត្ត។

លំនាំបង្កើត

លំនាំបង្កើត គឺជាគំរូដែលអរូបីដំណើរការនៃការបង្កើតភ្លាមៗ ឬនិយាយម្យ៉ាងទៀត ដំណើរការនៃការបង្កើតថ្នាក់ និងវត្ថុ។ ក្នុងចំនោមពួកគេដូចខាងក្រោមៈ

    អ្នកសាងសង់

    គំរូដើម

    លីវតុន

ក្រុមមួយទៀតនៃគំរូ - លំនាំរចនាសម្ព័ន្ធ- ពិនិត្យមើលពីរបៀបដែលថ្នាក់ និងវត្ថុបង្កើតរចនាសម្ព័ន្ធធំជាង - ថ្នាក់ និងវត្ថុដែលស្មុគស្មាញជាងនៅក្នុងធម្មជាតិ។ គំរូទាំងនេះរួមមាន:

    អាដាប់ទ័រ

    ស្ពាន

    សមាសធាតុ

    អ្នកតុបតែង

    ផ្នែកខាងមុខ

    ទម្ងន់ហោះហើរ

    អនុប្រធាន (ប្រូកស៊ី)

ក្រុមទីបីនៃគំរូត្រូវបានគេហៅថាអាកប្បកិរិយា - ពួកគេកំណត់ក្បួនដោះស្រាយនិងអន្តរកម្មរវាងថ្នាក់និងវត្ថុ ពោលគឺអាកប្បកិរិយារបស់ពួកគេ។ ក្នុងចំណោមគំរូបែបនេះមានដូចខាងក្រោម៖

    បញ្ជា

    អ្នកបកប្រែ

    Iterator

    អ្នកសម្របសម្រួល

    អាណាព្យាបាល (អនុស្សាវរីយ៍)

    អ្នកសង្កេតការណ៍

    រដ្ឋ

    យុទ្ធសាស្ត្រ

    វិធីសាស្រ្តគំរូ

    អ្នកទស្សនា

មានការចាត់ថ្នាក់ផ្សេងទៀតនៃលំនាំអាស្រ័យលើថាតើលំនាំជាកម្មសិទ្ធិរបស់ថ្នាក់ឬវត្ថុ។

គំរូថ្នាក់ពិពណ៌នាអំពីទំនាក់ទំនងរវាងថ្នាក់តាមរយៈមរតក។ ទំនាក់ទំនងរវាងថ្នាក់ត្រូវបានកំណត់នៅពេលចងក្រង។ គំរូទាំងនេះរួមមាន:

    វិធីសាស្រ្តរោងចក្រ

    អ្នកបកប្រែ

    វិធីសាស្រ្តគំរូ

    អាដាប់ទ័រ

ផ្នែកមួយទៀតនៃគំរូ - គំរូវត្ថុពិពណ៌នាអំពីទំនាក់ទំនងរវាងវត្ថុ។ ទំនាក់ទំនងទាំងនេះកើតឡើងនៅពេលដំណើរការ ហើយដូច្នេះមានភាពបត់បែនជាងមុន។ គំរូវត្ថុរួមមានដូចខាងក្រោមៈ

    រោងចក្រអរូបី

    អ្នកសាងសង់

    គំរូដើម

    លីវតុន

    ស្ពាន

    សមាសធាតុ

    អ្នកតុបតែង

    ផ្នែកខាងមុខ

    ទម្ងន់ហោះហើរ

    អនុប្រធាន (ប្រូកស៊ី)

    ខ្សែសង្វាក់នៃការទទួលខុសត្រូវ

    បញ្ជា

    Iterator

    អ្នកសម្របសម្រួល

    អាណាព្យាបាល (អនុស្សាវរីយ៍)

    អ្នកសង្កេតការណ៍

    រដ្ឋ

    យុទ្ធសាស្ត្រ

    អ្នកទស្សនា

ហើយទាំងនេះគ្រាន់តែជាគំរូសំខាន់ៗមួយចំនួនប៉ុណ្ណោះ។ ជាទូទៅ​មាន​គំរូ​រចនា​ផ្សេងៗ​ជា​ច្រើន​ទៀត។ ពួកវាខ្លះទើបតែចាប់ផ្តើមប្រើ ខ្លះទៀតកំពុងពេញនិយម ហើយខ្លះទៀតមិនសូវមានពីមុនមក។

ហើយនៅក្នុង សៀវភៅណែនាំនេះ។យើងនឹងពិនិត្យមើលគំរូ និងគោលការណ៍ជាមូលដ្ឋាន និងសាមញ្ញបំផុតនៃការប្រើប្រាស់របស់ពួកគេទាក់ទងនឹងភាសា C# ។

តើធ្វើដូចម្តេចដើម្បីជ្រើសរើសគំរូត្រឹមត្រូវ?

ជាដំបូងនៅពេលដោះស្រាយបញ្ហា អ្នកត្រូវកំណត់អត្តសញ្ញាណអង្គភាពទាំងអស់ដែលបានប្រើ និងទំនាក់ទំនងរវាងពួកវា និងអរូបីពួកវាចេញពីស្ថានភាពជាក់លាក់។ បន្ទាប់មកអ្នកត្រូវមើលថាតើទម្រង់អរូបីនៃការដោះស្រាយបញ្ហាសមនឹងលំនាំជាក់លាក់ដែរឬទេ។ ជាឧទាហរណ៍ ខ្លឹមសារនៃបញ្ហាដែលកំពុងត្រូវបានដោះស្រាយអាចជាការបង្កើតវត្ថុថ្មី។ ក្នុងករណីនេះ វាអាចមានតម្លៃក្នុងការមើលគំរូទូទៅ។ ជាងនេះទៅទៀត វាជាការប្រសើរជាងមិនត្រូវយកគំរូជាក់លាក់មួយភ្លាមៗទេ - គំរូដំបូងដែលហាក់ដូចជាចាំបាច់ ប៉ុន្តែត្រូវមើលគំរូពាក់ព័ន្ធជាច្រើនពីក្រុមដូចគ្នាដែលដោះស្រាយបញ្ហាដូចគ្នា។

ក្នុងពេលជាមួយគ្នានេះ វាជាការសំខាន់ក្នុងការយល់ដឹងអំពីអត្ថន័យ និងគោលបំណងនៃគំរូ ដើម្បីបង្ហាញយ៉ាងច្បាស់អំពីអង្គការអរូបី និងការអនុវត្តជាក់ស្តែងដែលអាចធ្វើទៅបាន។ គំរូមួយអាចមានការអនុវត្តខុសៗគ្នា ហើយនៅពេលដែលអ្នកជួបប្រទះការអនុវត្តទាំងនេះកាន់តែច្រើន អ្នកនឹងយល់កាន់តែច្បាស់អំពីអត្ថន័យនៃគំរូ។ ប៉ុន្តែ​អ្នក​មិន​គួរ​ប្រើ​លំនាំ​ទេ​ប្រសិន​បើ​អ្នក​មិន​យល់​វា​ទេ ទោះបី​ជា​មើល​ដំបូង​វា​ជួយ​អ្នក​ដោះស្រាយ​បញ្ហា​បាន​។

ហើយនៅទីបំផុត យើងត្រូវប្រកាន់ខ្ជាប់នូវគោលការណ៍ KISS (រក្សាវាសាមញ្ញ ឆោតល្ងង់) - រក្សាកូដកម្មវិធីឱ្យសាមញ្ញ និងច្បាស់លាស់តាមដែលអាចធ្វើទៅបាន។ យ៉ាងណាមិញ ចំនុចនៃលំនាំគឺមិនមែនដើម្បីធ្វើឱ្យកូដកម្មវិធីស្មុគស្មាញនោះទេ ប៉ុន្តែផ្ទុយទៅវិញគឺដើម្បីធ្វើឱ្យវាសាមញ្ញ។

នៅស្នូលរបស់ពួកគេលំនាំគឺ គំរូធម្មតា។ការរចនា។ ខ្ចីពីស្ថាបត្យករសាមញ្ញ (អ្នកដែលទាក់ទងនឹងអគារ) ។ ចំណុចគឺសាមញ្ញ។ នៅក្នុងការងាររបស់ស្ថាបត្យករមានភារកិច្ចដែលអាចដោះស្រាយបានយ៉ាងងាយស្រួលតាមវិធីមួយឬច្រើន។

ដោយភាពស្រដៀងគ្នា ការរចនាកម្មវិធីមានបញ្ហាស្ថាបត្យកម្មផ្ទាល់ខ្លួនរបស់វា ដូចជាការបែងចែកកម្មវិធីទៅជាសមាសធាតុ/ម៉ូឌុល ការរៀបចំភាពអាស្រ័យរវាងពួកវា ការចែកចាយមុខងារមុខងារជាដើម។ ដូចដែលអ្នកនិពន្ធសៀវភៅពីក្រុមក្មេងទំនើងទាំងបួននេះ ("ក្រុមនៃបួន") បានកត់សម្គាល់យ៉ាងឆ្លាតវៃ នៅក្នុងឧស្សាហកម្មរបស់យើង វាក៏អាចកំណត់អត្តសញ្ញាណគំរូស្តង់ដារមួយចំនួនបានសាកល្បងក្នុងការអនុវត្ត ដើម្បីកុំឱ្យឈានជើងលើតុងរួច។ ដែលអ្នកផ្សេងទៀតបានឆ្លងកាត់រួចហើយ។

ខ្លឹមសារនៃគំរូការយល់ដឹងគឺត្រូវយល់ពីស្ថានភាពណាដែលវាត្រឹមត្រូវក្នុងការប្រើគំរូរចនាជាក់លាក់មួយ ហើយអនុវត្តវាឱ្យបានត្រឹមត្រូវ។ វាជាការសំខាន់ក្នុងការយល់ថារូបមន្ត "លំនាំកាន់តែច្រើនដែលខ្ញុំអាចដាក់ក្នុងកម្មវិធីរបស់ខ្ញុំ កាន់តែប្រសើរ" គឺមិនត្រឹមត្រូវ។ ពួកគេគួរតែត្រូវបានប្រើដោយឈ្លាសវៃ ហើយមានតែកន្លែងដែលពួកគេត្រូវការពិតប្រាកដ។ លើសពីនេះ លំនាំលែងប្រើហើយប្រែទៅជាគំរូប្រឆាំងនៅពេលដែលបច្ចេកវិទ្យារីកចម្រើន (ដែលក្នុងវិស័យរបស់យើងធ្វើបែបនេះលឿនជាង)។ ហើយជាការពិតណាស់ មានគំរូដែលទទួលយកជាទូទៅ ហើយមានគំរូដែលត្រូវបានប្រើដោយជោគជ័យក្នុងរង្វង់តូចចង្អៀត។
នៅទីនេះផងដែរ អ្នកត្រូវយល់ថានេះមិនមែនជាប្រភេទនៃ dogma មួយចំនួន - ដូចជា 10 គំរូរចនាដ៏ពិសិដ្ឋ :)

ដើម្បីយល់ពីកន្លែងដែលពួកគេត្រូវការ អ្នកត្រូវការបទពិសោធន៍។ នោះគឺ (ខ្ញុំជឿជាក់ដោយផ្ទាល់) ថាមានតែមនុស្សមួយចំនួនតូចប៉ុណ្ណោះដែលអាចរៀនពីកំហុសរបស់អ្នកដទៃបាន។ អ្នកផ្សេងទៀតត្រូវដោះស្រាយដោយខ្លួនឯង :)

ខ្ញុំនឹងផ្តល់គន្លឹះខាងក្រោមសម្រាប់សិក្សាលំនាំ៖

១) អាន​សៀវភៅ​ពីរ​បី​ក្បាល​ដើម្បី​យល់​ថា​ប្រភេទ​នេះ​ជា​សត្វ​អ្វី និង​វា​ស៊ី​ជាមួយ​អ្វី។ អ្នកអាចយកបំរែបំរួលមួយនៃសៀវភៅ GoF ឬនិស្សន្ទវត្ថុមួយចំនួនសម្រាប់ជង់អភិវឌ្ឍន៍របស់អ្នក - ស្គាល់គំរូពេញនិយមសំខាន់ៗ។ ភ្លាមៗ​បន្ទាប់​ពី​នេះ ខ្ញុំ​នឹង​ណែនាំ​ឲ្យ​អាន​សៀវភៅ “The Bitter Taste of Java” (Bruce Tate) – វា​និយាយ​អំពី​ការ​ប្រឆាំង​នឹង​គំរូ។ នេះគឺដើម្បីយល់ ផ្នែកខាងបញ្ច្រាសការប្រើប្រាស់របស់ពួកគេ។ ខ្ញុំចូលចិត្តវា ហើយខ្ញុំគិតថាវាបានសង្រ្គោះខ្ញុំពីបញ្ហាជាច្រើន។ អ្វីដែលនៅក្នុងឧទាហរណ៍នៃ Java គឺមិនសំខាន់។ វាគឺអំពីអំពី​គំរូ ដូច្នេះ​វា​នឹង​ងាយ​ស្រួល​សម្រាប់​អ្នក​តំណាង​នៃ​ជង់​ផ្សេង​ទៀត (ដែល​រួម​មាន​ខ្ញុំ) ក្នុង​ការ​យល់​យ៉ាង​ណា​ក៏​ដោយ។

២) ព្យាយាម​ដឹង​ថា​តើ​អ្នក​ធ្លាប់​ជួប​ប្រទះ​នឹង​អ្វី​មួយ​ក្នុង​ការងារ​របស់​អ្នក​ឬ​ក៏​អាច​ក្លាយ​ជា​គំរូ​មួយ​យ៉ាង​ងាយ​ស្រួល។ កន្លែងណាដែលអាចអនុវត្តគោលគំនិតបានត្រឹមត្រូវ និងកន្លែងណាដែលមានបញ្ហាដោយសារបញ្ហានេះ។

3) នៅក្នុងគម្រោងថ្មី រក្សាចំណេះដឹងដែលទទួលបានពីគំរូនៅក្នុងក្បាលរបស់អ្នក - វានឹងមានប្រយោជន៍ភ្លាមៗ។

នៅទីបំផុត មិនថាអ្នកស្គាល់លំនាំ ឬអត់ទេ បទពិសោធន៍នឹងមកជាមួយការយល់ដឹងអំពីស្ថាបត្យកម្មមួយណាដែលត្រឹមត្រូវ និងមួយណានឹងមិន។ តើធ្វើដូចម្តេចដើម្បីធ្វើឱ្យវាងាយស្រួលនិងរបៀបមិន។ ហើយវាមិនមានបញ្ហាអ្វីទេដែលអ្នកហៅវាថាគំរូ។

ខ្ញុំថែមទាំងផ្តល់ដំបូន្មានឱ្យខិតទៅជិតការអភិវឌ្ឍន៍នៃប្រាជ្ញាស្ថាបត្យកម្ម IT ពីផ្នែកម្ខាងទៀត - ពីផ្នែកម្ខាងនៃតម្រូវការដែលមិនដំណើរការឬគេហៅថា "-ilities" - មានពួកគេជាច្រើន។ នេះគឺជា 7 បំណែកដែលបានពិពណ៌នា។ ជាទូទៅមានពួកគេរាប់សិបនាក់។

ក្នុងចំណោមអ្នកផ្សេងទៀត - ដូចជាការថែរក្សា ( ការគាំទ្រសាមញ្ញកូដ) មាត្រដ្ឋាន លទ្ធភាពពង្រីក ភាពអាចរកបាន។ល។ ប្រសិនបើនៅពេលរចនាកម្មវិធីរបស់អ្នក អ្នកគិតអំពី "ភាពល្ងង់ខ្លៅ" ទាំងនេះ ហើយព្យាយាមផ្តល់ឱ្យពួកគេក្នុងកម្រិតចាំបាច់សម្រាប់គម្រោងនោះ តាមក្បួនកម្មវិធីរបស់អ្នកនឹងមានស្ថាបត្យកម្មដ៏ល្អ។ ក្នុងពេលជាមួយគ្នានេះ គំរូនៃការរចនានឹងបង្ហាញនៅក្នុងវាដោយសង្ខេបដោយខ្លួនឯង។

ដោយសារគំនិតនៃការប្រើប្រាស់គំរូគឺជាការប៉ុនប៉ងមួយដោយវិស្វករកម្មវិធីដែលមានបទពិសោធន៍ដើម្បីផ្តល់រូបមន្តដែលត្រៀមរួចជាស្រេចសម្រាប់អ្នកដែលមិនសូវមានបទពិសោធន៍ ដូច្នេះរហូតទាល់តែពួកគេរៀនពីរបៀបចំអិន “បបរឆ្ងាញ់” ពួកគេមិនចំអិនអ្វីដែលមិនអាចបរិភោគបានទាំងស្រុងនោះទេ។ :) រៀន "ធ្វើម្ហូប" យល់ -ilites :) ហើយអ្វីៗនឹងល្អ។

ស្ថាបត្យកម្ម

ការរចនាកម្មវិធីកុំព្យូទ័រ

រឿង

អត្ថប្រយោជន៍

អត្ថប្រយោជន៍សំខាន់នៃនីមួយៗ គំរូដាច់ដោយឡែកគឺថាវាពិពណ៌នាអំពីដំណោះស្រាយចំពោះបញ្ហាអរូបីទាំងមូល។ ដូចគ្នានេះផងដែរ ការពិតដែលថាលំនាំនីមួយៗមានឈ្មោះរបស់វាធ្វើឱ្យវាកាន់តែងាយស្រួលក្នុងការពិភាក្សាអំពីរចនាសម្ព័ន្ធទិន្នន័យអរូបី (ADTs) ក្នុងចំណោមអ្នកអភិវឌ្ឍន៍ ដោយសារពួកគេអាចយោងទៅលើគំរូដែលគេស្គាល់។ ដូច្នេះ ដោយសារគំរូ ពាក្យវាក្យស័ព្ទ ឈ្មោះម៉ូឌុល និងធាតុគម្រោងត្រូវបានបង្រួបបង្រួម។

គំរូរចនាដែលបានបង្កើតត្រឹមត្រូវអនុញ្ញាតឱ្យ នៅពេលដែលដំណោះស្រាយជោគជ័យត្រូវបានរកឃើញ ត្រូវប្រើម្តងហើយម្តងទៀត។

មិនដូច idioms ទេ លំនាំគឺឯករាជ្យនៃភាសាសរសេរកម្មវិធីដែលបានប្រើ។

ការរិះគន់

ពេលខ្លះគំរូរក្សានូវប្រព័ន្ធដ៏ស្មុគស្មាញ និងគ្មានប្រសិទ្ធភាពនៃគំនិតដែលត្រូវបានបង្កើតឡើងដោយក្រុមតូចចង្អៀត។ នៅពេលដែលចំនួននៃគំរូកើនឡើងលើសពីភាពស្មុគស្មាញដ៏សំខាន់ អ្នកសំដែងចាប់ផ្តើមមិនអើពើនឹងគំរូ និងប្រព័ន្ធទាំងមូលដែលពាក់ព័ន្ធជាមួយពួកគេ។

គំរូជាញឹកញាប់ជំនួសការខ្វះខាត ឬមិនគ្រប់គ្រាន់នៃឯកសារនៅក្នុងបរិយាកាសកម្មវិធីស្មុគស្មាញ។

មានមតិមួយថា ការអនុវត្តគំរូពិការភ្នែកពីសៀវភៅឯកសារយោង ដោយមិនយល់ពីហេតុផល និងតម្រូវការជាមុនសម្រាប់ការកំណត់អត្តសញ្ញាណគំរូនីមួយៗ ធ្វើឱ្យការលូតលាស់វិជ្ជាជីវៈរបស់អ្នកសរសេរកម្មវិធីយឺតយ៉ាវ ដោយសារវាជំនួសការងារច្នៃប្រឌិតជាមួយនឹងការជំនួសមេកានិកនៃគំរូ។ មនុស្សដែលប្រកាន់ខ្ជាប់នូវគំនិតនេះជឿថាអ្នកគួរតែស្គាល់បញ្ជីគំរូនៅពេលអ្នក "ធំឡើង" សម្រាប់ពួកគេប្រកបដោយវិជ្ជាជីវៈ - ហើយមិនមែនមុននេះទេ។ លក្ខណៈវិនិច្ឆ័យល្អ។កំរិតវិជ្ជាជីវៈដែលត្រូវការ - កំណត់អត្តសញ្ញាណគំរូដោយឯករាជ្យដោយផ្អែកលើ បទពិសោធន៍ផ្ទាល់ខ្លួន. ក្នុងពេលជាមួយគ្នានេះ ជាការពិត ការស្គាល់ពីទ្រឹស្ដីដែលភ្ជាប់ជាមួយនឹងលំនាំគឺមានប្រយោជន៍ក្នុងកម្រិតវិជ្ជាជីវៈណាមួយ និងដឹកនាំការអភិវឌ្ឍន៍អ្នកសរសេរកម្មវិធីក្នុងទិសដៅត្រឹមត្រូវ។ មានតែការប្រើប្រាស់គំរូ "យោងទៅតាមសៀវភៅយោង" ប៉ុណ្ណោះដែលអាចចោទសួរបាន។

គំរូអាចលើកកម្ពស់រចនាប័ទ្មអភិវឌ្ឍន៍កម្មវិធីមិនល្អ ហើយជារឿយៗត្រូវបានអនុវត្តដោយងងឹតងងុល។

ដើម្បីជម្នះភាពខ្វះខាតទាំងនេះ ការជួសជុលឡើងវិញត្រូវបានប្រើប្រាស់។

ប្រភេទមូលដ្ឋាននៃលំនាំរចនា

គំរូមូលដ្ឋាន (មូលដ្ឋានគ្រឹះ)

  • ចំណុចប្រទាក់សញ្ញាសម្គាល់
  • កុងតឺន័រអចលនទ្រព្យ

លំនាំរចនាជំនាន់

  • វិធីសាស្ត្ររោងចក្រ អ្នកបង្កើតនិម្មិត
  • វត្ថុទម្រង់បែបបទរងអនាមិក

គំរូរចនាសម្ព័ន្ធ

  • ប្រូកស៊ី/ជំនួស, ពពោះជំនួស
  • កុងតឺន័រ
  • ភាពអាចពង្រីកបាន។
  • បំពង់និងតម្រង
  • ទិន្នន័យថ្នាក់ឯកជន

លំនាំអាកប្បកិរិយា

លំនាំកម្មវិធីប៉ារ៉ាឡែល (ស្របគ្នា)

  • វត្ថុសកម្ម
  • និយាយលេង
  • ការព្យួរការពារ
  • ពាក់កណ្តាលសមកាលកម្ម/ពាក់កណ្តាលអសមកាល
  • អ្នកដឹកនាំ/អ្នកដើរតាម
  • ត្រួតពិនិត្យវត្ថុ
  • រ៉េអាក់ទ័រ
  • អានសរសេរចាក់សោ
  • អ្នករៀបចំកាលវិភាគ
  • អាងខ្សែស្រឡាយ
  • ការផ្ទុកជាក់លាក់នៃខ្សែស្រឡាយ
  • ការប្រតិបត្តិខ្សែតែមួយ

MVC

  • សហគ្រាស

    មិន​បាន​តម្រៀប

    • កុងតឺន័រអចលនទ្រព្យ
    • ប៉ុស្តិ៍ព្រឹត្តិការណ៍
    • ឃ្លាំង/កន្លែងផ្ទុក

    ប្រភេទផ្សេងទៀតនៃគំរូ

    ថ្ងៃនេះក៏មានគំរូមួយចំនួនទៀត៖

    • Carrier Rider Mapper ផ្តល់សិទ្ធិចូលប្រើព័ត៌មានដែលបានរក្សាទុក
    • គំរូវិភាគពិពណ៌នាអំពីវិធីសាស្រ្តជាមូលដ្ឋានសម្រាប់ការអភិវឌ្ឍន៍តម្រូវការកម្មវិធី (ការវិភាគតម្រូវការ) មុនពេលដំណើរការអភិវឌ្ឍន៍កម្មវិធីចាប់ផ្តើម
    • គំរូទំនាក់ទំនងពិពណ៌នាអំពីដំណើរការទំនាក់ទំនងរវាងអ្នកចូលរួមបុគ្គល/និយោជិតនៃអង្គការមួយ។
    • គំរូរបស់អង្គការ ពិពណ៌នាអំពីឋានានុក្រមនៃស្ថាប័ននៃសហគ្រាស/ក្រុមហ៊ុន
    • Anti-Design-Patterns ពិពណ៌នាអំពីអ្វីដែលមិនគួរធ្វើនៅពេលបង្កើតកម្មវិធី ដោយបង្ហាញពីកំហុសលក្ខណៈក្នុងការរចនា និងការអនុវត្ត។

    សូមមើលផងដែរ។

    • ការសរសេរកម្មវិធីទូទៅ
    • តំណភ្ជាប់

      • Olga Dubinaការពិនិត្យឡើងវិញនូវគំរូរចនា។ - ការពិនិត្យឡើងវិញនៃ monographs សំខាន់ៗជាច្រើនលើគំរូរចនា ប្រព័ន្ធព័ត៌មាន. បានយកមកវិញនៅថ្ងៃទី ៥ ខែកញ្ញា ឆ្នាំ ២០០៦។
      • Portland Pattern Repository - បញ្ជីនៃគំរូរចនានៅលើម៉ាស៊ីនវីគី
      • សៀវភៅរបស់ mgrand - គេហទំព័រដែលមានការពិពណ៌នាអំពីគំរូរចនាមួយចំនួនធំ
      • គំរូលាលែងពីតំណែង - ការរំលោភលើការរចនាមិនស្របនឹងគម្រោង (គំរូនៃគំរូ)
      • វប្បធម៌នៃការដឹកជញ្ជូនរបស់ Eclipse (ភាសាអង់គ្លេស) Erich Gamma

      អក្សរសិល្ប៍

      • E. Gamma, R. Helm, R. Johnson, J. Vlissidesបច្ចេកទេសរចនាតម្រង់ទិសវត្ថុ។ លំនាំរចនា = លំនាំរចនា៖ ធាតុនៃកម្មវិធីតម្រង់ទិសវត្ថុដែលអាចប្រើឡើងវិញបាន។ - សាំងពេទឺប៊ឺគៈ “ពេត្រុស” ឆ្នាំ ២០០៧។ - ទំព័រ ៣៦៦ - ISBN 978-5-469-01136-1 (ក៏ ISBN 5-272-00355-1)
      • លោក Craig Larman ការអនុវត្ត UML 2.0 and design patterns = ការអនុវត្ត UML និង Patterns៖ ការណែនាំអំពីការវិភាគ និងការរចនា និងការអភិវឌ្ឍន៍ម្តងម្កាល។ - M.: “Williams”, 2006. - P. 736. - ISBN 0-13-148906-2
      • Martin Fowlerស្ថាបត្យកម្មសហគ្រាស កម្មវិធីកម្មវិធី= លំនាំនៃស្ថាបត្យកម្មកម្មវិធីសហគ្រាស (ស៊េរីហត្ថលេខា Addison-Wesley) ។ - M.: "Williams", 2007. - P. 544. - ISBN 0-321-12742-0.
      • Joshua Kerievskyការកែលម្អគំរូ (ស៊េរីហត្ថលេខា Addison-Wesley) ។ - M.: "Williams", 2006. - P. 400. - ISBN 0-321-21335-1
      • Scott W. Ambler, Pramodkumar J. Sadalajការកែលម្អមូលដ្ឋានទិន្នន័យ៖ ការរចនាមូលដ្ឋានទិន្នន័យវិវត្តន៍ (ស៊េរីហត្ថលេខា Addison-Wesley) ។ - M.: “Williams”, 2007. - P. 368. - ISBN 0-321-29353-3

      មូលនិធិវិគីមេឌា។

  • ឆ្នាំ ២០១០។
  • Patterson, James

Patterson, Percival