내 질문은 MVC 디자인 패턴 및 Microsoft가 도입 한 면도기 구문과 관련이 있습니다.
MVC 디자인 패턴을 배우는 동안 아이디어가 분리의 우려 라는 원칙에 기반을 둔다는 말을 들었습니다 .
그러나 Razor Syntax를 사용하면 뷰 에서 C #을 직접 사용할 수 있습니다.
우려의 교차점이 아닌가?
내 질문은 MVC 디자인 패턴 및 Microsoft가 도입 한 면도기 구문과 관련이 있습니다.
MVC 디자인 패턴을 배우는 동안 아이디어가 분리의 우려 라는 원칙에 기반을 둔다는 말을 들었습니다 .
그러나 Razor Syntax를 사용하면 뷰 에서 C #을 직접 사용할 수 있습니다.
우려의 교차점이 아닌가?
답변:
당신은 우려의 분리와 면도기 구문을 혼동하고 있습니다.
우려의 분리는 코드를 구성하는 방법과 관련이 있습니다.
뷰에서 C #을 사용할 수 있다고해서이를 막을 수는 없습니다. 관심사 분리와 는 아무런 관련 이 없습니다 .
물론, 문제의 분리를 따르지 않도록 뷰에서 코드를 구성 할 수 있지만 표시 목적으로 만 사용되는 C # 코드는 어떻습니까? 그 곳은 어디입니까?
질문에 직접 대답하기보다는 질문에 대한 가정에 대한 답변입니다. 즉, Razor가 MVC 용으로 구축되었다는 가정은 올바르지 않습니다. ASP.NET 팀에서 Microsoft에서 일하며 이에 대한 직접적인 지식이 있습니다.
Razor는 MVC의 뷰 엔진으로 시작하지 않았습니다. 이것은 ASP.NET Web Pages 용으로 만들어졌으며 아마도 스펙트럼의 가장 덜 분리 된 측면으로 갈 수있는 한 가능할 것입니다. 이것은 ASP.NET Web Forms / Classic ASP에 대한 현대적인 대안으로, 물론 다른 많은 유사한 서버 프로그래밍 프레임 워크로 만들어졌습니다. Razor의 아이디어는 HTML (마크 업)과 C # (코드) 사이를 거의 매끄럽게 전환하는 것이 었습니다.
나중에 나 자신을 포함하는 팀은 Razor 구문이 같은 팀이 작성한 MVC의 뷰 엔진을 위해 많은 의미가 있다고 결정했습니다.
Razor가 ASP.NET MVC에서 관심사 분리 개념을 활성화, 방해, 개선 또는 변경하는지 여부에 대해서는 Oded의 대답 이 중요 합니다.
"기술 분리"와 "문제 분리"를 혼동하고 있습니다. MVC의 "View"부분의 기본 개념은 "View"의 코드가 데이터 액세스 나 강력한 로직을 직접 수행하지 않고 각각 "Model"및 "Controller"부분에 남겨진다는 것입니다. "Controller"는 데이터를 변환하고 필요한 로직을 수행 한 후 올바른 "View"로 라우팅합니다. 뷰는 데이터 변환도 수행 할 수 있지만 위에서 언급 한 날짜 변환과 같이 순전히 외관을 유지하는 경향이 있습니다.
나는 완벽한 Don't do it
예를 생각할 수 있습니다 .
ProductController가 있다고 가정 해 봅시다.
public class ProductController()
{
public ViewResult Discontinued()
{
var db = new ProductsDb();
var products = db.Products.Where(x => x.Discontinued).ToList();
return new ViewResult(products);
}
}
면도기로 우리는 대안이 있습니다
public class ProductController()
{
public ViewResult Discontinued()
{
var db = new ProductsDb();
var products = db.Products.ToList();
return new ViewResult(products);
}
}
그리고 우리의 관점에서 :
@model IEnumerable<Product>
@foreach (var item in Model.Where(x => x.Discontinued)) {
....
}
두 번째 솔루션이 너무 잘못되었다는 것이 분명합니다. 이와 같은 일을하는 경우 면도기를 비난하지 말고 스스로를 비난하십시오.
잊지 마세요 : 뷰에서 C #을 사용할 수 있다는 것은 면도기 기능이 아니며 ASP.NET 뷰에서도 가능했습니다. 면도기를 사용하면 조금 더 간단합니다.
더 많은 레일을 가진 템플릿 엔진을 찾고 있다면 Super simple view 엔진으로 nancy.fx를 살펴보십시오.