Если ваши модели не зависят от настойчивости, как вы их сохраните?

StackOverflow https://stackoverflow.com/questions/4901151

Вопрос

Я новичок в ASP.NET MVC, исходя из фона PHP MVC.Это был вид неловкого перехода (см. Мой вопрос истории, хех.)

Одна вещь, которую мне нравится много в теории, что большая в мире .NET World - это идея моделей настойчивости агностики.Но в этом случае какой правильный способ сохранить изменения в модели?В 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 Land мои контроллеры получат доступ только к моделям и представлениям, в основном.

Это было полезно?

Решение

То, что вы делаете, нормально.ActiveRecord vs Repository vs Home Brew DAL - это вечный вопрос, который мы будем обсуждать вечно.

шаблон репозитория очень популярен в.NET прямо сейчас, и вы, вероятно, увидите множество примеров его использования.MVC все равно, какова ваша стратегия доступа к данным.Использование того, что вам удобно, - это прекрасно и лучше, чем использование шаблона, потому что это делают все остальные.

Другие советы

Это нормально для модели, чтобы иметь функцию сохранения (), но обычно вы хотите, чтобы это сохранить () поведение не зависят от вашей модели - рассуждается в интерфейс.

Запомнить ваши принципы дизайна: дизайн интерфейса, а не реализацию.

Другое предостережение - как вы тестируете свои фигуры индивидуально?Если модель не знает, как она сохраняется, она может быть проверена на основе того, какую модель должна быть , и ваш механизм настойчивости может быть проверен на основе того, что он должен сделать,

В любом случае, похоже, что ваше дело Create () делает двойные обязанности - пытаясь использовать модель для сохранения, затем пытаясь использовать DataCcess, чтобы сохранить.Эти два объекта делают то же самое?Может ли это быть запутанным или нечитаемым / ненаправленным позже?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top