三层的困惑
这个问题困惑我已经很久了,从开始学习。NET到现在……
写三层的时候,遇到这样的情况怎么办?
User{
int UserId,
String UserName
}
Article{
int Id,
int UserId,//作者ID
String Title,
}
现在有个表格要显示如下两列:ArticleTitle,UserName
其中每一行对应每一篇文章。
在三层架构中,应该这样做吧:
//用于存储最后显示于表示层的数据,相当于Fascade。这是页面上用于绑定在Repeater等控件上的最终数据
DataTable dt = new DataTable();dt.addColumn("ArticleTitle");
dt.addColumn("UserName");
//通过BLL对象获取全部文章对象
List articles = SomeClass.GetAllArticles();
//每个文章对象,
foreach(Article a in articles){
//查出其作者对象(*)
User user = SomeClass.FindUser(a.UserId);
//存储数据到dt;
DataRow dr = dt.newRow();
dr["ArticleTitle"] = a.Title;
dr["UserName"] = user.UserName;
dt.rows.add(dr);
}
//显示在页面上
Repeater1.DataSource = dt;
Repeater1.DataBind();
在这里,打星的地方查了N多次数据库,这当然不行,性能很差。
方案一:直接用sql语句构造一个链接的字符串,如:select articles.title,user.Username from articles inner join user on ....
然后再查询。
问题:这样的话,怎么样做到“三层”呢?在BLL,又应该返回哪个对象的集合呢?
方案二:在数据库里使用视图,对应视图在model中构造对应的model.
问题:这样的话,如果表示层改变一个要显示的字段,不就要新建立一个视图,并建立相应的model?
方案三:有人说使用类型化的DATASET,不过这个方案一听就不太喜欢。毕竟想用对象的方式访问数据嘛。
暂时把问题记在这里,何时能解决了,再说吧~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)