Ash*_*Ash 8 c# model-view-controller asp.net-mvc
我现在正在使用Asp.Net mvc框架并且喜欢它与经典的asp.net方式相比.我要说的一件事是,View是否可以接受(间接)访问数据库?
例如,我使用控制器来填充自定义数据类,其中包含我认为View需要执行其工作的所有信息,但是当我将对象传递给视图时,它也会导致数据库读取.
一个快速的伪示例.
public interface IProduct
{
/* Some Members */
/* Some Methods */
decimal GetDiscount();
}
public class Product : IProduct
{
public decimal GetDiscount(){ ... /* causes database access */ }
}
Run Code Online (Sandbox Code Playgroud)
如果View可以访问Product类(它传递了一个IProduct对象),它可以调用GetDiscount()并导致数据库访问.
我在想办法防止这种情况发生.目前我只为Product该类提供多个接口继承.相反,仅仅实现IProduct的,现在将执行IProduct和IProductView.IProductView将列出该类的成员,IProduct将包含可能导致数据库访问的方法调用.
"视图"只会知道IProductView类的接口,并且无法调用导致数据访问的方法.
在将对象传递给视图之前,我还有其他关于"锁定"对象的模糊想法,但我可以预见到这种方法可以产生巨大的副作用.
所以,我的问题:
您的视图并没有真正引起数据访问。视图只是调用模型接口中的 GetDiscount() 方法。这是导致数据访问的模型。事实上,您可以创建 IProduct 的另一个实现,它不会导致数据访问,但视图不会发生任何更改。
当视图尝试提取数据进行显示时,执行延迟加载的模型对象总是会导致数据访问。
是否可以取决于个人品味和喜好。
但是,除非您有充分的理由进行延迟加载,否则我更愿意将数据加载到模型对象中,然后传递“准备好的”数据以供视图显示。
| 归档时间: |
|
| 查看次数: |
2198 次 |
| 最近记录: |