មុនពេលចាប់ផ្តើមអត្ថបទ ខ្ញុំចង់ផ្តល់របាយការណ៍មួយដោយមិត្តរបស់ខ្ញុំឈ្មោះ 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 ដែលមានប៊ូតុងគ្រប់ប្រភេទ។ វិធីនេះយើងអាចបញ្ជាក់ប្រភេទប៊ូតុងដែលយើងចង់បាន ហើយប្រើលេខកូដឡើងវិញ។
គំរូអ្នកតុបតែង
អ្នកតុបតែងគឺជាគំរូរចនាសម្ព័ន្ធដែលអនុញ្ញាតឱ្យអ្នកបន្ថែមឥរិយាបទថ្មីទៅវត្ថុកំឡុងពេលប្រតិបត្តិកម្មវិធី អាស្រ័យលើស្ថានភាព។
គោលដៅគឺដើម្បីពង្រីកឥរិយាបថនៃវត្ថុជាក់លាក់មួយដោយមិនចាំបាច់ផ្លាស់ប្តូរឥរិយាបថនៃថ្នាក់មូលដ្ឋាន។ នេះនឹងអនុញ្ញាតឱ្យអ្នកប្រើគ្រឿងតុបតែងជាច្រើនក្នុងពេលតែមួយ។ គំរូនេះគឺជាជម្រើសមួយសម្រាប់មរតក។ មិនដូចមរតកទេ អ្នកតុបតែងបន្ថែមអាកប្បកិរិយាកំឡុងពេលដំណើរការកម្មវិធី។
ដើម្បីអនុវត្តការតុបតែងយើងត្រូវការ:
- ទទួលមរតកថ្នាក់តុបតែងពីថ្នាក់មូលដ្ឋាន។
- បន្ថែមវាលមួយដែលមានតំណទៅ ថ្នាក់មូលដ្ឋាននៅក្នុងអ្នកតុបតែង។
- បញ្ជូនឯកសារយោងទៅវត្ថុដែលត្រូវតុបតែងទៅអ្នកសាងសង់អ្នកតុបតែង។
- ប្តូរទិសវិធីសាស្រ្តពីអ្នកតុបតែងទៅវត្ថុដែលកំពុងតុបតែង។
- បដិសេធវិធីសាស្រ្តក្នុងការតុបតែងដែលអ្នកចង់ផ្លាស់ប្តូរអាកប្បកិរិយារបស់អ្នក។
តើត្រូវប្រើវាដោយរបៀបណា?
ឧបមាថាយើងមានវត្ថុមួយដែលត្រូវមានឥរិយាបទជាក់លាក់ក្នុងស្ថានភាពជាក់លាក់មួយ។ ឧទាហរណ៍ យើងមានតំណ 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
សូមមើលអ្វីដែល "លំនាំរចនា" មាននៅក្នុងវចនានុក្រមផ្សេងទៀត៖លំនាំរចនា
- ពាក្យនេះមានអត្ថន័យផ្សេងទៀត សូមមើលលំនាំ។ នៅក្នុងការអភិវឌ្ឍន៍កម្មវិធី គំរូនៃការរចនាគឺជាការរចនាស្ថាបត្យកម្មដែលអាចធ្វើឡើងវិញបាន ដែលតំណាងឱ្យដំណោះស្រាយចំពោះបញ្ហាមួយ...... ... Wikipediaលំនាំរចនា - (លំនាំ, គំរូរចនាភាសាអង់គ្លេស) គឺជារចនាសម្ព័ន្ធស្ថាបត្យកម្មដែលអាចប្រើឡើងវិញបានដែលផ្តល់នូវដំណោះស្រាយបញ្ហាទូទៅ
រចនានៅក្នុងបរិបទជាក់លាក់មួយ និងពិពណ៌នាអំពីសារៈសំខាន់នៃការសម្រេចចិត្តនេះ។ លំនាំមិនពេញលេញទេ ... ... វិគីភីឌាលំនាំរចនា GRASP - GRASP (លំនាំកម្មវិធីការចាត់តាំងការទទួលខុសត្រូវទូទៅ) - លំនាំដែលប្រើក្នុងការរចនាតម្រង់ទិសវត្ថុដើម្បីដោះស្រាយកិច្ចការទូទៅ