สถาปัตยกรรมซอฟต์แวร์ขึ้นอยู่กับภาษาเป็นจำนวนเท่าใด


14

ในขณะที่การให้ความรู้กับตัวเองเกี่ยวกับสถาปัตยกรรมซอฟต์แวร์และรูปแบบการออกแบบฉันสังเกตว่าในกรณีส่วนใหญ่คุณลักษณะของภาษาและการออกแบบเฉพาะนั้นมีความหมายโดยนัยในคำอธิบาย

เช่นในทางปฏิบัติบทความหรือหนังสือเล่มใด ๆ ที่จะแสดงความคิดเห็นโดยใช้คลาสและอินเทอร์เฟซ ทุกสิ่งที่เราสามารถหาได้ง่ายในหัวข้อนี้จะพูดถึงวัตถุและแนวคิดของ OOP

เกิดอะไรขึ้นถ้าภาษาที่ระบบเขียนไม่มีแนวคิดดังกล่าวเลย? เช่นจะทำอย่างไรถ้าฉันใช้ Python หรือ Node ซึ่งพิมพ์แบบไดนามิกและไม่มีแนวคิดเกี่ยวกับอินเตอร์เฟส ถ้าฉันใช้ TypeScript โดยที่อินเตอร์เฟสเป็นโครงสร้างชั่วคราวซึ่งไม่มีอยู่ในรันไทม์? ถ้าฉันพยายามยอมรับการเขียนโปรแกรมที่ใช้งานได้ ฉันควรละเว้นเช่น SOLID และมองหาแนวคิดอื่น ๆ ที่เหมาะสมกับภาษาของฉันหรือไม่

ถ้าใช่มันคืออะไร น่าเสียดายที่กระบวนทัศน์ที่เป็นที่ยอมรับทั้งหมด (เท่าที่ฉันทราบ) อ้างถึงแนวคิดและประเภทของ OOP ในบางวิธี ถ้าไม่ฉันควรปฏิบัติตามกฎใดเมื่อปรับสถาปัตยกรรมทั่วไปและหลักการออกแบบเป็นภาษาและกรณีใช้ของฉัน

โดยทั่วไปแล้วคุณจะอธิบายการพึ่งพาระหว่างสถาปัตยกรรมและภาษาอย่างไร


ฉันเขียนบทความเกี่ยวกับสถาปัตยกรรมซอฟต์แวร์: การจัดการความซับซ้อนของซอฟต์แวร์linkedin.com/pulse/ ...
overexchange

ประการแรกใช่สถาปัตยกรรมซอฟต์แวร์นั้นขับเคลื่อนด้วยเทคโนโลยีที่คุณมีอยู่ในใจ ตัวอย่างเช่น: python ไม่ได้ใช้ประโยชน์จากมัลติเธรดจนกว่าเธรดเหล่านั้นจะถูกผูกไว้กับ IO นี่เป็นข้อ จำกัด ที่แท้จริงในการใช้การดำเนินการผูกซีพียูแบบมัลติคอร์ ประการที่สองคุณควรฟังสิ่งนี้ ... youtu.be/FF-tKLISfPEประการที่สามคุณควรวิเคราะห์ / ทำงานเกี่ยวกับผลิตภัณฑ์องค์กรแบบกระจายที่มีอยู่เดิมของโดเมนเฉพาะที่ปรับขนาดได้อย่างน้อย 5-6 ปี นี่เป็นความเข้าใจอย่างถ่องแท้ว่าเทคโนโลยีมีอิทธิพลต่อการออกแบบอย่างไร Btw..Such ผลิตภัณฑ์ถูกเขียนขึ้นในโลก pre-java ตั้งแต่เริ่มต้น
แลกเปลี่ยน

เทคโนโลยี Wrt ... ในโลก Java จนกระทั่งการออกแบบภาษาจาวา 5/6/7 อยู่ในการควบคุมของผู้ก่อตั้งที่แท้จริง จากจาวา 8 ฉันจะพิจารณาว่าจาวาเป็นเครื่องโฆษณาชวนเชื่อ แต่ไม่ใช่ภาษาการเขียนโปรแกรม ในความคิดของฉัน java ได้กลายเป็นเทคโนโลยีของผู้จัดการโครงการ ดังนั้นในฐานะผู้เริ่มต้นฉันจะวิเคราะห์ / ทำงานกับผลิตภัณฑ์ที่เขียนโดยใช้ C / C ++ / Python
overexchange

โปรดอย่าใช้สถาปัตยกรรมคำในคำถามของคุณมันสับสน คำถามของคุณเกี่ยวกับการออกแบบ โดยทั่วไปแล้วการเลือกภาษาจะมีคุณสมบัติเป็นสถาปัตยกรรมคำถามของคุณไม่สมเหตุสมผลกับคำพูด ..
Martin Maat

นอกจากนี้ไพ ธ อนและจาวาสคริปต์ยังมีส่วนต่อประสานอีกด้วยพวกเขาไม่ได้ใช้คำหลักแยกต่างหากเพื่อ
แยกแยะ

คำตอบ:


11

สถาปัตยกรรมซอฟต์แวร์นั้นเหมือนกับสถาปัตยกรรมของบ้านหรือสะพาน สะพานจะต้องรับน้ำหนักของตัวมันเองและยานพาหนะที่ขับผ่านหรือคนที่เดินข้าม ต้องทนต่อสภาพอากาศ วัสดุที่คุณใช้สร้างมันต้องมีทั้งความแข็งแรงและน้ำหนักที่ค่อนข้างเบา

มีวัสดุมากมายที่คุณสามารถใช้ในการสร้างบ้านได้ คุณสามารถใช้อิฐหรือปูนปั้น คุณสามารถใช้คานไม้หรือโลหะ วัสดุแต่ละชนิดมีคุณสมบัติเป็นของตัวเองทั้งในด้านน้ำหนักความแข็งแรงเป็นต้น ลักษณะทั้งหมดเหล่านี้ส่งผลกระทบต่อสถาปัตยกรรม

ในทำนองเดียวกันภาษาการเขียนโปรแกรมที่คุณใช้จะมีผลต่อการสร้างสถาปัตยกรรมของคุณ สถาปัตยกรรมของคุณจะดูแตกต่างในภาษาการเขียนโปรแกรมที่มีคลาสอย่าง C ++ มากกว่าภาษาการเขียนโปรแกรมที่ไม่เหมือน C

หลักการ SOLID ส่วนใหญ่เกี่ยวกับภาษาเชิงวัตถุ (เช่นภาษาที่มีคลาส)


4

สถาปัตยกรรมขึ้นอยู่กับความสามารถในการบรรลุเป้าหมาย ตัวเลือกภาษาสามารถจำกัดความสามารถได้ ภาษาทัวริงที่สมบูรณ์มีความสามารถในการเขียนโปรแกรมให้เสร็จสมบูรณ์ หลังจากจุดนั้นมันเกี่ยวกับวิธีการที่มนุษย์สามารถอ่านภาษาได้ช่วยแก้ปัญหาได้

โครงร่างสถาปัตยกรรมซอฟต์แวร์จำนวนมากขอให้คุณลบความรู้เกี่ยวกับตัวเลือกเทคโนโลยีทั้งหมดออกจากกฎเกณฑ์ธุรกิจโดเมนหลัก ทางเลือกทางเทคนิคหนึ่งเดียวที่คุณไม่สามารถลบความรู้ออกจากแกนกลางคือภาษาที่คุณเลือกที่จะแสดงออก

เมื่อหนังสือเกี่ยวกับสถาปัตยกรรมให้การบอกคุณเกี่ยวกับเป้าหมายของพวกเขาภาษาไม่สำคัญตราบใดที่สามารถบรรลุเป้าหมายได้ เมื่อหนังสือบอกคุณว่าจะบรรลุเป้าหมายเหล่านี้ได้อย่างไรภาษาจะเริ่มขึ้น


คะแนนที่ดีในคำตอบของคุณ แต่แน่นอนว่าสถาปัตยกรรมซอฟต์แวร์ในอดีตได้ถูกนำไปใช้กับเทคโนโลยีในแนวโน้ม
แลกเปลี่ยน

@overexchange จุดของสถาปัตยกรรมที่ดีคือการผลิตซอฟต์แวร์ที่สามารถอยู่ได้นานกว่าแนวโน้มในปัจจุบันโดยการเตรียมพร้อมสำหรับสิ่งต่อไป
candied_orange

อย่างน้อยในโลกมิดเดิลแวร์สถาปัตยกรรมผลิตภัณฑ์ไม่สามารถคิดเกิน RPC / RMI / CORBA จนถึงปี 1990 ฉันเห็นการออกแบบแบบคลาสสิกโดยใช้กระบวนการโทรซ้ำ ServiceOArch เปลี่ยนแนวโน้มของมิดเดิลแวร์ในแง่ของสถาปัตยกรรม
แลกเปลี่ยนที่มากเกินไป

2
@CandiedOrange นั่นคือทฤษฎี ในทางปฏิบัติฉันได้เห็นผู้คนจำนวนมากทำในสิ่งที่บางครั้งเรียกว่า "การพัฒนาที่ขับเคลื่อนด้วย hype" - ทำในสิ่งที่กลุ่มเพื่อนปัจจุบันพูดถึงมากที่สุดในเวลาออกแบบเพื่อให้คุณสามารถมีส่วนร่วมในการพูดคุยนั้น
marstato

@marstato เห็นด้วย ตัวอย่างที่ดีที่สุดคือการใช้ Spring / Springboot ในแนวโน้มปัจจุบันสำหรับโครงการใหม่ใด ๆ โดยไม่รู้ตัวทำไม
แลกเปลี่ยน

1

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

ในซอฟต์แวร์ตัวเลือกสถาปัตยกรรมควรทำในลักษณะที่สอดคล้องกับคุณสมบัติของภาษา หากคุณกำลังสร้างระบบที่มีภาษาที่มุ่งเน้นวัตถุฉันก็คาดหวังว่าสถาปัตยกรรมของระบบจะเป็นวัตถุเชิงวัตถุเช่นกัน หากคุณกำลังสร้างระบบด้วยภาษาที่ใช้งานได้ฉันก็คาดหวังว่าสถาปัตยกรรมของระบบนั้นจะทำงานได้เช่นกัน

ทำให้รู้สึก?


ขอบคุณสำหรับคำตอบของคุณ! คุณทราบถึงโอกาสใดบ้างโดยละเอียดเกี่ยวกับสถาปัตยกรรมซอฟต์แวร์ที่เกี่ยวกับภาษาที่พิมพ์หรือใช้งานได้? tbh ทั้งหมดที่ฉันเคยเห็นผลงานสำหรับเช่น Java ตรงออกจากกล่อง แต่จะต้องมีการปรับตัวบางอย่างสำหรับเช่น js แนวทางใดบ้างที่สามารถปรับรูปแบบสถาปัตยกรรมทั่วไปเป็นภาษาที่พิมพ์ได้อย่างอ่อน คนเราควรลองทำดูหรือว่ามันช่างแตกต่างอย่างสิ้นเชิง?
Tristan Tzara

ความกังวลของฉันคือถ้ามีใครใช้ Java เช่นนั้นมีแนวปฏิบัติและรูปแบบที่ดีที่สุดสำหรับสถาปัตยกรรม แต่ฉันไม่เคยเห็นภาษาที่แตกต่างกัน ดังนั้นฉันจึงสงสัยว่าจะปฏิบัติต่อพวกนั้นอย่างไร
ทริสตันทาซาร่า

โดยพื้นฐานแล้วเช่น SOLID ยังคงอยู่ในกรณีเช่นนี้หรือไม่? จะปรับได้อย่างไรถ้าใช่ สิ่งที่ควรทำถ้าไม่มี
Tristan Tzara

หลักการ SOLID นั้นมีจุดกำเนิดในเชิงวัตถุมาก อย่างไรก็ตามฉันคิดว่าพวกเขาเข้ารหัสหลักการลำดับขั้นสูงที่อาจใช้ได้กับระบบซอฟต์แวร์ใด ๆ แต่หลักการพื้นฐานนั้นก็คือ: คุณควรรู้และเข้าใจพวกเขาก่อนที่จะสร้างมากกว่าผู้เลี้ยงนก
RibaldEddie

@TristanTzara การเขียนโปรแกรมเชิงวัตถุถูกคิดค้นมาก่อนและไม่มีภาษาเชิงวัตถุใด ๆ คุณสามารถทำได้ในภาษาที่ใช้โดยทั่วไป แม้แต่คนที่ไม่มีคลาส
candied_orange

1

ฉันจะบอกว่าเพื่อเริ่มต้นว่าแม้แต่ภาษาที่คุณคิดมีอิทธิพลอย่างลึกล้ำในสิ่งที่คุณสามารถเข้าใจได้ มีเหตุผล PASCAL ถูกสร้างขึ้นโดย Niklaus Wirth และ C โดย Brian Kernighan และ Dennis Ritchie

ในระดับที่สูงขึ้นความสามารถในการแสดงแนวคิดบางอย่าง (และการขาดผู้อื่น) จะนำความคิดของคุณและทำให้คุณประสบความสำเร็จในการแก้ปัญหาบางอย่างที่ไม่จำเป็นต้องเป็นคนอื่นเหมือนกันโดยมีพื้นฐานแตกต่างกัน

ในที่สุดแนวคิดทั้งหมดที่คุณพูดถึงสามารถนำไปใช้ในภาษาที่ใช้งานทั่วไปได้ เป็นเพียงว่าพวกเขาอาจจะไม่ได้รับการสนับสนุนทางวากยสัมพันธ์ในเรื่องนี้และการดำเนินการอาจยุ่งยาก คุณสามารถเขียนรหัสแอสเซมบลี x86 เชิงวัตถุถ้าคุณมีความมุ่งมั่นอย่างเพียงพอ (หรือบ้าพอ) เช่นเดียวกับที่คุณสามารถทำได้กับซีในความเป็นจริงการใช้งานครั้งแรกของ C ++ เป็นตัวประมวลผลล่วงหน้าที่รวบรวมรหัส C ++ ของคุณลงใน C การแก้จุดบกพร่องสนุกมากขึ้น)

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