2010-06-28 4 views
5

Rob Conery의 Kona 응용 프로그램에서 샘플을 보았을 때 IoC - Isession에서 데이터 계층 코드와 서비스가있는 두 가지를 사용하고 있음을 알았습니다. 여기서 데이터 저장소에서 데이터를 조작 할 때 수행해야하는 몇 가지 추가 비즈니스 로직이 있습니다 . 예를 들어, DB에 레코드를 추가하는 것뿐만 아니라 다른 레코드의 속성을 변경하고, 개수를 늘리거나, 다시 가져 오는 등의 작업을 수행 할 수도 있습니다. 추가 코드를 다른 곳에 두어야하고 해당 서비스에 추가해야합니다.ASP.NET MVC 애플리케이션에서 데이터 조작 및 비즈니스 로직 코드를 어디에 두어야합니까?

예를 들어, 그는 Customers를 조작하는 CustomerService가 있습니다. 이렇게하려면 CustomerService가 데이터 저장소에 액세스하는 데 사용할 수 있도록 ISession 인스턴스를 CustomerService에 보내야합니다.

이제 고객 클래스 자체에 해당 코드를 추가하고 해당 클래스에 ISession (또는 IRepository, 우리가 사용하는 용어를 사용)을 보내십시오. 그리고 어떤 서비스도 가지고 있지 않습니다. 일반적으로 Customer, Order, Product 등의 클래스는 Model 클래스이므로 큰/큰 모델 클래스가됩니다.

제 질문은 어떤 해결책이 더 좋습니까? 지금까지 컨트롤러에있는 대부분의 코드가 있었으므로 이제는 그 필요성을 느끼지 못했지만 이제는 애플리케이션이 커지면서 컨트롤러에 대한 결정을 내리고 컨트롤러를 정리해야합니다.

현재 내가 가진 : - 비즈니스 로직과 지방 컨트롤러를 거기에, - 매우 원자 저장소, - 매우 깨끗 모델과 viewmodels을.

나는로 이동해야 : - 슬림 컨트롤러, - 저장소를 더 코드, - 비즈니스 로직 코드와 모델 (특히 내 모델 클래스는 추가(),() 제거 등의 방법을 포함해야 Customer.Remove 예를 들어()?)

또는 에

- 슬림 컨트롤러, - 원자 저장소, - 아직 깨끗한 모델, - 서비스 (이전의로하지 않는 다른 모든 캡슐화).

답변

7

비즈니스 운영을 정의하기 위해 리포지토리에 의존하는 모델 클래스 및 서비스 계층과 함께 원자 적 연산을 포함하는 리포지토리를 갖는 것이 좋습니다. AOP의 개념은 각 비즈니스 운영의 시작 부분에서 자동으로 SQL 트랜잭션을 시작하고 예외가 발생할 경우 롤백 또는 커밋하는 데 사용될 수 있습니다.

마지막으로 컨트롤러는 이러한 서비스 클래스를 사용하고 도메인 모델과보기 모델간에 변환합니다.

+2

서비스 내보기 모델로 변환하기 때문에 콘트롤러는 내 도메인 모델의 메소드를 호출 할 수 없습니다. – Ryan

+0

내 모델에는 필드/속성 만있는 메서드가 없지만 좋은 방법입니다. – mare

+0

그래서 저장소가 있어야합니다. –

관련 문제