2012-09-20 43 views
1

嘿,我一直在用C++編程一個學期的OOP,我剛剛啓動C#。我仍然不完全明白如何將圖層彼此分開以及什麼在哪裏。從我的理解有這層:面向對象層

存儲 - >數據訪問 - >業務邏輯 - >命令處理器 - >用戶界面

現在我似乎無法瞭解每個層的責任到底是什麼..

我明白數據訪問只包含像添加,更新,刪除,查詢和方法,數據訪問不關心它插入它只是接收對象作爲參數,並做任何事情。業務邏輯是否從命令處理器發送的數據創建對象,命令處理器從用戶界面獲取數據並對其進行輸入驗證?

而且怎麼會有我發送和收到不同的命令,如查詢命令怎麼會不是一個插入命令太大的不同,因爲它需要將數據發送回..

正如你可能會告訴我相當迷茫,我一直很難找到關於這個主題的好教程。

謝謝!

編輯。

我試圖從數據訪問層查詢方法開始。我有三個子對象存儲在父類型的通用列表中。

我有不同的查詢選項,其中之一是類型。所以我需要搜索父列表並返回每個對象的數據,如果它的類型指定的話。 我的父對象有一個覆蓋的ToString()以及我的孩子,它們調用父母的ToString()將對象的所有數據都轉換爲一個字符串。我在這裏做商業邏輯職責?另外當我得到匹配我的類型的對象的列表,並嘗試迭代拋出一個調用ToString()的foreach它只會調用父ToString()我猜?

public string Lookup(Types type) 
{ 
List<Parents> search = new List<Parent>(); 


switch (type) 
{ 
case Types.TypeOne: 
{ 
search = ParentDataBase.FindAll(delegate(Child1 findChild) { 
return findChild is ChildOne; }); 

} 
break; 
case Types.TypeTwo: 
{ 
search = ParentDataBase.FindAll(delegate(Parents findChild) { 
return findChild is ChildTwo; }); 
} 
break; 
case Types.TypeThree: 
{ 
search = ParentDataBase.FindAll(delegate(Parent findChild) { 
return findChild is ChildThree; }); 
} 
break; 
} 
string results = ""; 

foreach (Parent x in search) 
{ 
results += t.ToString(); 
} 
return results; 
} 
+0

開始用MVC?那麼無論什麼是有意義的,取決於你的項目你可以創建圖層避免多餘的圖層。用你的直覺。 – DarthVader

+0

編寫一些垃圾代碼,請求某人有經驗來改變需求並查看需要將問題抽出的地方。這更多的是一個學習過程,而不是讓它第一次工作。 – nhahtdh

回答

3

問題中提出的箭頭很混亂,所以在討論期間我會改變它們。

所以只讓我把兩個鏈接都提到,當他們這樣嘗試搜索CRUDMVC架構

讓我們藉此一步步時間:

存儲 - >數據訪問

這通常是由ORM handeled。 ORM將處理數據庫訪問。

ORM加上您創建的自定義(模型)對象允許abstracted數據訪問。這看起來像這樣:

ORM將數據轉換爲數據庫或從數據庫轉換數據以使其可用。 ORM可以爲您處理CRUD操作,以便在您的代碼的其他部分中不存在查詢,更新和插入。

業務邏輯

業務邏輯通過訪問,修改和保存它與數據打交道。

業務邏輯可以訪問您的模型以完成數據的訪問和保存。

修改部分在業務邏輯中實現。

業務邏輯可以是小型,大型或其他業務運營商的組合。

我們的圖形現在的樣子:

數據庫< - ORM - >模型< - 業務邏輯

命令處理器

命令處理器上運行的業務邏輯塊,將整個系統的各個部分連接在一起,有時稱爲控制器MVC

數據庫< - ORM - >模型< - 業務邏輯< - 命令處理器

用戶界面

的用戶界面(UI)可被分爲兩個部分,數據表示和用戶輸入。

數據表示形式在MCV中稱爲視圖,負責獲取數據並使其可讀。

用戶輸入觸發指令處理器的各個部分。

總評:

               ,-> View 
Database <- ORM -> Models <- Business Logic <- Command Processor 
                   `<- User Input 
+1

您可能想要查看模型,其中只包含視圖所需的數據,可能還有一些格式化,展平,數據驗證...... – billy

+0

絕對@billy,但我們現在應該可能保持簡單;) – squirly

+0

謝謝這有助於。我試圖從數據訪問層查詢方法開始。我有三個子對象存儲在父類型的通用列表中。我有不同的查詢選項,其中之一是類型。所以我需要搜索拋出父列表並返回每個對象的數據,如果它的類型指定的話。我的父母對象有一個overwridden ToString()以及做我的孩子,它調用父母的ToString()來獲取對象的所有數據到一個字符串中。 – ThingWings