关于模式的一切仍然存在,你所改变的只是你如何坚持你的模型。您当然可以将它们持久化到会话或您想要的任何其他位置。只需封装该持久层,应用程序的其余部分就不会知道/关心有什么区别。
例如,假设您有一个Widget
模型。并且您希望将其保存到某个持久层(可能是数据库,但不一定是)并从中检索它。您可以在模型上放置一些简单的工厂方法。像这样的东西:
public class Widget
{
public static Widget Fetch(int id)
{
// fetch the Widget from persistence by its ID and return it
}
public void Save()
{
// write the current Widget to the persistence medium
}
}
如果您将它们保存到数据库中,您可能有某种存储库,您可以在那里与之交互。实体框架数据上下文通常服务于这项工作。但这不一定是您使用的。
在这种情况下,您可能想要创建一个WidgetRepository
抽象持久性介质的类。上述工厂方法将直接使用该类。在该类内部,在这种特殊情况下,您将拥有对System.Web
会话状态的持久性的引用和诸如此类的东西。(或者它可以持久化到 XML 文件、应用程序状态、数据库或任何东西。)在该类之外,没有其他人知道发生了什么。所有其他代码只知道Widget
s 保存到该存储库并从该存储库中获取。其余代码与任何其他 ASP.NET MVC 应用程序一样继续执行。