2010-05-10 113 views
1

這是一個超級新手問題,我已經編程了一段時間,但只是學習OOP。 我有一個通過C#控制檯與用戶輸入一起工作的類。
這個類有不同的方法來收集不同的輸入集。課堂設計問題

我有另一個接受這些輸入集並將它們放入數據庫的類。
將輸入類的輸入傳遞給我的數據庫插入類的最佳方式是什麼?

我的猜測是:

這有什麼不對的,還是有更好的方式來做到這一點?我應該甚至有兩個類(數據庫類也可以接受用戶輸入)?

+0

你可以創建一個對象來表示你的數據被插入到數據庫? – 2010-05-10 20:29:36

回答

2

你應該有一個「數據」類,它代表你所有的參數。

GetParameters類應創建此類的一個實例。

您的InsertDatabase類應接受此類的一個實例。

public class Data 
{ 
    public string value1 {get;set;} 
    // add more properties here 
} 

public class GetInputParameters 
{ 
    public Data GetParameters() 
    { 
     var d = new Data(); 
     d.value1 = Console.ReadLine(); 
     return d; 
    } 
} 


public class InsertToDatabase 
{ 
    public void InsertRecord(Data value) 
    { 
     // database persistance code 
    } 
} 

此外,你可以使用一個通用的列表傳遞不止一次的數據類的實例,你可以使用一個數組,而是一個通用的清單是非常容易的工作。

+0

你還沒有告訴他如何調用'InsertRecord.'另外,他想傳遞一組記錄,而不是單個記錄。 – 2010-05-10 20:22:45

+0

Bross:我應該爲不同的輸入集有不同的數據類嗎? @Robert Harvey:沒關係,我可以弄清楚如何將數據存入數據庫,我主要關心正確的類設計。 – sooprise 2010-05-10 20:28:27

+0

類應該是名詞/名詞短語而不是動詞/動詞短語... GetInputParameters應該是一個類中的方法。與InsertToDatabase相同。 – 2010-05-10 20:29:15

0

類型安全是我看到的第一個問題。更好的方法是使用LINQ to SQL打包數據庫,然後將業務對象傳遞給抽象的Save()和Delete()方法。這樣,實際的數據庫實現可以在理論上被替換,但是無論如何,您的業務對象肯定會有價值。

+3

他是初學者。這一切都不會對他有意義。 – 2010-05-10 20:26:39

0

至少有兩類絕對是一個好主意。你想嘗試在一個類中封裝功能。在標準的控制檯應用程序中,我建議創建一個控制檯I/O類,一個數據庫訪問類,以及一個允許它們相互交談並可能操作數據(即服務類)的類。因此,您的控制檯I/O類可能會等待數據,然後調用您的服務類來保存數據,然後服務會調用數據庫來保存數據。

+1

示例... OP是初學者。 – 2010-05-10 20:27:36

1

一般來說,我認爲將你的代碼分成不同的層是一個好主意。現在你有你的UI層(與控制檯輸入一起工作的那個層)和你的數據層(插入數據的層)。這是一個好的開始。

你收集什麼樣的數據然後插入?這可能是另一個班的很好的候選人。假設它是用戶信息,並且用戶輸入他們的姓名,年齡,性別等。無論您正在收集什麼,它都可能被打包成一個對象。然後你可以將這個對象傳遞給你的Data類。然後,數據類可以消化它需要的信息。

在你輸入類:

User user = new User(); 
//get all user info from console, assigning it to your user object 
DatabaseInsertClass.InsertIntoDatabase1(user); 
+0

這是我目前除了,我有它的形式: DatabaseInsertClass.InsertIntoDatabase1(ConsoleInterface.GetData()); 將ConsoleInterface.GetData()的輸出分配給一個對象,然後將該對象傳遞到DatabaseInsertClass.InsertIntoDatabase1()是一個好習慣: User user = new User(); user = ConsoleInterface.GetData(); DatabaseInsertClass.InsertIntoDatabase1(user); – sooprise 2010-05-10 21:08:37

+0

@Soo:你可以這樣做。將GetData中的數據首先放入其自己的'user'變量中的好處是,您可以在調試過程中檢查'user'變量的內容。如果您將'GetData()'的輸出直接傳遞到''InsertIntoDatabase()''方法中,那麼您無法輕鬆做到這一點。 – 2010-05-10 21:17:14

+0

@Soo:將'user'變量添加到代碼中可以更容易地找出代碼中正在發生的事情,因爲它使讀者瞭解代碼的內容。 – 2010-05-10 21:19:11