การ เข้าใจ หลัก การ ของ กามเทพ
หลักการ SOLID คือ ห้าแนวทางการออกแบบแบบวัตถุที่ประกอบกัน ซึ่งช่วยนักพัฒนาสร้างระบบที่ง่ายต่อการรักษา ขยาย และทดสอบได้ พวกเขาได้รับการแนะนําโดย โรเบิร์ต ซี. มาร์ติน ในช่วงต้นปี 2000 และตั้งแต่นั้นได้กลายเป็นรากฐานของสถาปัตยกรรมซอฟต์แวร์สมัยใหม่ หลักเกณฑ์แต่ละข้อจะระบุลักษณะเฉพาะของการออกแบบซอฟต์แวร์:
- [FLT: 0] หลักการความรับผิดชอบแบบ Single (SRP): คลาสควรมีเหตุผลเพียงข้อเดียวในการเปลี่ยนแปลง หมายความว่ามันควรจะรับผิดชอบในการใช้งานเดียว
- [FLT: 0] เปิด/Cloped หลักการ (OCP): [FLT: 1) ชั้นควรเปิดสําหรับส่วนขยาย แต่ปิดสําหรับการแก้ไข คุณสามารถเพิ่มพฤติกรรมใหม่ ๆ โดยไม่เปลี่ยนแปลงรหัสที่มีอยู่
- [FLT: 0]. ลิสคอฟ หลักการการย่อย (LPS): [FLT: 1) ประเภทย่อยต้องสามารถแทนได้สําหรับชนิดพื้นฐาน โดยไม่ต้องทําลายระบบ
- [FLT: 0]. หลักการการจําแนกประเภท (ISP):[FLT: 1) โปรแกรมลูกข่ายไม่ควรถูกบังคับให้พึ่งพาอินเทอร์เฟซที่ไม่ได้ใช้; ดีกว่าที่จะมี ส่วนเชื่อมต่อขนาดเล็กที่ระบุได้มากกว่า 1 ที่ใหญ่, ส่วนเชื่อมต่อทั่วไป
- [FLT: 0] การแปรผันหลักการ (DIP): มอดูลระดับสูงไม่ควรขึ้นอยู่กับโมดูลระดับต่ํา; ทั้งคู่ควรขึ้นอยู่กับนามธรรม ทฤษฏีย่อยต่าง ๆ ไม่ต้องใช้รายละเอียดหรือรายละเอียด
บทบาท ของ อุ มแอล ใน การ ถ่าย ภาพ ซอฟต์แวร์
UML) เป็นสัญลักษณ์มาตรฐานสําหรับการออกแบบระบบแบบกราฟิก แผนภูมิทําหน้าที่เป็นภาษาที่ใช้ร่วมกันในหมู่นักพัฒนา สถาปนิก และผู้ถือหมุด ทําให้การสื่อสารโครงสร้างที่ซับซ้อนง่ายขึ้น เมื่อนําไปใช้กับสถาปัตยกรรมแบบ Solid- Complital แบบ OML จะแสดงให้เห็นว่าการออกแบบนี้ทนกับหลักการและพื้นที่เน้นที่อาจจําเป็นต้องสร้างใหม่ได้ดีแค่ไหน
UML มีประเภทแผนภาพ 14 ประเภท แต่ภาพที่เกี่ยวข้องกับ SOLID มากที่สุดก็คือ แผนภาพชั้น, แผนภูมิองค์ประกอบ, แผนภูมิลําดับ และแผนภาพแพกเกจ แต่ละตัวสามารถเน้นด้านต่าง ๆ ของหลักการ เช่น แผนภาพชั้นแสดงความรับผิดชอบ และส่วนเชื่อมต่อระหว่างกลุ่ม ในขณะที่แผนภาพองค์ประกอบเน้นการเชื่อมโยง
การ สุ่ม แผน ภาพ
หลัก การ และ แผนภูมิ ชั้น เรียน ที่ มี ความ รับ ผิด ชอบ เพียง อย่าง เดียว
แผนภาพคลาสนั้นเหมาะสมที่สุดสําหรับการตรวจสอบความชื่นชอบของ SRP การจัดทําผังชั้นที่ออกแบบมาอย่างดี จะแสดงแต่ละคลาสด้วยชุดคุณสมบัติและวิธีการที่ชัดเจน ถ้าชนชั้นมีความรับผิดชอบหลายอย่าง กล่องของห้องจะมีรายการที่ยังไม่ได้ระบุ ซึ่งไม่มีเนื้อหาของการทํางานใดๆ เช่น ธงสีแดงสําหรับการละเมิด SRP
ตัวอย่างเช่น คลาสที่ชื่อ 'inPailManager' ที่จัดการทั้งในการส่งและส่งอีเมลผ่าน SSRP แผนภาพคลาสจะแสดงวิธีการเช่น 'calcultal ()' และ 'sendemail ()' ในกล่องเดียวกัน ส่งสัญญาณให้แยกคลาสนี้ออกเป็น 'incogsoculator' และ 'emailererererererer' การทําขอบเขตความรับผิดชอบ ช่วยจับการฝ่าฝืนได้เร็วขึ้น
อัลกอริธึมแบบ Open/ Clossed dictionary
แผนภาพส่วนประกอบแสดงถึงโครงสร้างระดับสูงของระบบ แสดงวิธีคอมโพเนนท์ (เช่น โมดูล, periods) เชื่อมต่อผ่านส่วนติดต่อ เพื่อให้ยึดอยู่กับ OCP ส่วนประกอบต่าง ๆ ควรเปิดส่วนเชื่อมต่อที่คงที่ ในขณะที่อนุญาตให้มีการทํางานใหม่ๆ โดยไม่แก้ไขส่วนที่มีอยู่แล้ว
ในแผนภาพขององค์ประกอบ คุณสามารถแสดงนี่ได้ โดยใช้ส่วนติดต่อที่จัดให้และจําเป็น ตัวอย่างเช่น ส่วนประกอบ '% precessesor' อาจกําหนดส่วนติดต่อของ assetesor ของกลุ่มผู้ใช้ใหม่ (โดยส่วนตัวคือ pril, paypal) จะถูกเพิ่มเป็นส่วนประกอบแยกต่างหากที่ทําหน้าที่ส่วนติดต่อนั้น แผนภาพนี้จะทําให้ชัดเจนว่า โพรเซสหลักไม่จําเป็นต้องเปลี่ยน — มันขึ้นอยู่เฉพาะกับความนามธรรมเท่านั้น
หลักการการแบ่งมรดกและมรดกของ ลิซคอฟ
แผนภาพคลาสที่มีความสัมพันธ์กับมรดกโดยตรง ISP หากวิธีการย่อยแทนฐานในวิธีการละเมิดพฤติกรรมที่คาดหวัง โครงสร้างลําดับชั้นจะเป็นที่สงสัย UML ช่วยให้คุณสามารถจําลองสภาวะก่อนเงื่อนไข, การติดตั้ง, และ ความแปรปรวนในการใช้งานเงื่อนไขการใช้เงื่อนไข (เช่น ในบันทึกหรือ OCL — constrent language)
การฝ่าฝืน LPS แบบดั้งเดิม คือ 'square' in the quare from queriage' ในแผนภาพนี้ ถ้า 'square' เปลี่ยน 'setword' เพื่อตั้ง 'hight' ด้วย มันจะทําลายสัญญาของ urecten' แผนภาพนี้จะแสดงให้เห็นว่า 'square' ไม่ประสบความสําเร็จจริง ๆ เพื่อแก้ไขนี้ คุณอาจจะใช้ส่วนติดต่อแบบทั่วไปกับ 'Shape' กับ 'help' และ 'square' — แผนภาพนี้จะไม่แสดงถึงมรดกโดยตรงระหว่างกลุ่ม
แผนภูมิการแยกส่วนและส่วนติดต่อผู้ใช้
UML สามารถจําลองส่วนติดต่อผู้ใช้โดยตรงโดยใช้กล่องส่วนติดต่อผู้ใช้ (ร่วมกับ '[FLT: 0]]' ได้โดยมีเครื่องหมาย 'มาตรฐาน' เพื่อบังคับใช้ ISP คุณสามารถสร้างส่วนติดต่อขนาดเล็กหลายอันแทนอินเทอร์เฟสขนาดใหญ่หนึ่ง ตัว แผนภาพนี้เปิดเผยว่าคลาสไหนขึ้นอยู่กับส่วนเชื่อมต่อใด และหากมีวิธีการในส่วนเชื่อมต่อที่ไม่จํากัด ก็เป็นการฝ่าฝืน
ตัวอย่างเช่น แทนที่อินเทอร์รัพต์ของ AugustIFOffice=- Profile= [( print); ascan (), asfix ()(') คุณแยกเป็น 'prequeable', as scanable', และ 'faccessable'. แผนภาพคลาสแสดงให้เห็นว่า buildsiger' จะใช้เฉพาะกับ 'obscriper' ในส่วนของ '%sed' ส่วน '% Advanizeded' previewer' จะใช้ร่วมกับโปรแกรมผู้จําหน่ายทั้งหมด 3 วิธีนี้จะทําให้ส่วนเชื่อมต่อที่ใช้ได้ไม่ยืดหยุ่นและไม่สามารถป้องกันได้ เนื่องจากไม่มีการเชื่อมต่อนี้ขึ้นอยู่กับการไม่เกี่ยวข้อง
การ กลับ หัว กลับ หัว ของ หลัก การ และ แผนภูมิ ความ ขึ้น กับ ความ เป็น อยู่
ทั้งแผนภาพคลาสและแผนภาพแพกเกจ สามารถแสดงถึงการปฏิบัติตาม DIP ได้ DIP ระบุว่า มอดูลระดับสูง (เช่น ตรรกะของธุรกิจ) ไม่ควรขึ้นอยู่กับโมดูลระดับต่ํา (เช่น ไดรเวอร์ฐานข้อมูล) แต่ทั้งคู่ควรขึ้นอยู่กับนามธรรม (infaces หรือ perient)
ในแผนภาพการเชื่อมโยงแพกเกจ คุณสามารถแสดงทิศทางของการขึ้นต่อกันได้ หากแพกเกจที่มีระดับสูงชี้โดยตรงไปยังแพกเกจระดับต่ํา แผนภาพนี้จะใช้แจ้งเตือนการละเมิด DIP ทางแก้ปัญหาคือ นําเสนอความซับซ้อน (interface) ในแพกเกจระดับสูง ที่มีแพกเกจระดับต่ํา ขึ้นอยู่กับส่วนเชื่อมต่อนั้น แผนภาพอัปเดตนี้แสดงให้เห็นการทับซ้อนกันของข้อมูล ซึ่งเป็นสัญญาณอย่างชัดเจนว่ามีการปรับความยืดหยุ่นของ mperidentance
การ ฝึก อบรม ที่ ดี ที่ สุด ใน การ สร้าง แผนภูมิ UML สําหรับ สถาปัตยกรรม ไซมันด์
ทําตามคําแนะนําเหล่านี้เพื่อให้สร้างแผนภาพ UML ที่สะอาดและให้ความรู้ซึ่งเสริมสร้างหลักการ ไซเลนซิด:
- [FLT: 0] ใช้รูปแบบและข้อสังเกต: นํา ah <
]', ~[FLTT:3]'' และ wo[FLTTT:4]]]. ense. เพิ่มบันทึกเพื่ออธิบายการตัดสินใจออกแบบเช่น ห้องเรียนมีความรับผิดชอบเพียงหนึ่งเดียว. - [FLT: 0] รักษาแผนภาพให้โฟกัส: แผนภูมิเดี่ยวควรอยู่ที่หลักการหนึ่ง หรือชุดเล็ก ๆ ของหลักการที่เกี่ยวข้อง หลีกเลี่ยงการเร่งทุกชั้นเป็นแผนภาพยักษ์หนึ่ง
- [FLT: 0]. ดีพิตเฉพาะความสัมพันธ์ที่เกี่ยวข้อง: แสดงมรดก, ความสัมพันธ์, ลูกศร, และสิ่งเชื่อมโยงที่พวกเขาสนใจ.
- [FLT: 0] การละเมิดสิทธิ์: ใช้สีหรือเส้นประเพื่อทําเครื่องหมายความสัมพันธ์ ตัวอย่างเช่น ลูกศรสีแดงที่เชื่อมโยงถึงระดับสูงถึงรหัสระดับต่ํา สามารถยกเลิกการละเมิด DIP ได้
- [FLT: 0] เปิดใช้งานด้วยการสร้างใหม่ : ขณะที่คุณสร้างการออกแบบใหม่เพื่อตอบสนอง softid, ปรับปรุงแผนภาพ UML เป็นสิ่งประดิษฐ์ที่มีชีวิต — ปฏิบัติต่อมันเป็นเพื่อนในรหัส ไม่ใช่ภาพร่างแบบครั้งเดียว
หลุม พราง ทั่ว ไป และ วิธี หลีก เลี่ยง หลุม พราง
นี่ เป็น ความ ผิด พลาด บ่อย ๆ และ เป็น วิธี ที่ จะ ทํา ให้ มัน ก้าว ไป ข้าง หน้า:
- [FLT: 0]. over-abspacting ล่วงหน้า: เริ่มด้วยอินเทอร์เฟซหรือคลาสที่มากเกินไป สามารถละเมิด YAGNI (คุณไม่ต้องการมัน). เริ่มด้วยแผนภาพคลาสที่เรียบง่าย จากนั้นเพิ่มนามธรรมเมื่อจําเป็นโดยหลักการ ProperID — โดยทั่วไปในช่วงการจําลอง
- [FLT: 0]. continuation signational: พิมพ์ลูกศรแบบผิด (เช่น ใช้ลูกศรทั่วไปที่ลูกศรเชื่อมต่อที่ถูกต้อง) สามารถนําไปสู่การเข้าใจผิดได้. ศึกษา 2.0L. อนุมานพื้นฐาน 2. พื้นฐาน 2. พื้นฐานเพื่อหลีกเลี่ยงความคลุมเครือ. The OMMLLTLTLT [FTLTT:3]. เป็นอ้างอิงที่แน่นอน.
- [FLT: 0] ไม่สนใจ LPS ในแผนภาพลําดับ:[[FLT: 1) แผน Sequencences แสดงการปฏิสัมพันธ์ระหว่างเวลา หากวัตถุชั้นย่อยถูกแทนที่ด้วยวัตถุชั้นฐาน และการเปลี่ยนแปลงของการเปลี่ยนแปลงของพฤติกรรมที่ต่อเนื่องอย่างไม่คาดคิด LPS ถูกทําลายลง โดยคํานวณได้ถูกต้องด้วย excults ass exact excults
- [FLT: 0] การจับเท็จทิศทาง: DIP เป็นเรื่องของทิศทางที่เชื่อมโยง ในแผนภาพแพกเกจ ให้วาดลูกศรจากลูกค้าไปยังเซิร์ฟเวอร์เสมอ หากคุณเห็นวงจรหรือลูกศรชี้ไปผิดทิศทาง ให้ทําการปรับค่านามธรรมอีกครั้ง
- [FLT: 0] วางแผนภาพอย่างละเอียดเกินไป: แผนคลาสแสดงทุก Getter และ seter ครอบคลุมมุมมอง โฟกัสบนส่วนติดต่อสาธารณะและความสัมพันธ์ที่สําคัญที่บังคับหลักการ ProperID
เครื่องมือในการสร้างแผนภาพ UML
เครื่องมือหลายตัวจะช่วยให้คุณสร้างแผนภาพ UML ที่ทําการปรับเทียบข้อมูลด้วยรหัสได้ เลือกชุดที่ตรงกับการทํางานของคุณ:
- [FLT: 0]. Plantule: เครื่องมือปรับผังข้อความแบบข้อความที่ผนวกเข้ากับการควบคุมรุ่น เขียนรายละเอียดข้อความธรรมดาและสร้างแผนภาพโดยอัตโนมัติ. ผมจัดการสําหรับทีมที่ต้องการแผนภาพเป็นรหัส. . สืบค้นเพิ่มเติมที่ PlanmL (FTLT:3].
- [FLT: 0]. ชอคโก (Diagraphs.net): [[FLT: 1) บรรณาธิการภาพแบบเว็บอิสระ (อังกฤษ: Web-books Profiles). รองรับ UML Sscheets และส่งออกง่าย. เหมาะสําหรับการรวมสีขาว.
- [FLT: 0] Lucidchart: เวทีจ่ายเงินพร้อมแม่แบบ UML และความร่วมมือแบบเรียลไทม์ นําเสนอความสอดคล้องกับคอนฟลูเซนซ์และจีระ (พ.ศ.
- [FLT: 0]. Dehythio: เครื่องมือเปิด-source ที่รองรับ UML และ BPN. สามารถสร้างรหัสจากแผนภาพชั้น และย้อนกลับระบบคอมพิวเตอร์ที่มีอยู่
- [FLT: 0] Intertelli J printed expresste: รวมคุณสมบัติการสร้างแผนภาพสําหรับคลาส, แพคเกจ, และแผนภาพเชื่อมโยง. ทํางานกับโค๊ดเบสของคุณโดยตรงสําหรับการประสานแบบสด
2550 เพื่อความเข้าใจลึกซึ้งมากขึ้นของหลักการ SOLID และ UML Integration คุณสามารถอ้างอิงถึงการเขียนต้นฉบับของ โรเบิร์ต ซี. มาร์ติน (FLT: 0) หลักการของโอดี (PDF) และบทความวิกิพีเดียเกี่ยวกับ หลักการ.
รูปแบบการวน
UML แผนภาพภาพแบบ SOL การแปลงหลักการ ซอฟท์ซิด เป็นโมเดลภาพคอนกรีตที่นักพัฒนาสามารถตรวจสอบ อภิปราย และปรับปรุงได้โดยวางผังแบบอย่างที่เหมาะสม
เคล็ดลับคือ การใช้ UML ไม่ใช่วัตถุราชการ แต่เป็นเครื่องมือที่มีชีวิต ที่วิวัฒนาการด้วยรหัสของคุณ การผนวกเข้ากับรุ่นของแผนภาพอัตโนมัติ