2009-07-06 4 views
2

얼마나 많은 파일, 코드 행, 책임 등에 관한 .asmx 또는 wcf 서비스 클래스의 적절한 개발로 간주됩니까? 대부분의 사람들은 모든 클래스에 대해 다른 crud 메서드에 대해 별도의 .asmx 서비스 파일을 게시합니까?.net 웹 서비스 우수 사례 ... SRP?

답변

4

우선, 새로운 개발의 가장 좋은 방법은 WCF를 사용하는 것입니다. Microsoft: ASMX Web Services are a “Legacy Technology”을 참조하십시오.

둘째, SOA에서는 거친 작업으로 서비스를 만들려고합니다. 예를 들어 StartOrder, AddLineItem, AddOption, FinishOrder 작업보다는 OrderProduct 작업이 필요합니다. 다음과 같이 OrderProduct 작업은 OrderDTO을 받아 들일 수 있습니다 AddLineItem 다음에 그냥 빈 순서를 생성하는 StartOrder 방법은, (데스크톱 응용 프로그램에서 할 수로) 개별 라인 항목을 추가 호출하는 대신

public class OrderDTO { 
    public CustomerInfo Customer {get;set;} 
    public DateTime OrderTime {get;set} 
    public DateTime ShipTime {get;set;} 
    public List<LineItemDTO> LineItems {get; private set;} 
} 

public class LineItemDTO { 
    public int LineItemNumber {get;set;} 
    public string ProductName {get;set;} 
    public int Quantity {get;set} 
    public Decimal Amount {get;set} 
    public Decimal ExtendedAmount {get;set;} 
} 

, I LineItemDTO의 컬렉션을 가지고있는 OrderDTO를 받아들이는 하나의 OrderProduct 메소드를 추천한다. 한 번에 모든 주문을 보내고 거래의 모든 부분을 추가하고 완료합니다.

마지막으로 비즈니스와 데이터 계층으로 구분해야한다고 말하고 싶습니다. 서비스 계층은 사물의 서비스 측면에만 관심을 가져야하며, 업무를 완료하기 위해 비즈니스 로직 계층을 호출합니다.

+0

나는 WCF over asmx에 동의한다. 다른 작업보다 OrderProduct에 대해 자세히 설명해 주시겠습니까? 마지막 문장에도 동의합니다. – suedeuno

+0

네, 맞습니다. 설명을 추가해 주셔서 감사합니다. – suedeuno

2

잡아 당신이 할 수있는 곳에서이 책을 :

Service Oriented Architecture (SOA): Concepts, Technology, and Design

답변 질문의 각각의 많은 사람들이 더 많은 당신이 당신의 구현시에 실행되어있어.

+0

감사합니다. 나는 언젠가 그것을 집 으려고 노력할 것이다. 그때까지 내 질문에 대해 통찰력을 공유하는 사람은 누구입니까? – suedeuno

+1

+1 토마스 얼 (Thomas Erl) 서적 참조. 그의 개요보다 SOA에 대한 더 나은 지식의 원천은 없다. – jrista

5

일반적으로 서비스는 일련의 공통 작업을 캡슐화해야합니다. ASMX를 사용하든 WCF를 사용하든 관계없이 각 작업에 대해 하나의 "서비스"를 작성하면 안됩니다. 서비스 지향 아키텍처 (SOA)의 기본 개념은 실제 비즈니스 행동을 모델링하는 것입니다. 바보 같지만 잘하면 효과가있는 예를 들어 ... 식당에서 웨이트리스를 생각해보십시오. 웨이트리스는 주문을 받고, 그 주문을 제공하고, 음료 보충을 제공하고, 조미료를 제공하고, 마지막으로 지불을 처리하는 형태로 고객에게 서비스를 제공합니다. 웨이트리스가 제공하는 서비스는 단일 작업이 아니며 관련 작업의 집합입니다.

그러나 거기서 멈추지 않습니다. SOA의 본질은 모든 서비스가 다른 서비스에 의존 할 가능성이 높다는 것입니다. 웨이트리스는 요리사의 서비스에 의존하지 않고 식사를 제공하고 카운터를 제공하는 사람, 조미료를 마시고 마실 수있는 곳, 식당 건물 자체에서 제공하는 서비스없이 일을 할 수 없습니다. 웨이트리스가 제공하는 서비스와 요리사가 제공하는 서비스에는 근본적인 차이점이 있습니다. 기술 프로그래밍 용어로 가져 오려면 ... 웨이트리스는 작업 서비스이지만 Cook은 엔티티 (또는 CRUD) 서비스입니다. 웨이트리스는 고객에게 유용한 기능을 제공하는 상위 수준의 작업을 처리하고 요리사는 레스토랑의 다른 직원에게만 미세하고 복잡한 기능을 제공하는 하위 수준의 작업을 처리합니다.

논리적으로는 맞지만 서비스를 구성하는 것 외에 다른 질문에 대한 구체적인 답변을 드릴 수는 없습니다. 서비스 당 한 번의 작업을 수행하는 것이 좋지는 않지만 서비스가 한 번만 작동한다는 것은 전례가 아닙니다. 태스크 서비스는 종종 하나의 작업 만 수행합니다. 엔티티 서비스는 대개 CRUD 기반이지만 때로는 추가 서비스가 필요한 경우가 많습니다. 또한 최저 수준의 인프라 운영을 제공하는 유틸리티 서비스가 있습니다 (레스토랑, 유틸리티 서비스는 스토브, 그릴, 레지스터 등과 같을 것입니다).) 실제 비즈니스 개념을 사용하여 서비스를 모델링하면 노출되는 작업과 서로에 대한 종속성이 명확 해집니다.

SOA에 대한 훌륭한 정보는 서비스 지향 엔터프라이즈 구현을위한 확실한 리소스이므로 Thomas Erl (Prentice Hall)의 SOA 시리즈를 확인하십시오.

+0

정보를 제공해 주셔서 감사합니다. 단일 웹 서비스에서 서비스를 함께 묶어 두는 문제는 수천 줄의 코드로 끝나서 유지 관리에 끔찍한 짓을 할 수 있다는 것입니다. – suedeuno

+0

서비스가 매우 복잡하고 도메인을 제대로 설계하지 않은 경우 단일 서비스에 수천 개의 회선이 없어야합니다. 서비스는 도메인 동작에 대한 게이트웨이입니다 ...하지만 일반적으로 모든 도메인 동작 자체를 포함해서는 안됩니다. 여러 작업을 수행하는 서비스에 수천 줄의 코드가있는 경우 심각한 아키텍처 문제가 발생합니다. 문제를 해결하기 위해 관심사를 분리하고, 책임을 분담하며, 여러 클래스에 코드를 배포하십시오. 절대 모든 일을 서비스의 한 괴물로 버려서는 안됩니다. – jrista

+0

그것이 문제입니다. 이것은 상속 된 코드이며 모든 것이 하나의 서비스로 묶여 있습니다. 그래서 제가 대부분의 사람들이 그것을 어떻게 처리하는지 물었습니다. 나는 모든면에서 단일 책임을지기 위해 끔찍한 배경에서 왔습니다. – suedeuno