2010-08-02 7 views
1

사람들은 알고 :CQS 및 ASP.NET MVC 작업

CQS가 주장하는 모든 방법해야 어느 쪽 작업을 수행 명령 또는 데이터를 반환하는 쿼리 수 발신자에게만 전달되지만 둘 다에 대해서는 제공되지 않습니다.

ASP.NET MVC 작업과 관련하여 CQS는 이와 같은 액션이 없어야 함을 나타 냅니까?

이 방법은 시스템 상태를 변경하고 현재 상태를 반환합니다. 여기에 CQS를 적용하면 두 개의 별도 액션이 있어야합니다. 하나는 새 주문을 삽입하는 액션이고 하나는 시스템의 시스템을 가져 오는 액션입니다. 첫 번째 액션이 성공적으로 완료되면 클라이언트에서 호출해야합니다. 그러나 이것은 프로그래밍을 복잡하게합니다.

이에 대한 의견을 듣고 싶습니다.

MOSH

+0

CQS에 대한 참조를 제공 할 수 있습니까? –

+0

@rock http://en.wikipedia.org/wiki/Command-query_separation – bzlm

답변

-2

나는 에펠의 날로부터이 용어를 모호하게 기억하고있다. (이 모든 것을 뒤따라 가면 실제로 10 년이나 그나마 가장 최근의 oop 원리보다 훨씬 앞서있다.) 용어 및/또는 원칙을 잘 능가 할 수 있습니다 지금은 mvc (asp 또는 codeignitor 등) actionresults에 의해 대체됩니다. 사실 (그냥 지금 봤어) 정의 측면에서 생각,이 분리 액션을 수행하는 논리 예 : OrderService.InsertOrder(order) 예를 들어, 액션에서 수행 된 mvc는 실제로이 패턴을 따르는 Loosley입니다 (InsertOrder는 상태 정보를 표시하지 않고 순전히 주문 객체를 처리합니다).

나는 당신이 모범 사례를 보길 권한다. asp.net mvc는 actionresult (또는 partial, contentresult 등)를 반환하는 것을 근본적으로 기반으로합니다. 이 패턴은 패러다임을 단순화하여 일관되고 보편적으로 받아 들여지는 방식으로 생산성을 촉진하도록 설계되었습니다.

물론, 액션 반환 값을 사용하여 삽입/업데이트/삭제 시나리오의 성공 또는 실패를 생성 한 다음 해당 반환 값을 기반으로 부분 뷰를 요청할 수 있습니다. 그러나 나는 개인적으로 MVC의 컨트롤러가 어떤 결과가 액션의 결과로 리턴되어야하는지에 대한 논리를 신경 쓰는 것에 관심이 있다는 사실을 염두에 두면서이 접근법에서 너무 많은 가치를 얻을 것이라고 생각하지 않는다.

희망이

+0

dang - tears. downvoted :-( –

+0

그래서 downvotes 계속 .. 우박 :) –

+1

당신이 조금 대답을 정리하면 다른 사람들을 도울 수 있습니다. 명확하게 질문에 대답하는 것 같지 않습니다. 문법도 약간의 청소를 사용할 수 있습니다. – shanabus

1

내가 CQS 들어 본 적이없는,하지만 당신은 ASP.NET MVC (MVC 패턴)을하고 있다면 당신이 쓴 작업이 완벽하게 괜찮습니다 (이 OrderService을 가정하고 실제 서비스에 대한 추상화가) . 컨트롤러는 모델을 조작하고 렌더링 할 뷰를 결정하고이 모델을 뷰에 전달합니다.

+0

Darin, 나는 이미이 행동이하고있는 일을 알고 있으며 그것은 내가 요구 한 것이 아닙니다! :) 내 질문은 CQS 및 ASP.NET MVC 작업에 미치는 영향에 대해 읽은 사용자를 대상으로했습니다. – Mosh

+1

CQS를 절대적으로 존경한다면 애플리케이션의 모든 메소드에서 ASP.NET MVC 애플리케이션을 작성할 수 없다는 것은 확실합니다. 따라서이 패턴을 위반하거나 다른 웹 프레임 워크를 찾으십시오. 나는 첫번째로 갈 것이다 :-) 취침 시간에 –

6

웹에 명령/쿼리 분리의 일반적인 예는 Post/Redirect/Get이다 짐

을하는 데 도움이됩니다.

ASP.NET MVC는이 보통

[HttpPost] 
public ActionResult UpdateOrder(Order order){ 
    UpdateOrder(order); 
    return RedirectToAction("ViewOrder", new { order.OrderId }); 
} 

[HttpGet] 
public ActionResult ViewOrder(int orderId){ 
    return View(GetOrder(orderId)); 
} 
AJAX를 들어

및 부분보기로 간단한 방식으로 구현되어,이 문제 때문에, 최선의 전략이 될하지 않을 수 있습니다 해당 게시물/리디렉션/해결할 수있는 문제가 아니다 받기 정말 관련성이 있으며 리디렉션은 까다로울 수 있습니다.

2

CQS는 동일한 개체에 대한 명령 및 쿼리에만 관련이 있습니다. OrderView는 Order와 동일한 객체가 아니기 때문에 원칙이 적용되지 않습니다. 따라서 코드가 원칙에 어긋나지 않습니다.

+0

이것은 가장 좋은 대답 인 것 같고 당신과 동의합니다. – shanabus