คำถามติดแท็ก design

คำถามเกี่ยวกับการแก้ปัญหาและการวางแผนแก้ปัญหาผ่านการออกแบบซอฟต์แวร์

8
จะทำอย่างไรถ้าหัวหน้าเลื่อนการตัดสินใจที่สำคัญเกี่ยวกับข้อกำหนดและการออกแบบโดยรวมออกไป
เมื่อเริ่มต้นโครงการใหม่หัวหน้าของฉันจะหลีกเลี่ยงการตัดสินใจที่แน่นอน เขามักจะพูดว่า: ตกลงเพิ่งเริ่มเขียนบางสิ่งบางอย่างและเป็นสามัญที่สุดเท่าที่จะทำได้ เมื่อเสร็จแล้วเราจะดูว่าเราดำเนินการต่อไปอย่างไร ข้อโต้แย้งของเขานั้นโดยพื้นฐานแล้วคุณไม่เคยรู้และ "การพัฒนาที่คล่องตัว" เพื่อให้คำถามเป็นเรื่องธรรมดาที่สุดคุณจะทำอย่างไรถ้าเจ้านายของคุณไม่ชอบการตัดสินใจ เพียงติดกับมันและเขียนรหัสที่อาจได้รับการปรับโครงสร้างอย่างหนักและเขียนใหม่บางส่วนในอีกไม่กี่สัปดาห์ต่อมา หรือพูดคุยกันเรื่อย ๆ จนกว่าหัวหน้าจะตัดสินใจอย่างน้อยสองสามครั้ง? นี่เป็นกลยุทธ์ปัจจุบันของฉันมากกว่าหรือน้อยกว่า เพราะมันเหมือนกฎของฟิสิกส์ในบางจุดจำเป็นต้องมีการส่งมอบ อาจเป็นเพราะเจ้านายของเจ้านายต้องการเห็นผลลัพธ์หรือเป็นเรื่องไร้สาระในบางจุด ฉันยังสังเกตเห็นว่าเจ้านายของฉันกำลังวิจารณ์เกือบทุกอย่าง แม้แต่ข้อเสนอแนะที่ยึดตามของเขาเอง ...

8
จะเป็นไปได้ไหมที่จะสร้างเว็บไซต์ที่มีคุณภาพด้วยเครื่องมือแก้ไขเพียงอย่างเดียวโดยไม่จำเป็นต้องรู้ HTML [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา บริษัท ขนาดใหญ่จำนวนมากตั้งแต่ Apple ถึง Microsoft ไปจนถึง Google กำลังสร้างรายได้มากขึ้นเรื่อย ๆ ในการสร้างเครื่องมือที่จะช่วยให้ทุกคนสร้างเว็บไซต์ด้วยเครื่องมือแก้ไขแบบ WYSIWYG ตัวอย่างเช่นอีเมลนี้ฉันเพิ่งได้รับจาก Adobe: สร้างเว็บไซต์อย่างรวดเร็วและง่ายดายเหมือนเค้าโครงAdobe®InDesign® ขณะนี้อยู่ในรูปแบบเบต้าแอปพลิเคชันที่มีชื่อรหัสว่า "Muse" เป็นเทคโนโลยีใหม่ที่ช่วยให้นักออกแบบกราฟิกสามารถใช้เครื่องมือฟรีฟอร์มที่คุ้นเคยเพื่อออกแบบและเผยแพร่เว็บไซต์ HTML และ CSS ทั้งหมดนี้โดยไม่ต้องเขียนโค้ดหรือ จำกัด แม่แบบ ร่วมเป็นส่วนหนึ่งของการแสดงตัวอย่างฟรีที่เหลือเชื่อและสัมผัสกับวิธีที่ Muse จะปฏิวัติวิธีที่คุณสร้างขึ้นสำหรับเว็บ ในฐานะนักพัฒนาเว็บฉันไม่สามารถล่วงรู้ถึงวิธีที่ Adobe หรือ บริษัท อื่น ๆ จะสร้างโซลูชันที่อนุญาตให้ผู้ใช้ที่ไม่มีความรู้ HTML / CSS / JS เพื่อสร้างการออกแบบเว็บไซต์ที่มีประโยชน์ด้วยเหตุผลเหล่านี้: โค้ดที่สร้างขึ้นนั้นแทบจะไม่เป็นระเบียบซึ่งทำให้มันยากสำหรับโปรแกรมเมอร์ที่ต้องการเขียนแบ็กเอนด์สำหรับไซต์เพื่อทำงานกับมัน พวกเขาอาจจำเป็นต้องเปลี่ยนรหัสตัวเองเพื่อจัดโครงสร้างตามที่ต้องการ HTML ไม่ใช่แบบพิกเซลดังนั้นจึงเป็นเรื่องยากมากที่จะพัฒนาเครื่องมือที่สามารถออกแบบเทมเพลตที่ไหลได้อย่างง่ายดายด้วยการเปลี่ยนแปลงขนาดตัวอักษร …
12 design  html  wysiwyg 

8
การออกแบบคลาสที่เน้นวัตถุ
ฉันสงสัยเกี่ยวกับการออกแบบคลาสเชิงวัตถุที่ดี โดยเฉพาะอย่างยิ่งฉันมีเวลาตัดสินใจยากระหว่างตัวเลือกเหล่านี้: วิธีการคงที่ vs อินสแตนซ์ method ที่ไม่มีพารามิเตอร์หรือ return value vs method กับพารามิเตอร์และ return value ฟังก์ชันการใช้วิธีการที่ทับซ้อนกัน vs ที่แตกต่างกัน วิธีส่วนตัวและสาธารณะ ตัวอย่างที่ 1: การใช้งานนี้ใช้วิธีการแบบอินสแตนซ์โดยไม่มีค่าส่งคืนหรือพารามิเตอร์โดยไม่มีการซ้อนทับฟังก์ชันการทำงานและวิธีการทั้งหมดสาธารณะ XmlReader reader = new XmlReader(url); reader.openUrl(); reader.readXml(); Document result = reader.getDocument(); ตัวอย่างที่ 2: การใช้งานนี้ใช้วิธีการคงที่มีค่าตอบแทนและพารามิเตอร์ที่มีฟังก์ชั่นที่ทับซ้อนกันและวิธีการส่วนตัว Document result = XmlReader.readXml(url); ในตัวอย่างที่หนึ่งวิธีทั้งหมดเป็นแบบสาธารณะซึ่งทำให้ง่ายต่อการทดสอบหน่วย แม้ว่าวิธีการทั้งหมดจะแตกต่างกัน readXml () ขึ้นอยู่กับ openUrl () ใน openUrl () นั้นจะต้องถูกเรียกก่อน …

9
การรับมรดกผิดไป
ฉันมีรหัสบางส่วนที่โมเดลการสืบทอดที่ดีลงไปและฉันพยายามเข้าใจว่าทำไมและวิธีการแก้ไข โดยพื้นฐานแล้วจินตนาการว่าคุณมีลำดับชั้นของ Zoo ด้วย: class Animal class Parrot : Animal class Elephant : Animal class Cow : Animal เป็นต้น คุณมีวิธีกิน (), รัน (), ฯลฯ และทุกอย่างดี วันหนึ่งมีคนเข้ามาและพูดว่า - คลาส CageBuilder ของเราทำงานได้ดีและใช้ animal.weight () และ animal.height () ยกเว้น African Bison ใหม่ที่แข็งแรงเกินไปและสามารถทุบกำแพงได้ดังนั้นฉันจะเพิ่ม อีกคุณสมบัติหนึ่งของคลาส Animal - isAfricanBizon () และใช้สิ่งนั้นเมื่อเลือกวัสดุและแทนที่มันสำหรับคลาส AfricanBizon เท่านั้น บุคคลต่อไปมาและทำสิ่งที่คล้ายกันและสิ่งต่อไปที่คุณรู้ว่าคุณมีคุณสมบัติเหล่านี้ทั้งหมดสำหรับชุดย่อยของลำดับชั้นในคลาสพื้นฐาน เป็นวิธีที่ดีในการปรับปรุง / …

8
คุณทำให้ผู้จัดการเข้าใจถึงความคล่องตัวได้อย่างไร
ฉันมีปัญหากับผู้อำนวยการอาวุโสที่ไม่เข้าใจการพัฒนาซ้ำ ๆ (เปรียวน้อยกว่า) เขายืนยันว่าข้อกำหนดการออกแบบซอฟต์แวร์ (SDS) ของเราเสร็จสมบูรณ์ก่อนที่จะเขียนบรรทัดใด ๆ เสร็จสมบูรณ์สำหรับเขาหมายถึงรายละเอียดการทำงานทั้งหมดอยู่ที่นั่น นอกจากนี้ในฐานะอดีตโปรแกรมเมอร์โคบอลเขาต้องการเห็น "โมดูล" และผังงาน นี่คือเว็บแอปพลิเคชัน Java สำหรับการร้องเสียงดัง! อย่างไรก็ตามฉันกำลังพยายามหาที่ง่าย ๆ เพื่อชี้ให้เขาเห็นว่าเอกสารความปลอดภัยไม่จำเป็นต้องเสร็จสมบูรณ์ 100% ก่อนที่เราจะเริ่มเขียนโค้ด (หรือจะไม่สมบูรณ์) ข้อเสนอแนะใด ๆ ขอบคุณ!

10
ฉันเป็นผู้นำทีมหรือไม่?
ฉันอยู่ในตำแหน่งที่แปลกมาก ฉัน "เป็นผู้นำทีม" ในบทบาทสำหรับโครงการเฉพาะวิศวกรซอฟต์แวร์ในตำแหน่งงาน ในทีมของฉันฉันมีนักพัฒนา 4 คนหนึ่งในนั้นทำหน้าที่คล้ายกันในโครงการอื่น แต่ตอนนี้ของฉันได้รับความสำคัญดังนั้นเขาจึงทำงานกับฉัน ฉันมีผู้ทดสอบ 2 คนหนึ่งในนั้นคือผู้จัดการ สมาชิกอีกคนของทีมคือ "ตัวแทนลูกค้า" ซึ่งเป็นส่วนหนึ่งของแผนกที่ไม่เกี่ยวข้องอย่างสมบูรณ์ ฉันมีผู้จัดการที่อยู่เหนือฉันโดยตรงและฉันก็เชื่อว่าเหนือผู้จัดการทดสอบซึ่งเป็นส่วนหนึ่งของทีมของฉัน ... ไม่แน่ใจในเรื่องนั้น ฉันพยายามอธิบายให้ชัดเจนว่าทำไมบทบาทของฉันจึงมีหลายครั้ง มันยากสำหรับฉันที่จะเข้าใจว่าอำนาจของฉันเริ่มต้นและสิ้นสุดลงอย่างไรถ้าฉันมี คำตอบที่ฉันกำลังทำงานด้วยก็คือฉันเป็น "ผู้นำทางด้านเทคนิค" ของทีม นี่ดูเหมือนว่าหมายความว่าสิทธิ์ของฉันอยู่เหนือการตัดสินใจทางเทคนิคเกี่ยวกับสถาปัตยกรรมการออกแบบและมาตรฐานการประมวลผล / การเข้ารหัสเนื่องจากเกี่ยวข้องกับรหัสผลิตภัณฑ์ วันนี้มีบางอย่างเกิดขึ้นและผลลัพธ์ของรหัสที่ฉันมอบหมายให้กับหนึ่งในสมาชิกของทีมของฉันซึ่งแสดงให้เห็นถึงส่วนที่เหลือของ บริษัท ในการประชุมการแสดงของเรา - ทั้งหมด - ทั้งหมด ผู้แทนลูกค้าทำการอวด มีบางอย่างแสดงออกมาในวันนี้ซึ่งฉันไม่เห็นด้วยจริงๆและไม่มีใครเคยถามฉันเลยว่าฉันต้องการพูดในสิ่งที่เกิดขึ้นหรือไม่ ในระยะสั้นเพื่อให้ความสามารถของผู้ใช้ในการแสดงค่าในรายงานในมารยาทต่อไปนี้ ("เอกสาร" หน่วยหน่วยออกแบบโค้งมนไม่โค้งมน) พวกเขาให้การเข้าถึงเขตข้อมูลสำหรับการเปลี่ยนแปลงแต่ละครั้ง ดังนั้นเราจึงมีค่าในหน่วย doc แบบกลมหน่วยการออกแบบแบบโค้งหน่วยหน่วยกลมไม่มีหน่วยการออกแบบกลม แต่ละระเบียนที่ผู้ใช้จะต้องการทำงานด้วยมีค่าดังกล่าวจำนวนมากและแต่ละระเบียนได้รับอนุญาตในลักษณะนี้ ฉันเกลียดสิ่งนี้จริงๆ คนที่เราแสดงให้เห็นว่าต้องการให้แน่ใจว่า API ที่เราใช้สำหรับรายงานนั้นเหมือนกับวิธีที่เราทำสิ่งต่าง ๆ เช่นส่งออกข้อมูลไปยัง Excel น่าเสียดายที่ตอนนี้เราได้รับแรงผลักดันนี้ในทิศทางที่ฉันคิดว่าแย่มากจริง …

5
ดีที่แบ็กเอนด์ แต่แย่มากที่ส่วนหน้า
ฉันต้องการเริ่มต้นการพัฒนาเว็บฉันได้เรียนรู้ php ฉันมีประสบการณ์ใน Java, Python และ C ++ ประสบการณ์นี้ทำให้ฉันดีที่ด้านหลังสุดของการพัฒนาเว็บ แต่ฉันออกแบบและกราฟิกได้แย่มาก ฉันต้องการเริ่มเว็บไซต์ พวกคุณแนะนำฉันให้ทำอะไร? หากข้อเสนอแนะของคุณคือทำให้กราฟิกดีขึ้นสิ่งที่จะเป็นวิธีที่ดี? ฉันต้องการรู้ว่าสิ่งที่คุณใช้ในการออกแบบและกราฟิกและสิ่งที่จะเป็นจุดเรียนรู้ที่ดีสำหรับมัน?

4
หลีกเลี่ยงการมีวิธีการเริ่มต้น
ฉันมีรหัสที่มีอยู่นี้ซึ่งพวกเขามีชั้นเรียนและวิธีการเริ่มต้นในชั้นเรียนนั้น คาดว่าเมื่อวัตถุของคลาสถูกสร้างขึ้นพวกเขาจำเป็นต้องเรียกใช้การเตรียมใช้งานกับมัน เหตุผลทำไมมีวิธีการเตรียมใช้งาน วัตถุที่ถูกสร้างขึ้นก่อนที่จะมีขอบเขตทั่วโลกและจากนั้นวิธีการเริ่มต้นได้รับการเรียกในภายหลังหลังจากโหลด dll ซึ่งมันขึ้นอยู่กับ ปัญหาเกี่ยวกับการเริ่มต้น คลาสตอนนี้มีบูล isInitialized ซึ่งจำเป็นต้องตรวจสอบในทุกวิธีก่อนที่จะดำเนินการและส่งกลับข้อผิดพลาดหากไม่ได้เริ่มต้น พูดง่ายๆคือมันเป็นความเจ็บปวดครั้งใหญ่ ทางออกหนึ่งที่เป็นไปได้ เริ่มต้นในตัวสร้าง มีเพียงตัวชี้ไปยังวัตถุในขอบเขตส่วนกลาง สร้างวัตถุจริงหลังจากที่โหลด dll ปัญหาเกี่ยวกับการแก้ปัญหาข้างต้น ทุกคนที่สร้างวัตถุของคลาสนี้จำเป็นต้องรู้ว่ามันจะต้องมีการสร้างหลังจากโหลด dll หรือมิฉะนั้นมันจะล้มเหลว เป็นที่ยอมรับหรือไม่?

8
ตัวสร้างโดยทั่วไปไม่ควรเรียกวิธีการ
ฉันอธิบายให้เพื่อนร่วมงานฟังว่าทำไมคอนสตรัคเตอร์ที่เรียกใช้เมธอดสามารถเป็น antipattern ได้ ตัวอย่าง (ใน C ++ ที่เป็นสนิมของฉัน) class C { public : C(int foo); void setFoo(int foo); private: int foo; } C::C(int foo) { setFoo(foo); } void C::setFoo(int foo) { this->foo = foo } ฉันต้องการที่จะกระตุ้นให้ดีขึ้นความจริงนี้ผ่านส่วนเสริมของคุณ หากคุณมีตัวอย่างหนังสืออ้างอิงหน้าบล็อกหรือชื่อของหลักการพวกเขาจะยินดีมาก แก้ไข: ฉันกำลังพูดคุยกันโดยทั่วไป แต่เรากำลังเขียนโค้ดด้วยไพ ธ อน
12 design 

5
การแก้ไขวัตถุที่ส่งผ่านโดยการอ้างอิงเป็นการปฏิบัติที่ไม่ดี
ในอดีตฉันมักจะทำการจัดการวัตถุส่วนใหญ่ด้วยวิธีการหลักที่กำลังสร้าง / อัปเดต แต่ฉันพบว่าตัวเองกำลังใช้วิธีการที่แตกต่างกันเมื่อเร็ว ๆ นี้และฉันอยากรู้ว่ามันเป็นการปฏิบัติที่ไม่ดีหรือไม่ นี่คือตัวอย่าง สมมติว่าฉันมีพื้นที่เก็บข้อมูลที่ยอมรับUserเอนทิตี แต่ก่อนที่จะแทรกเอนทิตีเราเรียกวิธีการบางอย่างเพื่อให้แน่ใจว่าฟิลด์ทั้งหมดตั้งค่าเป็นสิ่งที่เราต้องการ ตอนนี้แทนที่จะเรียกวิธีการและตั้งค่าเขตข้อมูลจากภายในวิธีการแทรกฉันเรียกชุดวิธีการเตรียมที่รูปร่างวัตถุก่อนที่จะแทรก วิธีเก่า: public void InsertUser(User user) { user.Username = GenerateUsername(user); user.Password = GeneratePassword(user); context.Users.Add(user); } วิธีการใหม่: public void InsertUser(User user) { SetUsername(user); SetPassword(user); context.Users.Add(user); } private void SetUsername(User user) { var username = "random business logic"; user.Username = username; } private …

1
ปรับปรุงไดอะแกรมตรรกะและสถาปัตยกรรมฟิสิคัลให้ทันสมัยอยู่เสมอ
ในโครงการพัฒนาซอฟต์แวร์ใด ๆ ที่เกี่ยวข้องกับระบบกระจายที่มีผู้พัฒนาหลายคนการใช้ Logical และ Physical Architecture diagrams เป็นแนวปฏิบัติที่ดีที่สุด แต่จากประสบการณ์ของฉันไดอะแกรมเหล่านี้เริ่มต้นจากการดูแลรักษาอย่างดีตั้งแต่เริ่มโครงการ แต่ไม่ได้รับการปรับปรุง และขั้นตอนการบำรุงรักษาจะเริ่มขึ้น สำหรับโครงการที่ซับซ้อนที่มีกระบวนการกระจายจำนวนมากไดอะแกรมมีแนวโน้มที่จะล้าสมัยหรือไม่ถูกต้องอย่างรวดเร็วแม้กระทั่งก่อนการเปิดตัวครั้งแรกเนื่องจากไม่มีใครมีความรู้ทั้งหมด ด้วยภูมิหลังนี้ฉันต้องการถามคำถามต่อไปนี้กับชุมชน: สำคัญอย่างไรที่มีไดอะแกรมตรรกะและฟิสิคัลสถาปัตยกรรมที่ทันสมัยและแม่นยำ? มีเครื่องมือและกระบวนการใดบ้างที่สามารถช่วยให้ทันสมัยอยู่เสมอ? ใครควรเป็นผู้รับผิดชอบในการทำให้พวกเขาทันสมัย ผู้ดูแลระบบผู้พัฒนาและทีมงานควบคุมคุณภาพสามารถมีส่วนร่วมได้อย่างไร?

4
ทำอย่างไรให้พอดีกับกฎของเอ็นจินในสถาปัตยกรรมไมโครเซอร์วิสเมื่อต้องการข้อมูลอินพุตจำนวนมาก?
สถานการณ์ปัจจุบัน เรากำลังดำเนินการ (และตอนนี้ยังคงรักษา) เว็บแอปพลิเคชันการช็อปปิ้งออนไลน์ในสถาปัตยกรรม microservice หนึ่งในความต้องการก็คือธุรกิจจะต้องสามารถใช้กฎกับสิ่งที่ลูกค้าของเราเพิ่มลงในรถเข็นของพวกเขาเพื่อปรับแต่งประสบการณ์ของพวกเขาและลำดับท้ายที่สุด เห็นได้ชัดว่าต้องวางเอ็นจิ้นกฎทางธุรกิจและเราได้ใช้ "บริการไมโคร" ที่เฉพาะเจาะจงสำหรับสิ่งนี้ (ถ้าเรายังคงเรียกมันได้) ในช่วงหนึ่งปีที่ผ่านมาเอ็นจินกฎนี้มีความซับซ้อนมากขึ้นเรื่อย ๆ ต้องการข้อมูลมากขึ้น (เช่นเนื้อหาของรถเข็น แต่ยังรวมถึงข้อมูลผู้ใช้บทบาทของเขาบริการที่มีอยู่ของเขาข้อมูลการเรียกเก็บเงินบางอย่างเป็นต้น) เพื่อให้สามารถ คำนวณกฎเหล่านั้น ในขณะนี้shopping-cartmicroservice ของเรากำลังรวบรวมข้อมูลทั้งหมดจาก microservices อื่น ๆ แม้ว่าส่วนหนึ่งของข้อมูลนี้จะถูกใช้งานโดยshopping-cartส่วนใหญ่จะใช้เพื่อป้อนกฎของเครื่องมือเป็นส่วนใหญ่ ข้อกำหนดใหม่ ตอนนี้มาถึงความต้องการแอปพลิเคชั่น / ไมโครไซต์อื่นเพื่อนำเอ็นจินกฎกลับมาใช้ใหม่สำหรับข้อกำหนดที่คล้ายกัน ในสถานการณ์ปัจจุบันพวกเขาจะต้องส่งข้อมูลชนิดเดียวกันเรียกไมโครไซต์เดียวกันและสร้าง (เกือบ) ทรัพยากรเดียวกันเพื่อให้สามารถเรียกเครื่องมือกฎ ดำเนินการต่อตามที่เป็นอยู่เราจะเผชิญกับปัญหาหลายประการ: ทุกคน (เรียกเครื่องมือกฎ) ต้องนำการดึงข้อมูลกลับมาใช้ใหม่แม้ว่าพวกเขาจะไม่ต้องการมัน การร้องขอไปยังเอ็นจินกฎมีความซับซ้อน ต่อไปในทิศทางนี้เราจะต้องขนส่งข้อมูลนี้ไปทั่วเครือข่ายสำหรับคำขอจำนวนมาก (คิดว่าμs A μsโทรμs B เรียกเครื่องมือกฎ แต่ A มีข้อมูลที่ต้องการกฎเครื่องยนต์อยู่แล้ว); shopping-cart ได้กลายเป็นใหญ่เนื่องจากการดึงข้อมูลทั้งหมด ฉันอาจลืม ... เราจะทำอย่างไรเพื่อหลีกเลี่ยงปัญหาเหล่านี้ เป็นการดีที่เราจะหลีกเลี่ยงการเพิ่มความซับซ้อนมากขึ้นในเครื่องมือกฎ …

3
หลักการผกผันของการพึ่งพาและพึ่งพา“ โปรแกรมไปยังส่วนต่อประสานไม่ใช่การใช้งาน”
ฉันกำลังพยายามที่จะเข้าใจว่าหลักการการพึ่งพาการพึ่งพาแตกต่างจากหลักการของ "โปรแกรมไปยังส่วนต่อประสานไม่ใช่การใช้งาน" ฉันเข้าใจว่า "โปรแกรมไปยังอินเทอร์เฟซไม่ใช่การใช้งาน" หมายถึงอะไร ฉันยังเข้าใจว่ามันช่วยให้การออกแบบมีความยืดหยุ่นและบำรุงรักษามากขึ้นได้อย่างไร แต่ฉันไม่เข้าใจว่าหลักการการพึ่งพาการพึ่งพานั้นแตกต่างจากหลักการ "โปรแกรมไปยังอินเทอร์เฟซไม่ใช่การใช้งาน" ฉันอ่านเกี่ยวกับ DIP ในหลาย ๆ ที่บนเว็บและมันก็ไม่ได้ทำให้ฉันสับสน ฉันยังไม่เห็นว่าหลักการสองข้อแตกต่างจากกันอย่างไร ขอบคุณสำหรับความช่วยเหลือของคุณ.

3
คุณเข้าใกล้การออกแบบคลาสใน OOP ได้อย่างไร
เมื่อฉันพยายามออกแบบโซลูชัน OO ฉันมักใช้การสร้างแบบจำลองCRCโดยที่ฉันแสดงรายการชื่อคลาส (คำนาม) สิ่งที่พวกเขาทำ (คำกริยา) และวิธีที่พวกเขาทำงานร่วมกับคลาสอื่น ๆ บล็อกนี้มีสิ่งด้านล่างที่จะพูดเกี่ยวกับวิธีการที่เป็นคำนามคำกริยานี้ ...This approach, which I will call “noun and verb,” is so limited I’ll dare to call it brain damaged.... คำถามของฉันคือมีเทคนิคการสร้างแบบจำลองที่ดีกว่าที่จะใช้วิธีการ OO หรือไม่?

5
คุณใช้ประโยชน์จากหลักการแบบเปิดหรือไม่
หลักการ open-closed (OCP) ระบุว่าควรเปิดวัตถุสำหรับส่วนขยาย แต่ปิดเพื่อทำการปรับเปลี่ยน ฉันเชื่อว่าฉันเข้าใจและใช้งานร่วมกับ SRP เพื่อสร้างคลาสที่ทำสิ่งเดียวเท่านั้น และฉันพยายามสร้างวิธีการขนาดเล็กจำนวนมากที่ทำให้สามารถแยกการควบคุมพฤติกรรมทั้งหมดออกเป็นวิธีที่อาจขยายหรือแทนที่ในคลาสย่อยบางประเภท ดังนั้นฉันจบลงด้วยคลาสที่มีคะแนนส่วนขยายมากมายไม่ว่าจะเป็น: การฉีดและองค์ประกอบ, เหตุการณ์, การมอบหมาย ฯลฯ พิจารณาคลาสที่เรียบง่ายและขยายได้ดังต่อไปนี้ class PaycheckCalculator { // ... protected decimal GetOvertimeFactor() { return 2.0M; } } ตอนนี้พูดเช่นว่าการOvertimeFactorเปลี่ยนแปลง 1.5 ตั้งแต่ระดับดังกล่าวข้างต้นได้รับการออกแบบมาเพื่อขยายฉันสามารถ subclass OvertimeFactorและกลับที่แตกต่างกัน แต่ ... แม้จะมีคลาสที่ถูกออกแบบมาสำหรับการขยายและการยึดติดกับ OCP ฉันจะแก้ไขวิธีการที่เป็นปัญหามากกว่าซับคลาสและแทนที่วิธีการที่มีปัญหา ด้วยเหตุนี้ฉันจึงละเมิดส่วนหนึ่งของความพยายามของ OCP ที่จะทำให้สำเร็จ รู้สึกเหมือนฉันเพิ่งขี้เกียจเพราะสิ่งที่กล่าวมานั้นง่ายกว่านิดหน่อย ฉันเข้าใจ OCP ผิดหรือเปล่า? ฉันควรจะทำอะไรที่แตกต่างออกไปจริงๆเหรอ? คุณใช้ประโยชน์จาก OCP ต่างกันหรือไม่ อัปเดต …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.