ทำไมเรามี. NET รสชาติมากมาย? มันเป็นสิ่งที่ดีหรือไม่? [ปิด]


9

NET Frameworkมี "รสชาติ" มากมาย:

  • เต็ม ("ปกติ")
  • ส่วนย่อยของโปรไฟล์ลูกค้า
  • Silverlight ในเว็บเบราว์เซอร์
  • "Silverlight" บน Windows Phone
  • กรอบขนาดกะทัดรัด
  • WinRT

เมื่อจำเป็นต้องใช้รหัส C # บนแพลตฟอร์มใหม่ดูเหมือนว่า Microsot ต้องการใช้ CLR แบบเต็มและตัดมันลงในชุดย่อยขนาดเล็กสร้างแอสเซมบลีและเคลื่อนย้ายชนิดใหม่แทนที่จะใช้ชุดประกอบที่มีอยู่เช่น BCL . ตัวอย่างเช่น Silverlight มีคลาส / วิธีการที่แตกต่างกันไปยัง WPF (แม้กระทั่งวิธีการบางอย่างที่มีลายเซ็นที่แตกต่างกันเล็กน้อยหรือการใช้งานที่แตกต่างกันมาก) แทนการอ้างอิงการใช้งานแบบเดียวList<T>กับ WPF

นี่เป็นสถาปัตยกรรมในอุดมคติหรือเป็นสัญลักษณ์ของมรดกหรือไม่? BCL ไม่ควรรันบนทุกแพลตฟอร์มโดยมีเพียงไลบรารีการนำเสนอ / IO ที่แตกต่างกันในแต่ละอัน? หรือ BCL และไลบรารี่อื่น ๆ บวมเกินไปและการแยกพวกมันออกจะสร้างปัญหาความเข้ากันได้แบบย้อนหลังมากเกินไปเพื่อให้เป็นที่ยอมรับ?

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


7
อะไรคือการโหวตอย่างใกล้ชิด? นี่เป็นคำถามที่ถูกกฎหมายอย่างสมบูรณ์
Mason Wheeler

2
ดูเหมือนว่ามันอาจจะถูกปิดลงอาจเป็นเพราะมันใช้คำพูดเล็กน้อยตัดสิน (ดูเหมือนว่าคุณได้ตัดสินใจแล้วว่ามันเป็น "architected ไม่ดี") คุณอาจต้องการใช้ถ้อยคำใหม่เป็น " ทำไมมีรสชาติมากมายของ. NET"
FrustratedWithFormsDesigner

1
@FrustratedWithFormsDesigner ถูกต้อง คำถามเริ่มต้นด้วยอคติกับ. NET หากน้ำเสียงเป็นกลางมากขึ้นฉันสงสัยว่าจะไม่มีการลงมติอย่างใกล้ชิด
Oded

2
ฉันรู้สึกว่าคุณกำลังพยายามที่จะเริ่มต้นการโต้แย้งไม่มองหาคำตอบที่สร้างสรรค์สำหรับคำถามของคุณ ฉันเดาว่านั่นเป็นเหตุผลที่คุณได้รับคะแนน
Tyanna

2
@Oded และคนอื่น ๆ - ฉันได้สร้างชื่อและเนื้อความใหม่หวังว่าจะได้รับความเห็นชอบจากคุณ :)
Paul Stovell

คำตอบ:


5

สิ่งที่ Microsoft กำลังทำอยู่โดยแยกเป็นกิจวัตรเป็นหลายแพ็คเกจเป็นเรื่องปกติ มี. NET รุ่นหนึ่งที่ทำงานบนคอมพิวเตอร์บอร์ดเดียว (.Net Micro Framework) ที่มีหน่วยความจำ จำกัด มันจะไม่มีเหตุผลใด ๆ ที่จะรวมไว้ในรุ่นนั้นทุกอย่างที่จำเป็นในการเรียกใช้ส่วนต่อประสานผู้ใช้แบบกราฟิกเต็มรูปแบบ

หากคุณดูที่ Apple iPhone จะไม่มีกิจวัตรทั้งหมดที่จะพบบน Mac


แต่แทนที่จะเป็นนักพัฒนาคัดลอก / วางรหัสไปList<T>ที่สร้าง Micro Framework List<T>ไม่ควรแยก BCL อย่างเหมาะสมเช่นนั้นไบนารีที่ทำงานบนแพลตฟอร์มทั้งหมดหรือไม่
Paul Stovell

2
กล่าวอีกนัยหนึ่งไม่ควรทำให้โค้ดทำงานบนแพลตฟอร์มอื่นเป็นกรณีของการเลือกแอสเซมบลีที่สนับสนุน
Paul Stovell

1
Java ทำเช่นนี้เช่นกัน ตัวอย่างเช่นJava Cardเป็นส่วนย่อยของ Java
เบอร์นาร์ด

2
@ PaulStovell: ฉันไม่แน่ใจว่า MS ทำอย่างไร ... แต่ฉันจะไม่แปลกใจถ้า MS มีเส้นทางสร้าง / สคริปต์แยก (เพื่อให้เบา) ที่ใช้รหัสและสร้างสำหรับแพลตฟอร์มเป้าหมาย - ดังนั้น มันไม่ใช่การคัดลอก / วางList<T>แต่มันอาจตัดบางสิ่งจากรหัสหรือรวมเข้ากับสิ่งเฉพาะแพลตฟอร์มและสร้างรายการการปรับใช้
Steven Evers

1

ฉันไม่คิดว่า. NET เป็นปัญหา ในขณะที่มีรันไทม์ต่าง ๆ พวกเขายังคงเข้ากันได้ซึ่งเป็นเหตุผลที่เทคโนโลยีเช่นไลบรารีคลาสแบบพกพาทำงานได้

ตัวอย่างเช่นแต่ละรสชาติไม่ควรอ้างอิงแอสเซมบลีที่ใช้ร่วมกันเดี่ยวที่เรียกว่า "System.Collections.dll" แทนที่จะเป็นแต่ละรันไทม์ที่มีสำเนา System.dll / mscorlib.dll ของตัวเองพร้อมสำเนาชุดต่างๆ

ทำไมถึงจำเป็น ตราบใดที่มันเข้ากันได้ (ดูที่ Portable Class Libraries) สิ่งนี้ไม่สำคัญเนื่องจาก BCL เป็นส่วนหนึ่งของรันไทม์ของตัวเองและกระจายไปตามกัน


ฉันจะไม่สามารถเขียนคลาสที่ใช้List<T>และรันบนแพลตฟอร์มใด ๆ โดยไม่ต้องสร้างไลบรารีแบบพกพาได้หรือไม่ หรือไม่ควรList<T>อยู่ในห้องสมุดแบบพกพา ห้องสมุดแบบพกพาให้ความรู้สึกเหมือนเป็นวิธีแก้ปัญหาแทนที่จะเป็นส่วนหนึ่งของการออกแบบที่หรูหรา
Paul Stovell

1

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

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