2012-10-25 2 views
0

새 ASP.NET MVC3 응용 프로그램을 만들 때 기본 프로젝트에는 Models 폴더가 있습니다. 이 Models 폴더가 포함 AccountModels-RegisterModel, LoginModel모델 - 데이터 프로젝트 또는 웹 프로젝트에 있습니까?

나는 DAL에 대해 별도의 프로젝트를 - 그것은 repositoryservice이 포함되어 있습니다.

지금, 나는 나의 service의 방법이있다 :이를 위해

TblUser Register(RegisterModel model);

는 일을 내 데이터 프로젝트에서 웹 프로젝트를 참조해야합니다.

내 데이터 프로젝트에 내 Models 폴더를 대신 포함해야합니까?

답변

1

첫 번째 옵션이 적합하지 않습니다. 이것이 원형 의존성이라고 불리는 것이고 그것은 나쁘다.

두 번째 옵션은 더 좋지만 여전히 좋지는 않습니다. 모델 클래스에는 의심 할 여지없이 ui에만 적용 할 수있는 필드와 메소드가 있습니다. 데이터 계층은 웹 계층에 속한 데이터 객체보다 더 많은 데이터 계층에 속하지 않습니다. 그것은 커플 링의 예입니다. 우려의 불완전한 분리라고도하며, 나쁜 것입니다.

가장 좋은 방법은 두 계층에서 필요로하는 데이터를 별도의 클래스 집합 (때로는 데이터 전송 개체 또는 poco의 일반 오래된 클래스 개체라고도 함)으로 구분하는 것입니다. 이러한 클래스는 필요에 따라 데이터 프로젝트 또는 프로젝트 전체에 상주 할 수 있습니다. 서비스가 WCF 서비스에있는 경우 이러한 클래스는 일반적으로 DataContracts가됩니다. 그런 다음 MVC 프로젝트 내에서 모델을 가져야하지만, 자신의 데이터를 보유하는 대신 POCO에 대한 참조를 포함해야합니다. 따라서 특정 경우에는 데이터 프로젝트에서 RegistrationInfo 클래스 (또는 호출하려는 항목)를 만든 다음 모델에 RegistrationInfo 유형의 필드를 추가하고 전체 RegistrationModel 대신 서비스에 전달합니다.

편집 : 당신이 예를 제공 할 수 예를 들어

namespace MyProject.Data.Objects { 
    public class RegistrationInfo { 

     [Required] 
     public string Username { get; set; } 

     [Required] 
     public string Password { get; set; } 

     [Required] 
     public string Email { get; set; } 

    } 
} 

namespace MyProject.Data { 
    public class MyService { 
     public TblUser Register(RegistrationInfo info) { 
      // .. save to the database .. 
     } 
    } 
} 

namespace MyProject.UI.Models { 
    class RegistrationModel { 
     public RegistrationInfo Info { get; set; } 

     /* Fields which the ui needs but the database does not */ 
     public bool ConfirmPassword { get; set; } 
     public bool AllowFreeEmailAddresses { get; set; } 

     public void Save() { 
      new MyProject.Data.MyService().Register(this.Info); 
     } 

     public RegistrationModel() { 
      this.Info = new RegistrationInfo(); 
     } 
    } 
} 
+0

을 추가? 나는 네 생각을 잘 모르겠다. 미안, 나는 때로는 3 학년 때처럼 똑똑해. – Cody

+0

확실히 - 편집을 참조하십시오 – Doug

+0

그건 완벽합니다. – Cody

관련 문제