2011-11-27 41 views
0

說在紅寶石啓動時的應用程序有兩種模式:命令行模式和FILEMODE如何設計應用程序保持SOLID原則和設計模式記

當給出一個參數紅寶石myprogram input.txt中output.txt的,它會根據輸入文件中的一些命令生成一個輸出。當沒有提供任何參數時,它會向我們提供一個命令提示符。使用以下命令。

create_class_with_capacity 40 

create_student_with_marks Alex 70 

create_student_with_marks Mathew 30 

create_student_with_marks John 55 

.. 

create_student_with_marks Sylvia 70 etc... 


fail_student_roll_no 12 

=> Student with roll number 12 #{student} failed 


give_marks_to_roll_no 70 1 

=>Student with roll number 1 Alex got 70 marks 


find_all_students_with_marks 70 

=> Alex, Peter , Russell , Mark etc... 

如何設計這樣的應用程序保持RSpec,TDD,黃瓜,固體和模式的頭腦。 我直接問什麼是什麼應該是對象來設計什麼應該是一個模塊,如果適用等..?以及如何評估這裏需要測試什麼以及哪些不是?從面向對象的設計角度設計最合適的機制。

另請參閱一些書籍或博客來學習這些面向對象的設計原則和Ruby實踐。

回答

4

你是說你必須寫這個應用程序嗎?這是功課嗎?

聽起來像你正在遭受分析癱瘓。腦海中流傳着太多的流行語。

不要擔心模式,不要擔心。將問題分解爲小塊並開始編寫一些代碼。

我所做的一個建議是保持I/O不在我們的課堂。把所有與基類中的用戶交互無關的邏輯。這樣,如果您被要求創建基於Web的用戶界面來替換您的文本版本,他們仍然可以工作。

需要測試什麼?所有你認爲可能會破壞的代碼。

面向對象設計的最合適的方法是什麼?做明顯的事情:名詞是你的問題陳述中的潛在對象,動詞是潛在的方法。

以下是我看到的一些潛在對象:學生,課程,卷。

以下是一些潛在的方法:學生和課程的CRUD操作;設置成績並將學生標記爲失敗。

這並不複雜。認爲「簡單」並找到一些工作,然後進行改進。

UPDATE:

這將會是比較容易回答你,如果你能描述你做了什麼。

如果這是我認爲的家庭作業問題,我懷疑這會產生多大的影響。我們不是猜測,而是爲什麼你不讀SOLID,開始研究你創建的類,問問你自己是否符合這些原則。

模式?被高估。不要擔心他們。

+0

我已經編寫了這個應用程序,但可能它在設計原則上並不正確,我只是想找一些線索來說明如何在更多的OOP時尚設計和遵循固體原則和編寫測試中進行設計。評估測試什麼,測試什麼以及測試哪些模式是非常困難的。什麼是對象,什麼是單身等... – pankajdoharey

+0

不,這是在預先就業面試問題集中詢問的問題。 UPDATE:確定我所做的就是,在運行時我發現ARGV是否提供或沒有,然後我做了一個模塊,該模塊有一個需要被實現爲方法的所有命令說: create_class_with_capacity 40 這是一個以學生爲參數的方法, 當處於交互模式時,我評估給定給REPL循環的輸入,在文件模式下,我讀取數組中的所有命令並單獨評估命令。 – pankajdoharey

+0

在任何情況下,模塊都被稱爲交互式和文件模式兩個類別。因此所有命令都成爲了給定場景的實例方法。另外每個學生都是散列內部的開放結構。 Struct被選爲方便之類,如**@student.marks,@ student.status,@ student.subjects **等...... – pankajdoharey