我是ASP.NET MVC的新手,但我知道它几乎取代了任何新项目的WebForms。
我有点迷失如何构建一个我正在设计的Web应用程序,它实际上没有任何数据库元素。为简单起见,它类似于在线绘图工具,每个客户端都会在画布上动态构建一些东西(可以在服务器上实例化各种对象),然后在该绘图上进行一些处理(可能在它自己的线程上)。
在三元组术语中,我的“模型”由客户端动态构建,并将在服务器上作为对象(作为此阶段不重要的各种数据结构)持久存在,直到用户退出为止。我对ASP.NET MVC的理解是保持一切无状态,因此非常不鼓励使用会话。
处理此类情景的好方法是什么?
答案 0 :(得分:1)
关于模式的一切仍然存在,所有你改变的是你如何坚持你的模型。你当然可以坚持到会议,或任何你想要的地方。只是封装了持久层,应用程序的其余部分将不知道/关心它们的区别。
例如,假设您有一个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
被保存到该存储库并从该存储库中获取。其余代码与任何其他ASP.NET MVC应用程序一样继续。