2011-01-24 94 views
2

我有這樣這些類/方法應該去哪裏?

WebUI中項目的結構 - 控制器,視圖 框架以項目庫,服務層和域

所以現在我有3種方法/班

  1. 開放ID /打開auth

起初我以爲我會把我所有的邏輯放在我的框架項目的服務層中(準備請求,檢查響應等)應該在這一層)。

所以,現在我使用的是dotnetopenauth庫,因爲我需要使用AsActionResult方法在我的控制器(我返回從我的服務層「OutgoingWebResponse」,因爲我不希望任何MVC在我服務層)

當我決定在我的服務層中沒有任何MVC時,它讓我思考。正如我讀到的是,你的服務層包含你的業務邏輯不應該有像MVC引用的任何依賴,因爲如果你去一個Windows Phone應用程序,你不應該使用MVC的東西。

您的業務層應該是即插即用的任何應用程序。

因此,現在我不確定是否應該將我爲openId編寫的代碼放入my MVC項目中的模型文件夾中,原因如上所述。因爲如果我確實去了Windows Phone應用程序或表單應用程序,我不會使用dotnetopenauth,因爲我認爲它們在這些類型的應用程序中不受支持。

  1. 我的第二個是與窗體身份驗證。再次與上述幾乎相同的原因。這應該在我的模型文件夾中作爲本地服務/回購層(即在同一個項目文件中)。

  2. 我使用nhibernate,流利的nhiberate和ninject。我的回購都在我的框架項目中。所以我當然有所有的參考。但是因爲我使用ninject進行ioc,所以我的webui項目中也有所有的引用。

我不知道如果這一個可以改變擺脫這些引用從我的webui。我想不是因爲他們我不能在我的webui中擁有我認爲應該去的ioc。

回答

0

作爲一般的經驗法則,您不應該針對不存在的要求編寫代碼(將應用程序移植到Windows Phone)。

通常情況下,您可以在服務層中將其抽象出來,但由於OA依賴於http並能夠訪問身份驗證站點,因此OAuth或Facebook集成存在問題。

你會遇到的問題,因爲「all abstractions are leaky」是你的服務層將被openauth註冊過程以某種方式損壞,無論你放置在哪裏。有關用戶註冊和登錄的詳細信息,比如他們的openid網址將在您的數據庫中結束。你是service/repo/db/model/mvc/viewmodel/controllers類都會知道openauth是什麼,因爲它的本質。

好處是這些基於瀏覽器的身份驗證策略可以存在於Windows窗體,WPF或Silverlight應用程序中。您只需在應用程序內部打開瀏覽器,而不是使用MVC本地重定向。

所以我建議將您的dotnetopen auth註冊代碼放在您的服務層中,並實際抽象出重定向和回調過程是如何發生的。

喜歡的東西:

public interface IOpenAuthRedirect 
{ 
     public void Redirect(url) 
     public void ParseCallback(url) 
} 


public class MVCOpenAuthRedirect 
{ 
    public void Redirect(url) 
    { 
     HttpContext.Current.Response.Redirect(url); 
    } 
} 

public class SilverlightOpenAuthRedirect 
{ 
    public void RedirectUrl(url) 
    { 
     SomeBrowserControl.IForgetTheCallToRedirect(url); 
    } 

} 

現在不同的實現細節是靈活的,你可以很容易地過渡到MVC之外的另一個平臺。