2010-11-28 4 views
0

난 당신이 데이터베이스와 거래를하지 않는 몇 가지 방법이 있다는 것을 알 수 있습니다 내 사용자 서비스서비스 레이어가 데이터베이스를 다루지 않는 메소드를 가지는 것은 나쁜 습관입니까?

Public Interface IUserService 
    Sub AddUser(ByVal claimedidentifier As String, ByVal notes As String) 
    Function GetAllUsers() As IList(Of User) 
    Function GetUserByID(ByVal id As Integer) As User 
    Sub UpdateUser(ByVal user As User) 
    Sub SubmitChanges() 

    ''# Below are methods that do not require database calls. 
    Function GetUserIPAddress() As String 
    Function GetUserBrowser() As String 
    Function GetUserOperatingSystem() As String 
    Function GetUserSubDomain() As String 
End Interface 

를 다음 방법을 아래에있어,하지만 난이 사용하기에 좋은 장소라고 생각 그들.

이것은 나쁜 생각입니까?

참고 : 내 저장소 계층은 데이터베이스를 엄격하게 처리합니다. 내 흐름이 간다.

데이터베이스> LINQ (DBML)> 저장소 계층> 서비스 계층> 컨트롤러 (또는 기타).

답변

1

예를 들어 보았을 때 좋지 않은 것처럼 보입니다. 서비스 계층에서 요청하는 모든 정보가 실제로 컨트롤러 자체에서 사용 가능한 것을 볼 수 있습니다. 이 정보를 얻기 위해 왜 응용 프로그램 경계를 넘고 싶습니까?

그러나 서비스 계층에서 DB를 정확하게 다루지 않는 유효한 이유가있을 수 있습니다.

귀하의 경우에는 컨트롤러에서 이와 비슷한 종류의 도우미 클래스를 사용한다고 말할 수 있습니다.

1

@Predeep에는 포인트가 있습니다. webproject에 속한 메소드를 서비스 계층에 두지 마십시오. 다른 종속성을 추가하는 중입니다.

서비스 계층은 리포지토리 계층의 맨 위에있는 계층으로 간주되지 않습니다. 데이터베이스 또는 다른 데이터 소스의 정보를 수정하는 논리를 포함 할 수 있습니다. 데이터베이스로 아무 것도 할 필요가없는 다른 메소드를 추가하는 것은 완벽합니다. 그게 레이어가있는 것입니다. 그렇지 않으면 그 레이어를 건너 뛸 수 있습니다.

관련 문제