2011-01-24 1 views
2

는 내가이이러한 클래스/메소드는 어디에서 실행해야합니까?

웹 UI 프로젝트와 같은 구조를 가지고 - 그래서

가 지금은 3 가지 방법이 컨트롤러, 뷰 프레임 워크 프로젝트 - 저장소, 서비스 계층 및 도메인/클래스를

  1. 오픈 아이디/열기 처음에는

인증 난 승 등, 요청을 준비 응답을 확인하고 (내 프레임 워크 프로젝트에서 서비스 계층에 내 모든 논리를 넣어 줄 알았는데 ould이 레이어에). 그래서

지금은 dotnetopenauth 라이브러리를 사용하고 내가 내 컨트롤러에 AsActionResult 방법을 사용할 필요가 있기 때문에

(나는 내 ​​서비스 레이어에 아무것도 MVC를 원하지 않기 때문에 내 서비스 계층에서 "OutgoingWebResponse"를 반환)

내 서비스 계층에 MVC가 없기로 결정했을 때 생각 나게되었습니다. 내가 읽은 바에 따르면, 비즈니스 로직을 포함하고있는 서비스 계층은 MVC 참조와 같은 종속성을 가져서는 안된다. Windows 전화 애플리케이션으로 이동하면 MVC를 사용해서는 안되기 때문이다.

비즈니스 계층은 모든 종류의 플러그 앤 플레이 방식이어야합니다.

그래서 지금 위의 이유로 mVC 프로젝트에서 내 모델 폴더로 openId에 대해 쓴 내용을 옮겨야하는지 잘 모르겠습니다. Windows phone 응용 프로그램이나 양식 응용 프로그램으로 이동하면 dotnetopenauth를 사용하지 않을 것입니다. 응용 프로그램의 이러한 유형에서 지원되지 않는다고 생각하기 때문입니다.

  1. 내 두 번째는 양식 인증입니다. 위와 거의 같은 이유. 동일한 모델 파일 (예 : 동일한 프로젝트 파일)의 로컬 서비스/repo 계층으로 이동해야합니다.

  2. 나는 nhibernate, 유창한 nhiberate 및 ninject를 사용하고 있습니다. 내 repos는 내 프레임 워크 프로젝트에 모두 있습니다. 그래서 저는 거기에 모든 참고 문헌을 가지고 있습니다. 그러나 ioc에 ninject를 사용하고 있기 때문에 webui 프로젝트에도 모든 참조가 있습니다.

내 webui에서 이러한 참조를 제거하기 위해 변경할 수있는 단서가 없습니다. 나는 그들이 내가해야한다고 생각하는 나의 webui에 나의 ioc을 가질 수 없기 때문에 나는 생각하지 않는다.

답변

0

어림짐작으로, 존재하지 않는 요구 사항 (Windows 전화에 앱 포팅)에 대한 코드를 작성해서는 안됩니다.

일반적으로 OAuth 또는 Facebook 통합은 HTTP에 의존하고 인증 사이트를 방문 할 수 있기 때문에 서비스 레이어에서이를 추상화합니다.

"all abstractions are leaky"이 (가) 어디에 놓여 있든 상관없이 openauth 등록 프로세스에 의해 서비스 계층이 손상된다는 점에서 문제가 발생합니다. 사용자 등록 및 로그인 정보 (예 : openid url)는 데이터베이스에 저장됩니다. 서비스/repo/db/model/mvc/viewmodel/controllers 클래스는 모두 특성상 openauth가 무엇인지 알 것입니다.

좋은 점은 이러한 브라우저 기반 인증 전략이 Windows Form, WPF 또는 Silverlight 응용 프로그램에 살 수 있다는 것입니다.기본적으로 MVC로 리디렉션하는 대신 응용 프로그램 내에서 브라우저를 열면됩니다.

그래서 권하고 싶습니다. dotnetopen 인증 등록 코드를 서비스 레이어 내에 배치하고 실제로 리디렉션 및 콜백 프로세스가 어떻게 이루어지는지를 실제로 추상화하는 것이 좋습니다. 같은

뭔가 :

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 이외의 다른 플랫폼으로 전환 할 수 있습니다.