วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

3
วิธีการแสดง / อธิบายใบอนุญาตสำหรับรหัสในบล็อก
สมมติว่าฉันมีบล็อกอยู่ภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์ ใบอนุญาตประเภทนั้นจะปรากฏที่ด้านล่างของแต่ละหน้าพร้อมลิงก์ไปยังใบอนุญาตจริง ฯลฯ อย่างไรก็ตามเห็นได้ชัดว่าใบอนุญาต Creative Commons ไม่เหมาะสำหรับซอฟต์แวร์หรือการแจกจ่ายซอร์สโค้ดดังนั้นอะไรเกี่ยวกับรหัสใด ๆ (เช่นส่วนย่อย / ส่วนหรือโปรแกรมเต็มรูปแบบ) ที่สามารถเป็นส่วนหนึ่งของการโพสต์บล็อก? ถ้าฉันเลือกที่จะปล่อยรหัสนี้เป็น GPLv3 มันจะเป็นที่ยอมรับและชัดเจนพอที่จะพูดได้ที่ด้านล่างของหน้าสิ่งที่ชอบ: " Mr. Foo เว็บไซต์นี้เผยแพร่ภายใต้ Creative Commons blah blah ยกเว้น ซอร์สโค้ดในรูปแบบของตัวอย่างโค้ด / แฟรกเมนต์ / ตัวอย่างซึ่งเผยแพร่ภายใต้ GPLv3 "? หรือมีวิธีที่ดีกว่า / แตกต่าง / เป็นทางการมากขึ้นในการชี้แจงสถานการณ์ดังกล่าวหรือไม่

2
ตัวระบุเทียบกับวัตถุโดเมนเป็นพารามิเตอร์วิธีการ
มีข้อโต้แย้งวัตถุประสงค์สำหรับหรือต่อต้านการใช้วัตถุกับ ID ที่ไม่ซ้ำกันเป็นพารามิเตอร์วิธีการ / ฟังก์ชั่น? (และสมาชิกของวัตถุอื่น ๆ ?) เป็นพิเศษในบริบทของภาษาที่พิมพ์แบบคงที่ (C # / Java / Scala) ข้อดีของวัตถุเอง: โทร typesafe เพิ่มเติม ด้วย IDs มีความเสี่ยงในการเรียงลำดับอาร์กิวเมนต์อย่างไม่ถูกต้อง สิ่งนี้สามารถบรรเทาได้ด้วยการรักษาคลาส 'มินิ' สำหรับแต่ละคลาสที่เก็บ ID ของคลาสนั้นเท่านั้น รับเพียงครั้งเดียวจากการคงอยู่ไม่จำเป็นต้องกลับมาอีก ด้วย ID หากการเปลี่ยนแปลงประเภท id บอกว่า int -> long จะต้องมีการเปลี่ยนแปลงทั่วกระดานโดยอาจเกิดข้อผิดพลาด .. (courtey: https://softwareengineering.stackexchange.com/a/284734/145808 ) ข้อดีของการใช้ ID: เวลาส่วนใหญ่ไม่จำเป็นต้องใช้วัตถุจริงเพียง แต่เอกลักษณ์จะทำดังนั้นการมี ID ช่วยประหยัดเวลาจากการทำให้มันคงอยู่ การผสมผสานของเทคนิคเหล่านี้เท่าที่ฉันเห็นมีเพียงข้อเสียของทั้งสองและข้อดีของทั้งสองอย่าง ระบุว่านี่เป็นปัญหาที่กำหนดไว้อย่างชัดเจนฉันหวังว่าจะมีคำตอบที่ตรงตามวัตถุประสงค์และไม่ใช่ - …

1
SQLite จะมีประโยชน์น้อยลงหรือไม่หากไม่ยอมรับการแทรกค่าที่ไม่ใช่ตัวเลขลงในคอลัมน์ตัวเลข
ใน SQLite คำสั่งต่อไปนี้จะประสบความสำเร็จและสตริงจะถูกแทรก / ปรับปรุงลงในSALARYคอลัมน์ซึ่งเป็นประเภทINTEGER: update employee set salary='TOO MUCH' where emp_id=1; โปรดทราบว่าศูนย์จะไม่ถูกแทรก / อัปเดต แต่เป็นสตริง"TOO MUCH" ที่แท้จริงดังนั้นนี่จึงไม่เกี่ยวกับการแปลงประเภทอัตโนมัติ สถานะคำถามที่พบบ่อย: นี่คือคุณสมบัติไม่ใช่ข้อผิดพลาด SQLite ใช้การพิมพ์แบบไดนามิก มันไม่บังคับใช้ข้อ จำกัด ชนิดข้อมูล สามารถแทรกข้อมูลประเภทใดก็ได้ (โดยปกติ) ลงในคอลัมน์ใดก็ได้ คุณสามารถใส่สตริงความยาวโดยพลการลงในคอลัมน์จำนวนเต็มจำนวนจุดลอยตัวในคอลัมน์บูลีนหรือวันที่ในคอลัมน์อักขระ ประเภทข้อมูลที่คุณกำหนดให้กับคอลัมน์ในคำสั่ง CREATE TABLE ไม่ได้ จำกัด ข้อมูลที่สามารถใส่ลงในคอลัมน์นั้นได้ ทุกคอลัมน์สามารถเก็บสตริงความยาวได้ตามใจชอบ (มีข้อยกเว้นหนึ่งประการ: คอลัมน์ประเภท INTEGER Primary KEY อาจเก็บไว้เป็นจำนวนเต็มแบบ 64 บิตเท่านั้นข้อผิดพลาดจะเกิดขึ้นหากคุณพยายามใส่สิ่งอื่นที่ไม่ใช่จำนวนเต็มลงในคอลัมน์ INTEGER Primary KEY) ดังนั้นพฤติกรรมนี้มีเจตนาชัดเจน แต่ฉันสงสัยว่าทำไม SQLite …
10 design  sqlite 

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

2
ฉันสามารถอัปเดตวัตถุที่แนบโดยใช้วัตถุที่แยกออกมา แต่เท่ากันได้หรือไม่
ฉันดึงข้อมูลภาพยนตร์จาก API ภายนอก ในระยะแรกฉันจะขูดภาพยนตร์แต่ละเรื่องแล้วใส่ลงในฐานข้อมูลของฉันเอง ในระยะที่สองฉันจะอัปเดตฐานข้อมูลเป็นระยะโดยใช้ API "การเปลี่ยนแปลง" ของ API ซึ่งฉันสามารถสืบค้นเพื่อดูว่าภาพยนตร์เรื่องใดที่ข้อมูลของพวกเขาเปลี่ยนไป เลเยอร์ ORM ของฉันคือ Entity-Framework คลาสภาพยนตร์มีลักษณะดังนี้: class Movie { public virtual ICollection<Language> SpokenLanguages { get; set; } public virtual ICollection<Genre> Genres { get; set; } public virtual ICollection<Keyword> Keywords { get; set; } } ปัญหาเกิดขึ้นเมื่อผมมีหนังที่ต้องมีการปรับปรุงฐานข้อมูลของฉันจะคิดว่าของวัตถุที่มีการติดตามและคนใหม่ที่ฉันได้รับจากสายการปรับปรุง API .Equals()เป็นวัตถุที่แตกต่างกันโดยไม่คำนึงถึง สิ่งนี้ทำให้เกิดปัญหาเพราะเมื่อฉันพยายามอัปเดตฐานข้อมูลด้วยภาพยนตร์ที่อัปเดตแล้วมันจะแทรกแทนการอัปเดตภาพยนตร์ที่มีอยู่ ฉันมีปัญหานี้มาก่อนด้วยภาษาและวิธีการแก้ปัญหาของฉันคือการค้นหาวัตถุภาษาที่แนบมาแยกพวกเขาออกจากบริบทย้าย PK ของพวกเขาไปยังวัตถุที่อัปเดตและแนบไปกับบริบท …

2
DDD - รวมรูทกับลูกจำนวนมาก
ฉันจะนำคำถามนี้โดยบอกว่าฉันค่อนข้างใหม่สำหรับ DDD ดังนั้นฉันอาจทำผิดพลาดพื้นฐานบางอย่างที่นี่! ฉันทำงานในโครงการที่เกี่ยวข้องกับแนวคิดของบัญชีและธุรกรรม (ในแง่การเงิน) บัญชีสามารถมีธุรกรรมจำนวนมากได้ สำหรับฉันแล้วดูเหมือนว่าบัญชีและธุรกรรมเป็นทั้งสองอย่างและบัญชีนั้นเป็นรากรวมที่มีธุรกรรมเนื่องจากไม่สามารถทำธุรกรรมได้หากไม่มีบัญชี อย่างไรก็ตามเมื่อฉันใช้รหัสนี้ฉันก็พบปัญหาทันที ในหลาย ๆ สถานการณ์มันไม่มีประโยชน์อย่างยิ่งสำหรับฉันที่จะมีรายการธุรกรรมทุกรายการในบัญชีอยู่ตลอดเวลา ฉันสนใจที่จะสามารถทำสิ่งต่าง ๆ เช่นการคำนวณยอดเงินในบัญชีและการบังคับใช้ค่าคงที่เช่นวงเงินเครดิต แต่ฉันยังต้องการที่จะสามารถทำงานกับชุดย่อยของธุรกรรมได้อย่างง่ายดาย (เช่นการแสดงรายการที่อยู่ภายในช่วงวันที่) ในกรณีหลังถ้าฉันใช้TransactionRepositoryฉันสามารถเข้าถึงวัตถุเหล่านั้นที่ฉันต้องการได้อย่างมีประสิทธิภาพโดยไม่ต้องโหลดรายการทั้งหมด (อาจมีขนาดใหญ่มาก) อย่างไรก็ตามสิ่งนี้จะช่วยให้สิ่งอื่น ๆ นอกเหนือจากบัญชีทำงานกับธุรกรรมซึ่งหมายความว่าฉันได้ทำลายแนวคิดของบัญชีเป็นรากรวม ผู้คนจัดการกับสถานการณ์เช่นนี้ได้อย่างไร คุณเพียงแค่ยอมรับความทรงจำและความหมายของประสิทธิภาพในการโหลดลูกที่มีจำนวนมากสำหรับรากรวมหรือไม่?

2
วิธีที่เหมาะสมในการลบรายการออกจากรายการที่เชื่อมโยง
ในการสัมภาษณ์ Slashdot Linus Torvalds อ้างว่า: ฉันเห็นคนจำนวนมากเกินไปที่ลบรายการที่ลิงก์แบบเอกเทศโดยติดตามรายการ "ก่อนหน้า" จากนั้นลบรายการทำสิ่งที่ชอบ ถ้า (prev) prev-> next = entry-> next; else list_head = entry-> ถัดไป; และเมื่อใดก็ตามที่ฉันเห็นรหัสเช่นนั้นฉันเพิ่งไป "คนนี้ไม่เข้าใจตัวชี้" และเป็นเรื่องธรรมดาที่ค่อนข้างเศร้า ผู้ที่เข้าใจพอยน์เตอร์เพียงใช้ "ตัวชี้ไปยังตัวชี้รายการ" และเริ่มต้นด้วยที่อยู่ของ list_head และเมื่อพวกเขาเข้าไปในรายการพวกเขาสามารถลบรายการโดยไม่ต้องใช้เงื่อนไขใด ๆ เพียงแค่ทำ "* pp = entry-> next" ในฐานะนักพัฒนา PHP ฉันไม่ได้สัมผัสพอยน์เตอร์ตั้งแต่รู้เบื้องต้นเกี่ยวกับ Cในมหาวิทยาลัยเมื่อสิบปีก่อน อย่างไรก็ตามฉันรู้สึกว่านี่เป็นสถานการณ์ประเภทที่ฉันควรทำความคุ้นเคยเป็นอย่างน้อย Linus กำลังพูดถึงอะไร ความจริงแล้วถ้าฉันถูกขอให้นำลิสต์ที่เชื่อมโยงและนำไอเท็มออกวิธีที่ 'ผิด' ข้างต้นเป็นวิธีที่ฉันจะทำ ฉันต้องรู้อะไรบ้างในการเขียนโปรแกรมเนื่องจาก Linus บอกว่าดีที่สุด ฉันถามที่นี่มากกว่า Stack …
10 pointers 

2
ฉันจะทดสอบอัลกอริทึมฮิวริสติกได้อย่างไร
สมมติว่าเรามีอัลกอริทึมการค้นหาเส้นทางของเรา: def myHeuristicTSP(graph): /*implementation*/ return route ตอนนี้เราต้องการทดสอบหน่วยนี้: class TestMyHeuristicTSP: def testNullGraphRaiseValueError(self): self.assertRaises(ValueError, myHueristicTSP(None)) def testSimpleTwoNodeGraphReturnsRoute: self.assertEquals(expectedResult, myHeuristicTSP(input)) คำถามคือสำหรับอัลกอริทึม TSP ที่ไม่ใช่การแก้ปัญหาเราสามารถให้กราฟที่หลากหลายและตรวจสอบว่าพวกเขากลับเส้นทางที่สั้นที่สุดเสมอ แต่เนื่องจากอัลกอริทึมฮิวริสติกในขณะที่ยังคงสามารถกำหนดค่าได้คาดเดาได้น้อยกว่านั้นมีความหมายเพียงเพื่อให้เข้าใจว่าอัลกอริทึมนั้นใช้งานได้อย่างไรและค้นหากรณีขอบเหล่านั้นหรือไม่

2
ไม่มีปัญหาเรื่องไก่และไข่ตั้งแต่ GCC เขียนใน C ++ เอง?
ตั้งแต่ 4.8 รีลีส C ++ คอมไพเลอร์ GCC (ส่วน G ++) จะถูกเขียนไม่ได้อยู่ใน C อีกต่อไป แต่ใน C ++ ฉันมีคำถามสมมุติในเรื่องนี้ ฉันสงสัยว่าจะรวบรวมรหัส C ++ ของ GCC บนแพลตฟอร์มใหม่ที่ไม่มีคอมไพเลอร์ C ++ ได้อย่างไร แน่นอนคุณสามารถใช้ไบนารีที่สร้างไว้ล่วงหน้าซึ่งรวบรวมไว้ในเครื่องอื่น ๆ หรือคุณสามารถใช้ GCC รุ่นเก่ากว่าที่เขียนใน C และคอมไพล์เวอร์ชันปัจจุบันด้วย อย่างไรก็ตามหากไม่มีไบนารีที่สร้างไว้ล่วงหน้าแล้วและเป็นเวอร์ชั่นใหม่ล่าสุดคุณติดอยู่ใช่ไหม? ถ้าไม่มีความหมายอื่น ๆ ในสถานการณ์นี้ที่เกิดจากการสลับจาก C เป็น C ++ ของโครงการ GCC หรือไม่
10 c++  compiler  gcc 

2
ผู้ส่งเหตุการณ์ควรเป็นวัตถุทั่วไปหรือไม่
เมื่อกิจกรรมการเขียนโปรแกรมใน C # ขอแนะนำให้สร้างผู้แทนในรูปแบบของ: delegate XEventHandler(object sender, XEventArgs e); คำถามของฉันอยู่ที่อาร์กิวเมนต์แรกของผู้รับมอบสิทธิ์object sender. มันจำเป็นต้องเป็นยาสามัญobjectหรือไม่? การมีผู้ส่งเป็นประเภทobjectจะส่งผลให้เกิดรหัสคล้ายกัน val = ((ConcreteType)sender).Property; หรือยิ่ง verbose ConcreteType obj = sender as ConcreteType if (obj != null) { ... } ข้อโต้แย้งอย่างหนึ่งสำหรับผู้ส่งที่พิมพ์อย่างรุนแรงคือวัตถุอื่น ๆ สามารถส่งต่อเหตุการณ์โดยไม่ต้องกังวลเกี่ยวกับประเภท แม้ว่าสิ่งนี้อาจสมเหตุสมผลในสภาพแวดล้อม GUI แต่ฉันไม่แน่ใจว่าจะได้ประโยชน์นอก GUI หรือไม่ ถ้าคลาสของผู้ส่งเป็นที่รู้จักกันเสมอ (อย่างน้อยก็เป็นคลาสนามธรรม)? ตัวอย่างเช่นถ้าฉันกำลังดำเนินการListChangedจัดกิจกรรมในนามธรรมListชั้นและถ้าชั้นเรียนอื่น ๆ จะได้รับมรดก (เช่นLinkedList, ArrayList) มันเป็นสิทธิ์ที่จะกำหนดผู้รับมอบสิทธิ์ของฉันที่มีผู้ส่งประเภทList? delegate ListChangedEventHander(List sender, …
10 c#  event 

3
เมื่อใดที่ฟังก์ชันตรีโกณมิติที่มีอาร์กิวเมนต์องศาให้ส่งคืน -0.0
ในการสร้างฟังก์ชั่นหนุนmy_sind(d), my_cosd(d), my_tand(d)ที่ใช้ในการโต้แย้งการศึกษาระดับปริญญามากกว่าเรเดียนหนึ่งและให้การตอบแน่นอนที่หลาย 90 ผมสังเกตเห็นว่าผลที่ได้บางครั้งมากกว่า-0.00.0 my_sind( 0.0) --> 0.0 my_sind(-0.0) --> -0.0 my_sind(180.0) --> -0.0 my_sind(360.0) --> 0.0 sin()และtan()โดยทั่วไปแล้วจะส่งกลับผลลัพธ์เป็นศูนย์สัญญาณเดียวกันสำหรับสัญญาณเข้าศูนย์ที่กำหนด มันสมเหตุสมผลที่my_sin()ควรตรงกับsin()อินพุตเหล่านั้น my_sind( 0.0) alike sin( 0.0) --> 0.0 my_sind(-0.0) alike sin(-0.0) --> -0.0 คำถามคือ : สำหรับสิ่งที่จำนวนทั้งหมดnon_zero_nควร / อาจผลที่เคยกลับ-0.0สำหรับmy_sind(180*non_zero_n), my_cosd(180*n + 180), my_tand(180*non_zero_n)? มันง่ายพอที่จะเขียนโค้ดเพื่อf(-0.0)สร้าง-0.0และทำกับมันเท่านั้น ง่าย ๆ ที่สงสัยว่ามีเหตุผลใดที่จะทำให้คนอื่น ๆ f(x)ผลตอบแทน-0.0ใด ๆ อื่น ๆ …
10 c  math 

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

3
C ++: Metaprogramming ด้วย API คอมไพเลอร์มากกว่าด้วยคุณสมบัติ C ++
สิ่งนี้เริ่มต้นจากคำถาม SO แต่ฉันรู้ว่ามันค่อนข้างแปลกใหม่และตามคำอธิบายที่แท้จริงบนเว็บไซต์มันอาจจะเหมาะกว่าสำหรับ programmers.se เนื่องจากคำถามมีน้ำหนักเชิงแนวคิดจำนวนมาก ฉันได้เรียนรู้เสียงดังกังวาน LibToolingและเป็นเครื่องมือที่มีประสิทธิภาพมากที่สามารถเปิดเผย "nitty gritty" ทั้งหมดของรหัสด้วยวิธีที่เป็นมิตรกล่าวคือในทางที่เป็นความหมายและไม่ต้องเดาด้วยเช่นกัน ถ้าเสียงดังกราวสามารถรวบรวมรหัสของคุณแล้วเสียงดังกราวเป็นบางอย่างเกี่ยวกับความหมายของตัวละครทุกตัวเดียวภายในรหัสว่า ตอนนี้ให้ฉันถอยกลับสักครู่ มีปัญหาในทางปฏิบัติมากมายที่เกิดขึ้นเมื่อมีคนเข้าร่วมในเทมเพลต metaprogramming เทมเพลต C ++ (และโดยเฉพาะอย่างยิ่งเมื่อมีการใช้เทมเพลตเกินกว่าเทมเพลตเข้าไปในอาณาเขตของมาโครที่ชาญฉลาด ตามจริงแล้วสำหรับโปรแกรมเมอร์หลาย ๆ คนรวมถึงตัวเองการใช้งานเทมเพลตทั่วไปจำนวนมากก็ค่อนข้างน่ากลัวเช่นกัน ผมคิดว่าเป็นตัวอย่างที่ดีจะเป็นสตริงเวลารวบรวม นี่เป็นคำถามที่มีอายุเกินหนึ่งปีแล้ว แต่เป็นที่ชัดเจนว่า C ++ ณ ตอนนี้ไม่ได้ทำให้เป็นเรื่องง่ายสำหรับมนุษย์ปุถุชน ในขณะที่ดูตัวเลือกเหล่านี้ยังไม่เพียงพอที่จะทำให้เกิดอาการคลื่นไส้สำหรับฉัน แต่ก็ทำให้ฉันไม่มั่นใจเกี่ยวกับความสามารถในการสร้างรหัสเครื่องจักรที่มีประสิทธิภาพและมีประสิทธิภาพสูงสุดเพื่อให้เหมาะกับแอปพลิเคชันแฟนซีที่ฉันมีสำหรับซอฟต์แวร์ของฉัน ฉันหมายความว่าเรามาเจอกันคนอื่น ๆ สตริงนั้นค่อนข้างเรียบง่ายและเรียบง่าย พวกเราบางคนแค่ต้องการวิธีที่สะดวกในการปล่อยรหัสเครื่องที่มีสตริง "อบใน" อย่างมีนัยสำคัญมากกว่าที่เราจะได้รับเมื่อทำการเข้ารหัสในลักษณะที่ตรงไปตรงมา ในรหัส C ++ ของเรา ป้อน clang และ LibTooling ซึ่งแสดงแผนผังต้นไม้นามธรรม (AST) ของซอร์สโค้ดและอนุญาตให้แอปพลิเคชัน C ++ แบบกำหนดเองอย่างง่าย …

5
API พิจารณาว่าเป็น DSL ในตัวเมื่อใด
ความแตกต่างระหว่าง API และภาษาเฉพาะโดเมนแบบฝัง (DSL) คืออะไร มันเป็นเพียงไวยากรณ์ พิจารณา API เช่น OpenGL มันแตกต่างจาก DSL กราฟิกอย่างไร กล่าวอีกนัยหนึ่งถ้า API มีความซับซ้อนเพียงพอจะถือว่าเป็น DSL แบบฝังได้หรือไม่
10 api  dsl 

1
แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้ MVVM และ MVC ใน delphi Pascal
ฉันเป็นโปรแกรมเมอร์ Pascal ของ Delphi ฉันใช้ Embarcadero delphi XE ล่าสุดและฉันต้องการใช้ประโยชน์จากรูปแบบการออกแบบเช่นตัวควบคุมมุมมอง Model และ Model view view model อย่างไรก็ตามดูเหมือนว่าจะไม่มีอะไรมากบนเว็บเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดสำหรับการทำสิ่งนี้ในภาษาปาสกาล ตัวอย่างส่วนใหญ่ที่ฉันพบมีในภาษา C # และคุณสมบัติภาษาบางอย่างไม่มีอยู่ในภาษาปาสกาลซึ่งหมายความว่าฉันอาจต้องหาวิธีในการใช้คุณสมบัติเหล่านั้น ฉันกำลังพยายามปรับรหัสจากบทความนี้ที่นี่ ฉันจะระบุปัญหาที่ฉันเผชิญ ประเภทที่ทำให้เป็นโมฆะ ปาสคาลไม่มีประเภท nullable เช่น C # ดังนั้นฉันได้สร้างของตัวเอง TNullable<T> = record strict private fHasValue : boolean; fValue : T; function GetValue:T; procedure SetValue(newValue : T); public property HasValue : …

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