2017-02-21 16 views
1

비슷한 질문을 찾을 수 없었습니다. 그리고 이것은 바보 같은 질문 일 수 있습니다. 확실하지는 않습니다. 검색 할 키워드를 찾을 수 없었습니다.다른 함수에서 요청 및 응답 객체를 인스턴스화하는 것이 좋지 않습니까?

예를 들어, 우리는 데이터베이스에서 정보를 액세스하기위한 요청/응답 쌍의 일종이 (나를 용서, 직장에서 나의 선택을 VB .NET을 사용, 그래서 난 그냥 일관성이있을거야)

Public Class ItemAddRequest 
    Public param1 As String = "" 
    Public param2 As String = "" 
End Class 

Public Class ItemAddResponse 
    Public returnParameter As MyItemObject = "" 

    Public Function Invoke(req As ItemAddRequst) 
     ' SQL Queries go here 
     ' Build my returnParameter 
    End Function 
End Class 

프런트 엔드에서 프런트 엔드에 표시 할 정보를 얻으려는 경우이 정보를 사용하지만 정보를 얻거나 정보를 추가하는 목적으로 코드의 다른 부분을 사용하면 안됩니까? 일반적으로 MyItemObject의 모듈화 (발명 된 단어)를 사용하고 MyItemObject의 메소드를 사용하여이 작업을 수행하고자하지만, 적어도 현재는 변경하지 않아도되도록 변경해야 할 많은 것들이 있습니다. 그래서 예를 들어 우리는 이것이 잘 작동하는 것 같다 수행이

Public Class ParentItemAddRequest 
    Public param1 As String = "" 
    Public param2 As String = "" 
End Class 

Public Class ParentItemAddResponse 
    Public returnParameter As MyParentItemObject = "" 

    Public Function Invoke(req As ParentItemAddRequest) 
     ' SQL Query goes here to add parent 
     ' Now also need to add a regular MyItemObject 
     Dim itemReq as new ItemAddRequest() 
     Dim itemResp as new ItemAddResponse() 
     itemReq.param1 = 'whatever 
     itemReq.param2 = 'whatever 

     itemResp.Invoke(itemReq) 

     me.returnParameter = itemResp.returnParameter 

    End Function 
End Class 

같은 일을하고 있지만 어떤 종류의 문제가 우리가 원인 anticpate 수 있을까? 아니면 완전히 정상적인 것입니까? 이상하게 보입니다. 도와 주셔서 감사합니다.

답변

0

이 코드가 작동하지 않는 것보다 많이 잘못되었습니다. 그다음에 문제가 해결되지 않으면. 즉,이 코드에 잘못된 점은 잘못된 패턴을 사용한다는 것입니다. 그냥 잘못 본 것입니다. 그것이 창출 할 수있는 유일한 문제는 신입 사원을 혼란에 빠뜨릴 수 있다는 것입니다. 이 방법으로 작업하는 또 다른 심각한 함의는 클래스가 이제 데이터 계약을 선언하는 2 가지 작업 (2)을 채우기 위해 알 고를 정의하는 두 가지 작업을 담당한다는 것입니다. 이 혼란은 고체 원칙에 따라 눈살을 찌푸리게됩니다. 책임의 혼란으로 인해 단위 테스트와 영향 분석이 어렵습니다.

Request 클래스와 Response 클래스를 찾으면 즉각적인 가정은 DTO 패턴을 사용한다는 것입니다. 클래스는 명명 규칙 때문에 데이터 계약으로 간주됩니다. 이제 dtos는 비즈니스 로직이없는 단순한 POCO라고 가정합니다. 이것은 모든 클래스를 별도의 dll에 넣고 다른 클라이언트가 공유 데이터 구조를 사용할 수 있도록하기위한 것입니다. 그래서 나는 거기에 Invoke 메서드를 기대하지 않을 것이다. 나는 dto가 filled 인 것을 DAL 레이어에서 DAO 클래스의 수작업으로 된 스퀘어 또는 orm 같은 엔티티 프레임 워크를 통해 기대할 것입니다.

손으로 직접 만든 스퀘어를 사용하면 Class ParentItemDAO과 같은 클래스 집합이 Function Add(req As AddParentItemRequest) As AddParentItemResponse과 같을 것으로 기대합니다. 마찬가지로 나는 Function GetParentItemById 메쏘드가 비즈니스 객체 나 dto를 반환 할 것으로 기대한다.

+0

저는 웹 서비스에 비교적 익숙합니다 (저는 대학생으로 대학생으로 일하고 있습니다). 특히 .NET에 익숙하지 않았습니다. (이전의 인턴쉽에서 Spring MVC를 사용했습니다.) 그래서 일부 설명은 확실히 내가 작성한 것은 이미 존재하는 대규모 프로젝트를 기반으로하기 때문에 명확하지 않습니다. 답변 주셔서 감사합니다! – n8m8

관련 문제