2009-11-24 3 views
4

편집에서 작업 - 내 원래의 질문에 내가 충분히 명확하게 원하는 것을 설명하지 않은 것으로 보인다 내가 뭘하고 싶은 것은 액션 요청을 처리하기 위해 Windows 워크 플로를 사용하는 것입니다는/ASP.NET MVC

. WF는 상당히 무겁고 작업하기가 어렵지만이 작업에 적합한 다른 .NET 기반 워크 플로 라이브러리는 찾지 못했습니다.

누구에게이 작업을 수행하는 방법에 대한 예제가 있습니까? 아니면 누군가 그것을 시도 했습니까? "true MVC"인지 여부는 중요하지 않습니다.


편집 : - 다른 모든 로직이 기타 서비스/비즈니스 계층에 캡슐화되고있는 유일한 것은 내가 게시 한 "지방 컨트롤러"예를 단순히 내가 WF를 추가 할 이유 중 하나의 예를했습니다 컨트롤러는 이러한 서비스를 호출하고 표시 할보기를 결정할 책임이 있습니다. 필자에게,이 UI 고유 컨트롤러 코드를 편집 할 수 있도록 만드는 것이 합리적입니다. 특히 내가 작업하고있는 CMS 프레임 워크에서 편집 가능해야합니다. 이것이 내가 워크 플로우 (jQuery 기반 XOML 편집기를 만들었습니다)를 사용하고자하는 이유입니다.

원래 질문을 분명히하기 위해서 : 정리하기 위해 모든 비즈니스 로직을 워크 플로우로 옮기려고하지 않습니다. 내 수업, 나는 재사용 가능한 컨트롤러/UI 로직을 컴파일 된 클래스에서 배포 가능한 XOML 파일로 옮기려고합니다. 예를 들어

, 내가 쓰기 컨트롤러/행동의 대부분은 다음과 같습니다

public ActionResult List(string categoryId) { 
    if (String.IsNullOrEmpty(categoryId)) 
    { 
    var data = productRepository.GetCategories(); 
    return View("ListCategories",categories); 
    } 
    var data = productRepository.GetProductsByCategory(categoryId); 
    return View("List",data); 
} 
public ActionResult Display(string productId) { 
    var product = productRepository.GetProductsById(productId); 
    return View("Display",product); 
} 

이러한 작업은 다음 드래그 앤 드롭 인터페이스를 통해 정의 할 수 있습니다 워크 플로우 활동으로 추출 할 수있을 정도로 얇은 .

저는 현재 사용자 정의 CMS 프로젝트에서 작업 중이며 잠시 전에 만든 응용 프로그램에서 사용할 수있는 작업을 정의하는 jQuery 웹 기반 xoml 편집기를 사용하려고합니다. admin UI의 개발자 섹션에서 이미 데이터 모델 및 뷰를 생성/편집 할 수 있습니다. UI를 사용하여 간단한 컨트롤러 작업을 정의 할 수 있기를 바랍니다. 다른 모든 서비스/비즈니스 로직을 확장 메소드 또는 서비스 클래스에 배치했습니다.

XML 기반 모듈로 내보낼 예정이므로 한 웹 사이트에서 다른 웹 사이트로 쉽게 이식 할 수 있습니다. 내가 만들 웹 사이트의 대부분은 매우 유사하므로 많은 맞춤 코드가 필요하지 않습니다.

분명히 일부 복잡한 컨트롤러는 적합하지 않을 수 있으며 자체 컨트롤러 클래스가 필요하지만 간단히 워크 플로를 수정하여 WebsiteB에 새로운 'filterByEmailAddress'매개 변수를 추가하는 것이 유용 할 수 있습니다. WebsiteA는 여전히 원래 필터를 유지합니다.

답변

0

검색 엔진/블로그에서 성공없이 검색 한 후 직접 예제를 만들려고 노력했습니다. 이것이 생각했던 것보다 훨씬 쉽습니다. 아직 할 일이 많이 남아 있지만, 그 결과가 개념 증명을 위해 좋습니다.

You can find the solution and blog post here

+0

링크가 끊어졌습니다. –

2

이것은 아마도 당신이 찾고있는 해답이 아니지만, 컨트롤러가 과체중이되는 것은 아마도 응용 프로그램에 적절한 레이어가 부족하여 컨트롤러가 너무 많이 수행하고 있음을 나타내는 것일 수 있습니다. 별도의 프리젠 테이션, 서비스 및 데이터 액세스 레이어가있는 잘 디자인 된 아키텍처를 사용하여 MVC 자습서를 살펴 보는 것이 좋습니다. 제가 권장할만한 것은 Rob Conery의 MVC Storefront 시리즈입니다.

http://blog.wekeroad.com/mvc-storefront/mvc-storefront-part-1/

내가 WF에 모든 컨트롤러 로직을 이동하는 것은 정말 문제를 해결하기 위하여려고하고 있다는 것을 생각하지 않는다 - 당신은 단순히 더 많은 일을하기 위해 컨트롤러를 필요로하지 않는 방법으로 응용 프로그램을 구성 할 필요가 프리젠 테이션 로직보다

+0

감사합니다 - 난 이해, 그리고 그것이 적절한 레이어를 결여되고 있다는 표시입니다 동의합니다. 나는 적절한 로직에 대부분의 로직을 유지하려고 노력한다. 가끔은 내가 체인지가 일어나는 곳에서 바로 가기를 취한다. (어쨌든 리팩토링으로 끝나는). 나는 최근에 "뚱뚱한 컨트롤러"에 대해 많이 읽었는데 이것이 내가 원래 질문에서 언급 한 이유이다. 내가 달성하기를 바란다는 생각을하기 위해 나의 질문을 업데이트 할 것이다. – mzalewski

0

컨트롤러에 너무 많은 책임을 묻는 것처럼 들립니다. 이는 MVC, MVP 및 이와 유사한 패턴이 비교적 새로 도입 된 사람들에게 공통적 인 문제입니다. 비즈니스 로직을 컨트롤러에 넣는 경향이있어 지저분한 아키텍처로 이어집니다.

MVC의 컨트롤러는 비즈니스 로직을 주도하는 것이 아니라 UI를 운전하고 조정하기로되어 있습니다. 내용을

  • 호출 비즈니스 로직 및/또는 워크 플로우
  • 을 뷰, 행동

    1. 핸들 사용자 작업
    2. 리디렉션, 또는 반환 : 일반적으로 컨트롤러가 다음보다 더 더 많은 일을해서는 안, 말하기,

    컨트롤러에 실제 기능 논리가 거의 존재하지 않아야합니다. 컨트롤러는 사용자가 상호 작용하는보기와 해당보기가 포털 인 "도메인"간의 조정자입니다. WF로 모델링 할 수있는 비즈니스 로직은 컨트롤러와 완전히 별개이며 구별되어야합니다. 때로는 특정 UI에 특정한 기능을하는 "응용 프로그램 논리"를 가질 수도 있습니다. 그런 논리는 비즈니스 논리와 적절하게 분리되어야하며 컨트롤러에 포함되거나 복잡 할 경우 컨트롤러와 비즈니스 계층 간의 버퍼 계층을 고려할 수 있습니다 .

    디자인에서 최대한의 합성 가능성을 목표로 삼으십시오. 모든 것을 컨트롤러에 집어 넣으면 구성 가능성과 재사용 성이 떨어집니다. 논리를 분리하고 책임을 구성 요소와 레이어로 분리하면 재사용 성이 크게 향상되고 코드가 단순화되며 WF와 같은 도구를보다 쉽게 ​​활용할 수 있습니다.