asp.net MVC 2를 사용하여 사이트를 개발하고 있습니다. IUser는 모델과 뷰 사이의 인터페이스로 사용되어보다 효과적으로 분리됩니다. 그러나, 물건은 여기에서 조금 지저분해진다. 사용자 로그인을 처리하는 컨트롤러에서 : 다음과 같습니다.ASP.NET MVC에서 모델과 뷰 간 인터페이스 사용
IUserBll userBll = new UserBll();
IUser newUser = new User();
newUser.Username = answers[0].ToString();
newUser.Email = answers[1].ToString();
userBll.AddUser(newUser);
사용자 클래스는 IUser를 구현하는 구체적인 클래스로 웹 프로젝트에 정의되어 있습니다. DAL에는 동일한 인터페이스를 구현하는 유사한 클래스가 있으며 데이터를 유지하는 데 사용됩니다. 그러나 userBll.AddUser가 호출 될 때 User 클래스의 클래스 (InvalidCastException)를 구현하더라도 User 유형의 newUser는 DAL User 클래스로 형변환 될 수 없습니다.
변환 연산자는 옵션 일 수도 있지만 DAL과 웹 사이의 의존 관계는 인터페이스 사용의 초기 목표에 위배됩니다.
제안 사항?
예, 저는 DI의 이점을 이해합니다. 그러나 여기서 중요한 문제는 사용자 유형을 다루는 것입니다. _repository.AddUser (...) 여전히 사용자 개체에서 전달합니까? – Icerman
저의 요점은 (DI 프로젝트와 웹)과 (IUserBll과 웹이있는 프로젝트) 사이의 의존성을 만들어서 "인터페이스 사용의 초기 목표에 반하는 DAL과 웹 간의 의존성"을 만들 수 있다는 것입니다. 웹 프로젝트는 결코 DAL 프로젝트를 참조하거나 의존성을 갖지 않습니다. 컨트롤러 팩토리는 DAL.UserBll의 저장소 인스턴스화를 수행하고이를 IUserBll로 리턴합니다. – CRice
동의. 내가 가지고있는 또 다른 퍼즐은 IUser와 DAL 및 웹에서의 구현입니다. IUser는 일반적인 속성을 정의하고 DAL과 웹은 DAL이나 웹에서만 추가되는 속성에 대해 다른 암시를 가질 수 있습니다. 그러나 웹 사용자를 DAL 사용자로 캐스팅하는 대신 IUserBll.AddUser (IUser)에 DAL 사용자 특정 등록 정보를 할당하는 것보다 IUser 등록 정보를 사용하여 DAL 사용자를 채울 필요가 있습니다. – Icerman