내 컨트롤러/뷰와 관련하여 내 모델에서 상속을 처리하는 방법에 대해 고민했습니다.ASP.NET MVC2 & NHibernate의 모델 상속 처리
기본 모델 :
public class Procedure : Entity
{
public Procedure() { }
public int Id { get; set; }
public DateTime ProcedureDate { get; set; }
public ProcedureType Type { get; set; }
}
public ProcedureA : Procedure
{
public double VariableA { get; set; }
public int VariableB { get; set; }
public int Total { get; set; }
}
public ProcedureB : Procedure
{
public int Score { get; set; }
}
등 ... 결국 다른 절차의 많은.
public class ProcedureController : Controller
{
public virtual ActionResult List()
{
IEnumerable<Procedure> procedures = _repository.GetAll();
return View(procedures);
}
}
을하지만 지금은 좀 붙어 :
그래서 나는 목록처럼 모든 절차를 일을. 기본적으로 목록 페이지에서 특정 하위 클래스 세부 정보를 보거나 편집 할 수있는 페이지에 링크해야하며 최상의 전략이 무엇인지 잘 모릅니다.
프로 시저를 사용하여 오른쪽 하위 클래스를 만들 때 사용할 저장소를 동적으로 파악하고 하위 클래스를로드하여 뷰로 전달할 수 있다고 생각했습니다. ProcedureType 객체에 클래스를 저장해야했습니다. 동적 인 캐스트를 할 수 없기 때문에 비 제너릭 IRepository를 생성/구현해야했습니다.
public virtual ActionResult Details(int procedureID)
{
Procedure procedure = _repository.GetById(procedureID, false);
string className = procedure.Type.Class;
Type type = Type.GetType(className, true);
Type repositoryType = typeof (IRepository<>).MakeGenericType(type);
var repository = (IRepository)DependencyRegistrar.Resolve(repositoryType);
Entity procedure = repository.GetById(procedureID, false);
return View(procedure);
}
하위 클래스 세부 정보를 표시하기 위해로드 할 부분을 결정하는 방법을 정렬하는 작업을 시작하지도 않았습니다.
이것이 좋은 접근 방법일까요? 따라서 URL을 쉽게 결정할 수 있습니다. 프로 시저 표시 코드를 쉽게 재사용 할 수 있습니다.
또 다른 접근법은 각 서브 클래스에 대한 특정 컨트롤러입니다. 컨트롤러 코드를 단순화하지만 많은 프로 시저 서브 클래스에 대한 많은 간단한 컨트롤러를 의미합니다. 부분 뷰를 사용하여 공유 프로 시저 세부 사항을 해결할 수 있습니다. 어떻게하면 처음에 컨트롤러/액션에 도착하는 URL을 구성 할 수 있습니까?
생각할 시간. 누군가가 나에게 빛을 보여줄 수 있기를 바랍니다. 미리 감사드립니다.
"하위 클래스 세부 정보를 표시하기 위해로드 할 부분을보기로 결정하는 방법을 정렬하지도 않았습니다." 대부분의 질문을 구문 분석 할 수 없지만 이것이보기에 대한 잘못된 접근이라고 말할 수 있습니다. 컨트롤러가 사용할보기를 결정해야합니다. 모델을 기반으로 서로 다른 하위 뷰를 렌더링하기에 뷰의 논리가 충분하지 않아야합니다. –
물론입니다. 컨트롤러가 부분을 결정합니다. 아마도 명명 규칙을 사용하여 (즉, ProcedureB에 대한 부분은 _ProcedureB 임) 또는 이와 비슷한 것입니다. –