저는 ASP.NET MVC를 처음 접했고 PHP MVC 배경에서 왔습니다. 어색한 전환이었습니다. (내 질문의 역사, ㅎ을 참조하십시오.)모델이 지속성에 영향을받지 않는 경우 어떻게 저장합니까?
.Net 세상에서 큰 이론을 좋아하는 한 가지는 지속성에 의존하지 않는 모델이라는 아이디어입니다. 그러나이 경우 모델에 변경 사항을 저장하는 적절한 방법은 무엇입니까? PHP에서는 변환을 수행 한 후에 $model->save();
이라고 부릅니다. C#에서는 그렇게하는 방법이 확실하지 않습니다.
적절합니까?
public class AwesomesauceController
{
//inject!
public AwesomeSauceController(IDataAccess da)
{
DataAccess = da;
}
private readonly IDataAccess DataAccess;
[HttpGet]
public ActionResult Edit(int Id)
{
// PHP equiv: AwesomeSauceModel::find($id); Controller is unaware of DAL
return View(DataAccess.AwesomeSauces.Where(sc => sc.Id == Id).FirstOrDefault());
}
[HttpPost]
public ActionResult Edit(AwesomeSauce sc)
{
//persistence-aware version: model is aware of DAL, but controller is not
if($sc->valid()
$sc->save();
redirect();
}
else { return view(); }
// compare to persistence-agnostic version, controller is aware of DAL, but model is not
if(ModelState.IsValid)
{
da.Persist(sc);
return Redirect();
}
else
{
return View(sc);
}
}
}
나는 일반적으로 내가 컨트롤러가 직접이 방법으로 데이터 액세스 레이어에 접근하고 싶지 않은 것입니다 이것에 대해 저와 같은 잘못된 파업 유일한 것 같아요. 이전에는 PHP 환경에서 컨트롤러가 기본적으로 모델과 뷰에만 액세스했습니다.
'$ model-> save(); '에서 [active record pattern] (http://martinfowler.com/eaaCatalog/activeRecord.html)에 익숙하다고 추론합니다. 이를 [저장소 패턴] (http://martinfowler.com/eaaCatalog/repository.html)과 비교하십시오. 물론 PHP 컨트롤러는 모델과 뷰만 액세스하지만 [활성 레코드] [1]에서 보듯이 모델에는 데이터 액세스 논리가 있습니다 (즉 save() 메소드입니다). –