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

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

7
รูปแบบกลยุทธ์สามารถดำเนินการได้โดยไม่แตกสาขาหรือไม่
รูปแบบกลยุทธ์ใช้งานได้ดีเพื่อหลีกเลี่ยงขนาดใหญ่หาก ... สร้างและทำให้ง่ายต่อการเพิ่มหรือแทนที่ฟังก์ชั่น อย่างไรก็ตามมันยังคงมีข้อบกพร่องหนึ่งในความคิดของฉัน ดูเหมือนว่าในการดำเนินการทุกครั้งยังคงต้องมีการสร้างการแยกทาง อาจเป็นไฟล์จากโรงงานหรือไฟล์ข้อมูล เป็นตัวอย่างใช้ระบบการสั่งซื้อ โรงงาน: // All of these classes implement OrderStrategy switch (orderType) { case NEW_ORDER: return new NewOrder(); case CANCELLATION: return new Cancellation(); case RETURN: return new Return(); } รหัสหลังจากนี้ไม่จำเป็นต้องกังวลและมีเพียงที่เดียวที่จะเพิ่มประเภทคำสั่งซื้อใหม่ในขณะนี้ แต่ส่วนของรหัสนี้ยังไม่สามารถขยายได้ การดึงออกมาเป็นไฟล์ข้อมูลช่วยให้อ่านง่ายขึ้น (ฉันรู้ว่าเป็นที่ถกเถียงกัน): <strategies> <order type="NEW_ORDER">com.company.NewOrder</order> <order type="CANCELLATION">com.company.Cancellation</order> <order type="RETURN">com.company.Return</order> </strategies> แต่สิ่งนี้ยังคงเพิ่มรหัสสำเร็จรูปในการประมวลผลไฟล์ข้อมูล - รับได้ง่ายขึ้นหน่วยทดสอบและรหัสที่ค่อนข้างเสถียร แต่ความซับซ้อนเพิ่มเติม …

5
คุณจะจัดการเวอร์ชันในโครงการหลายด้านได้อย่างไร
ฉันรู้ว่ามันเป็นคำถามกว้าง ๆ ดังนั้นฉันจะพยายามเจาะจงให้มากที่สุดเท่าที่จะทำได้ คำถามนี้เป็นคำถาม "องค์กร" มากกว่าคำถามทางเทคนิค เรามีโครงการหลายด้านที่มีองค์ประกอบหลักเหล่านี้: เซิร์ฟเวอร์ที่โฮสต์ตรรกะทางธุรกิจหลัก (ตัวแบบข้อมูล) BackOffice สำหรับลูกค้าที่ใช้ตรรกะทางธุรกิจหลัก แอปพลิเคชัน API (REST) ​​ซึ่งใช้ตรรกะทางธุรกิจหลักเช่นกัน มีแอพสมาร์ทโฟน (iOS และ Android) โดยใช้แอปพลิเคชัน API มีแอปแท็บเล็ตอีกแอนดรอยด์ที่แตกต่างจากสมาร์ทโฟนที่ใช้แอปพลิเคชัน API เดียวกัน เร็ว ๆ นี้ฉันจะอยู่ในการผลิตกับลูกค้าที่ใช้งานอยู่ และเป็นโครงการใด ๆ ฉันจะต้องบำรุงรักษาส่วนประกอบต่าง ๆ ทั้งหมดในช่วงเวลา นั่นหมายความว่าสามารถอัปเกรดทั้งหมดต่อไปนี้: รหัสของตรรกะทางธุรกิจหลักในเซิร์ฟเวอร์ (ใช้โดย back-office, API และผลข้างเคียงจากแอปมือถือ) API เอง (ใช้ทั้งแอพสมาร์ทโฟนและแท็บเล็ต) แอพมือถือทั้งหมด (ผ่าน appstore / googleplay) แน่นอนส่วนฝั่งเซิร์ฟเวอร์ (รหัสตรรกะทางธุรกิจหลักและรหัส API) สามารถเปลี่ยนแปลงได้ทันทีด้วยตัวเอง …

2
สแต็กขยาย LinkedList การละเมิดหลักการทดแทน Liskov หรือไม่?
คลาส LinkedList มีอยู่พร้อมกับฟังก์ชั่นเช่น add_first (), add_last (), add_after (), remove_first (), remove_last () และ remove () ขณะนี้มีคลาสสแต็กที่จัดเตรียมฟังก์ชันการใช้งานเช่น push (), pop (), peek () หรือ top () และเพื่อใช้เมธอดเหล่านี้จะขยายเมธอดคลาส LinkedList นี่เป็นการละเมิดหลักการทดแทนของ Liskov หรือไม่? ตัวอย่างเช่นพิจารณา case add_after () เพื่อเพิ่มโหนดที่ตำแหน่งที่ n ของรายการที่เชื่อมโยง สามารถทำได้ในคลาสพื้นฐาน แต่ไม่สามารถอยู่ในคลาสสแต็กได้ postconditions ถูกทำให้อ่อนลงที่นี่หรือคุณปรับเปลี่ยนวิธี add_after () เพื่อเพิ่มไปยังด้านบนสุดของสแต็กหรือไม่ นอกจากนี้หากไม่เป็นการละเมิดการออกแบบที่ไม่ดีนี้เป็นอย่างไร และคุณจะใช้ฟังก์ชั่น Stack โดยใช้คลาส LinkedList …

3
หนึ่งควรจัดการค่าคงที่ในหลายภาษาได้อย่างไร?
ฉันมีสถานการณ์ที่ฉันสนับสนุนสิ่งที่เป็นหน้าที่ของไลบรารีเดียวกันในหลายภาษา มักจะมีค่าคงที่ที่ต้องใช้ร่วมกันระหว่างเหล่านี้ (ตัวอย่างเช่นคีย์ชื่อเขตข้อมูล json หรือรหัสข้อผิดพลาด) วิธีที่ฉันทำอยู่ในขณะนี้คือการให้รหัสกำหนดค่าคงที่ในแต่ละภาษา ปัญหาเกิดขึ้นในการบำรุงรักษา หากฉันเพิ่มรหัสข้อผิดพลาดใหม่ฉันต้องอัปเดตในทุกไลบรารีด้วยตนเอง ในขณะนี้ใช้ได้สำหรับบางมันกลายเป็นน่าเบื่อถ้าฉันพูด 5 sdks เพื่อปรับปรุง มันคงจะดีถ้ามีแหล่งความจริงแหล่งเดียวสำหรับสิ่งเหล่านี้เช่นกัน ฉันคิดเกี่ยวกับการจัดเรียงของการตั้งค่าเหมือนบางไฟล์ แต่แล้วก็จะต้องมีการรวมอยู่ในทุกแพคเกจการใช้งานซึ่งจะเพิ่มความซับซ้อนในการสร้างกระบวนการ / การเปิดตัวของเรา มีวิธีที่ดีกว่าในการจัดการค่าคงที่ซึ่งใช้ร่วมกันระหว่างหลายภาษาหรือไม่
13 design  packages 

6
ทำความสะอาดวิธีการทำแผนที่ OOP วัตถุไปยังผู้นำเสนอ
ฉันกำลังสร้างเกมกระดาน (เช่นหมากรุก) ใน Java ซึ่งแต่ละชิ้นเป็นชนิดของตัวเอง (เช่นPawn, Rookฯลฯ ) สำหรับส่วน GUI ของแอปพลิเคชันฉันต้องการรูปภาพสำหรับแต่ละส่วนเหล่านี้ ตั้งแต่ทำไปคิดเหมือน rook.image(); ละเมิดการแยก UI และตรรกะทางธุรกิจฉันจะสร้างผู้นำเสนอที่แตกต่างกันสำหรับแต่ละชิ้นแล้วแมปประเภทชิ้นส่วนกับผู้นำเสนอที่สอดคล้องกันเช่น private HashMap<Class<Piece>, PiecePresenter> presenters = ... public Image getImage(Piece piece) { return presenters.get(piece.getClass()).image(); } จนถึงตอนนี้ดีมาก อย่างไรก็ตามฉันรู้สึกว่าปรมาจารย์ OOP ที่ชาญฉลาดจะขมวดคิ้วเมื่อเรียกgetClass()วิธีการและแนะนำให้ใช้ผู้เยี่ยมชมเช่นนี้: class Rook extends Piece { @Override public <T> T accept(PieceVisitor<T> visitor) { return visitor.visitRook(this); } } …

8
ทีมแย่งชิงไม่ปฏิบัติตามหลักการ YAGNI
ในการประชุม SCRUM ทีมผลิตภัณฑ์กำลังถกเถียงกันเกี่ยวกับคุณลักษณะบน API ที่แอพมือถือจะถูกใช้งาน เรามีการจำลองที่แสดงให้เห็นว่าหน้าจอควรมีลักษณะอย่างไรและองค์ประกอบสำคัญที่ควรมี ("รูปแบบ") จากสิ่งนี้และการสนทนาที่ฉันมีกับเจ้าของผลิตภัณฑ์ฉันสร้างต้นแบบสำหรับการตอบกลับ API (HAL + JSON) มันง่ายมาก JSON ที่สอดคล้องกับ HAL ซึ่งไม่ได้ทำอะไรมากไปกว่าการเป็นตัวแทนของสิ่งที่อยู่ในการจำลอง ฉันไม่ได้รับอิทธิพลจากความคิดในอนาคตที่นักธุรกิจเล็งเห็นเนื่องจากพวกเขามีแนวโน้มที่จะเปลี่ยนความคิดของพวกเขาบ่อยครั้งและฉันตัดสินใจที่จะใช้วิธีการที่เรียบง่าย ข้อเสนอของฉันถูกปฏิเสธโดยทีมงานและฉันได้รับคะแนนมากกว่า 7 ต่อ 1 ทีมตัดสินใจที่จะใช้โครงสร้าง json เชิงนามธรรมที่ซับซ้อนและไม่ใช่ความหมายซึ่งช่วยให้มีความยืดหยุ่นมากขึ้นในการจัดเรียงเค้าโครง ข้อเสียของวิธีการนี้คือเราได้ชุดวัตถุที่เหมือนกันซึ่งอาจมีคุณสมบัติเป็นโมฆะและว่างเปล่าโดยการออกแบบ พวกเขายังคิดว่ามันจะเป็นการดีที่จะทำการทดสอบ A / B แต่มันก็ขึ้นอยู่กับการคาดการณ์ของพวกเขาเท่านั้นเนื่องจากเราไม่มีข้อกำหนดดังกล่าว เวลาส่วนใหญ่ที่เราถกเถียงกันเกี่ยวกับสิ่งที่ไม่ได้เป็นส่วนหนึ่งของการวิ่งหรือไม่ได้กล่าวถึงในการจำลอง ปัญหาที่อธิบายไว้คือ "จะเกิดอะไรขึ้นถ้าการตลาดในอนาคตจะ ... ", "จะเกิดอะไรขึ้นถ้าธุรกิจอาจต้องการให้เรา ... " ฉันและเจ้าของผลิตภัณฑ์เป็นโปรแกรมเมอร์ที่มีประสบการณ์และเราเคยเห็นปัญหาแบบนี้มาแล้วในอดีต เราพยายามที่จะปฏิบัติตามหลักการYAGNIและKISS ส่วนที่เหลือของทีมมีประสบการณ์น้อยลงและถึงแม้ว่าพวกเขารู้หลักการเหล่านี้พวกเขาดูเหมือนจะไม่เข้าใจพวกเขา เราเห็นด้วยกับวิธีแก้ปัญหาของพวกเขาเนื่องจากทีมโดยรวมมีความสำคัญมากกว่าสำหรับเราและเราไม่ต้องการต่อสู้กับบางสิ่งที่ไม่สำคัญ แต่ฉันกลัวว่าสิ่งนั้นจะกลายเป็นแบบอย่างสำหรับการโต้วาทีและการอภิปรายที่ซับซ้อนมากขึ้น? วิธีจัดการกับพฤติกรรมเช่นนี้? มีอะไรบ้างที่ฉันในฐานะหัวหน้าทีมสามารถทำได้ดีกว่า เป็นมูลค่าการกล่าวขวัญว่าผลิตภัณฑ์นี้เป็น MVP ขั้นต้น

3
ด้วยเหตุผลใดบ้างที่คุณจะใช้ส่วนขยายคลาสแยกต่างหากสำหรับตัวแทนแต่ละคนใน Swift
ฉันทำงานผ่านการสอนของ Ray Wenderlich และสังเกตว่าผู้เขียนใช้ส่วนขยายคลาสเพื่อระงับการโทรกลับแทนที่จะมอบหมายให้จัดการในคลาสเองเช่น: มอบหมาย callback ภายในส่วนขยายของชั้นเรียน: extension LogsViewController : UIPopoverPresentationControllerDelegate { func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle { ... } } ตรงข้ามกับการมีอยู่ในชั้นเรียน: มอบหมายการเรียกกลับภายในชั้นเรียน: class LogsViewController : UITableViewController, UIPopoverPresentationControllerDelegate { func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle { ... } } ฉันพบสิ่งนี้แปลกและน่าสนใจในเวลาเดียวกัน เขามีไฟล์เฉพาะสำหรับการขยายในคลาส LogsViewController ชื่อ "LogsViewControllerExtension.swift" และมีส่วนขยายที่แตกต่างกันสำหรับแต่ละโพรโทคอลของผู้แทน: UITableViewDataSource, UISplitViewDelegate …

3
วิธีการวาดความสนใจของโปรแกรมเมอร์ในเงื่อนไขบางอย่าง?
เริ่มจากตัวอย่างกันก่อน สมมติว่าฉันมีวิธีที่เรียกexportว่าขึ้นอยู่กับ schema DB อย่างมาก และโดย“ พึ่งพาหนัก” ฉันหมายถึงฉันรู้ว่าการเพิ่มคอลัมน์ใหม่ในตารางหนึ่งบ่อยครั้ง (บ่อยครั้งมาก) จะนำไปสู่exportการเปลี่ยนแปลงวิธีการที่สอดคล้องกัน(โดยปกติแล้วคุณควรเพิ่มเขตข้อมูลใหม่ลงในข้อมูลการส่งออกด้วย) โปรแกรมเมอร์มักจะลืมที่จะเปลี่ยนexportวิธีการเพราะมันไม่ชัดเจนจริงๆคุณควรดูที่นี้ เป้าหมายของฉันคือการบังคับให้โปรแกรมเมอร์ตัดสินใจอย่างชัดเจนเพื่อตัดสินว่าเขาลืมดูexportวิธีการหรือไม่ต้องการเพิ่มเขตข้อมูลลงในข้อมูลการส่งออก และฉันกำลังมองหาโซลูชันการออกแบบสำหรับปัญหานี้ ฉันมีสองแนวคิด แต่ทั้งคู่มีข้อบกพร่อง เสื้อคลุม "อ่านทั้งหมด" สมาร์ท ฉันสามารถสร้าง wrapper อัจฉริยะที่ทำให้แน่ใจว่าข้อมูลทั้งหมดอ่านอย่างชัดเจน บางสิ่งเช่นนี้ def export(): checker = AllReadChecker.new(table_row) name = checker.get('name') surname = checker.get('surname') checker.ignore('age') # explicitly ignore the "age" field result = [name, surname] # or whatever checker.check_now() # check …

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

3
วิธีการเก็บรักษาอาร์กิวเมนต์นับเป็นวิธีที่ต่ำและยังคงแยกการพึ่งพาของบุคคลที่สามได้อย่างไร
ฉันใช้ห้องสมุดบุคคลที่สาม พวกเขาส่งPOJOให้ฉันซึ่งอาจนำไปใช้ในจุดประสงค์และวัตถุประสงค์ของเราเช่นนี้: public class OurData { private String foo; private String bar; private String baz; private String quux; // A lot more than this // IMPORTANT: NOTE THAT THIS IS A PACKAGE PRIVATE CONSTRUCTOR OurData(/* I don't know what they do */) { // some stuff } public String getFoo() …

4
Rails: กฎแห่งความสับสนของ Demeter
ฉันกำลังอ่านหนังสือชื่อ Rails AntiPatterns และพวกเขาคุยกันเรื่องการใช้การมอบหมายเพื่อหลีกเลี่ยงการทำผิดกฎของ Demeter นี่คือตัวอย่างสำคัญของพวกเขา: พวกเขาเชื่อว่าการโทรแบบนี้ในคอนโทรลเลอร์ไม่ดี (และฉันเห็นด้วย) @street = @invoice.customer.address.street ทางออกที่เสนอของพวกเขาคือทำสิ่งต่อไปนี้: class Customer has_one :address belongs_to :invoice def street address.street end end class Invoice has_one :customer def customer_street customer.street end end @street = @invoice.customer_street พวกเขากำลังระบุว่าเนื่องจากคุณใช้เพียงจุดเดียวคุณจะไม่ละเมิดกฎของ Demeter ที่นี่ ฉันคิดว่านี่ไม่ถูกต้องเพราะคุณยังคงต้องผ่านลูกค้าเพื่อผ่านที่อยู่เพื่อรับถนนใบแจ้งหนี้ ฉันได้รับแนวคิดนี้จากโพสต์บล็อกที่ฉันอ่านเป็นหลัก: http://www.dan-manges.com/blog/37 ในบล็อกโพสต์ตัวอย่างสำคัญคือ class Wallet attr_accessor :cash end class Customer has_one …

5
เมื่อใดควรใช้ฐานข้อมูลมากกว่าการแยกวิเคราะห์ข้อมูลจากไฟล์ข้อความ
ผมทำโปรแกรมหลามในการวัดการเจริญเติบโตของcodereview.SE วิธีการของฉันคือการได้รับ "สถิติเว็บไซต์" ที่แสดงในหน้าแรกและเก็บไว้ในฮาร์ดไดรฟ์ของฉัน ฉันวางแผนที่จะทำสิ่งนี้ทุกวัน จนถึงตอนนี้ฉันได้ทำพอที่จะรับสถิติและผนวกเข้ากับไฟล์ข้อความ สคริปต์หลามสามารถดูได้บนGitHub รูปแบบที่ฉันใช้มีดังต่อไปนี้ 22-08-2013 questions 9073 answers 15326 answered 88 users 26102 visitors/day 7407 22-08-2013 questions 9073 answers 15326 answered 88 users 26102 visitors/day 7407 ฉันเพิ่งรันสคริปต์สองครั้งเพื่อให้ได้รูปแบบที่ฉันต้องการใช้ในไฟล์ ตอนแรกมันดูดีสำหรับฉันเพราะฉันจะเก็บมันเองและรูปแบบจะเหมือนกันดังนั้นจึงสามารถแยกวิเคราะห์ได้ง่าย แต่ฉันไม่แน่ใจ ดูเหมือนว่าการใช้ฐานข้อมูลควรจะดีกว่าที่นี่เพราะวิธีการดึงข้อมูลควรง่ายกว่า แค่ทราบว่าฉันไม่เคยใช้ฐานข้อมูลใด ๆ และไม่มีความรู้เกี่ยวกับ SQL, MySQL หรือตัวแปรอื่น ๆ ของ RDBMS ดังนั้นสิ่งนี้นำมาสู่คำถาม เมื่อใดที่ฐานข้อมูลควรเป็นที่ต้องการสำหรับการจัดเก็บข้อมูลมากกว่าการจัดเก็บข้อมูลในไฟล์ข้อความ? มีตัวชี้บางอย่างที่ฉันสามารถค้นหาได้เมื่อตัดสินใจว่าต้องใช้ฐานข้อมูลหรือไฟล์ข้อความธรรมดาหรือไม่? PS: ถ้าสามารถเพิ่มแท็กที่ดีกว่าได้โปรดทำเช่นนั้น ฉันมีข้อสงสัยเกี่ยวกับแท็กที่สามารถเพิ่มได้

4
ตารางเฉพาะเหล่านี้ต้องการคีย์ตัวแทนหรือไม่
พื้นหลัง ฉันมีตารางนี้ +-------------------------+ +------------------------+ |Airport | |Country | |-------------------------| |------------------------| |airport_code string (PK) | |country_code string (PK)| |address string | |name string | |name string | +------------------------+ +-------------------------+ +-------------------------+ |Currency | |-------------------------| |currency_code string (PK)| |name string | +-------------------------+ airport_codeเป็นรหัสสนามบินIATA (สมาคมการขนส่งทางอากาศระหว่างประเทศ) คุณสามารถดูได้ในแท็กกระเป๋าของคุณเมื่อคุณเดินทางโดยเครื่องบิน country_codeคือรหัสประเทศมาตรฐาน ISO 3166-1 A3คุณสามารถดูได้ในโอลิมปิก currency_codeคือรหัสสกุลเงิน 3 ตัวอักษรมาตรฐาน IS0 …

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

2
ข้อดีและข้อเสียของการสร้างโค้ดทั้งหมดผ่านคลาสและคอมไพล์ไปยังคลาส (เช่น Java)
แก้ไข: ภาษาของฉันอนุญาตให้มีการสืบทอดหลายครั้งซึ่งแตกต่างจาก Java ฉันเริ่มออกแบบและพัฒนาภาษาโปรแกรมของฉันเองเพื่อวัตถุประสงค์ด้านการศึกษาการพักผ่อนหย่อนใจและอาจเป็นประโยชน์ ตอนแรกฉันตัดสินใจที่จะปิด Java นี่หมายความว่ารหัสทั้งหมดจะถูกเขียนในรูปแบบของคลาสและรหัสนั้นคอมไพล์ลงในคลาสซึ่งโหลดโดย VM อย่างไรก็ตามฉันได้ยกเว้นคุณสมบัติเช่นอินเทอร์เฟซและคลาสนามธรรมเพราะฉันไม่ต้องการมัน ดูเหมือนว่าพวกเขาจะบังคับกระบวนทัศน์และฉันต้องการให้ภาษาของฉันไม่ทำเช่นนั้น ฉันต้องการให้ชั้นเรียนเป็นหน่วยการรวบรวมเพราะดูเหมือนว่าจะสะดวกในการติดตั้งคุ้นเคยและฉันชอบความคิด จากนั้นฉันสังเกตเห็นว่าโดยทั่วไปแล้วฉันจะเหลืออยู่กับระบบโมดูลซึ่งสามารถใช้คลาสเป็น "เนมสเปซ" ได้โดยให้ค่าคงที่และฟังก์ชันโดยใช้staticคำสั่งหรือเป็นเทมเพลตสำหรับวัตถุที่ต้องมีอินสแตนซ์ ในภาษาอื่น ๆ ) ตอนนี้ฉันก็ยังสงสัยว่าอะไรคือ Upside และ Downside ของการมีคลาสเป็นหน่วยการคอมไพล์ นอกจากนี้ความเห็นทั่วไปเกี่ยวกับการออกแบบของฉันก็จะได้รับการชื่นชมมาก โพสต์ข้อมูลเกี่ยวกับภาษาของฉันสามารถพบได้ที่นี่: http://www.yannbane.com/2012/12/kava.html

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