推荐asp.net MVC模型设计方法
本文关键字:方法 模型 MVC asp net 推荐 | 更新日期: 2023-09-27 18:04:05
我正试图决定一个我即将开始的新项目的最佳方法,当它涉及到我的模型设计(我使用的是Dapper.net)。
我喜欢让我的模型带有对象而不是外键属性,即
public Post LastPost { get; set; }
和
public int LastPostId { get; set; }
然而,如果我实现这种干净的方法,我必须对所有对象进行多映射(这会导致对象内对象的潜在循环引用,或者必须在某个点停止多映射,因此在对象树的某个点上以NULL对象结束)。此外,如果我在一定程度上做多映射,那么我可能会导致不必要的工作,执行连接等,当它们并不总是需要的。
或者,如果我决定使用多映射在"按需"的基础上填充对象中的对象(在我的一些repos方法中执行多映射,因为它需要,而在其他repos方法中,不要费心填充对象),那么它感觉有点脏,因为我不能总是确定对象(在对象中)是否为空。
我过去使用过NHibernate(或者至少是它的一些更基本的功能),并没有遇到这样的困境,因为我的模型中总是有对象,如果/当需要它们的时候,我可以依靠延迟加载来获取它们——然而,在Dapper.net中没有延迟加载,我真的不确定最好的方法是什么?
为什么不两全其美呢?
bool _lastPostLoaded;
private Post _lastPost;
public Post LastPost
{
get
{
if(!_lastPostLoaded)
{
_lastPost = cnn.Query<Post>("select * from Posts where Id = @lastPostId",
new {lastPostId});
_lastPostLoaded = true;
}
return _lastPost;
}
set
{
_lastPost = value;
_lastPostLoaded = true;
}
}
这允许您在需要时使用多映射和延迟加载,当您是懒惰的;
很好,这是延迟加载代理模式