zoukankan      html  css  js  c++  java
  • 三层的困惑

    这个问题困惑我已经很久了,从开始学习。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,不过这个方案一听就不太喜欢。毕竟想用对象的方式访问数据嘛。

    暂时把问题记在这里,何时能解决了,再说吧~

  • 相关阅读:
    LNMP安装后MYSQL数据库无法远程访问解决
    Ubuntu忘记root密码怎么办?
    composer安装出现proc_open没有开启问题的解决方案
    LNMP搭建环境遇到的N多坑
    lnmp HTTP ERROR 500
    LNMP集成运行(开发)环境的部署
    最新javamail 使用方案,可以异步发送邮件
    vi常用快捷键
    Dom4j解析XML文件
    Multiple markers at this line @Override的解决方法
  • 原文地址:https://www.cnblogs.com/zgynhqf/p/1212044.html
Copyright © 2011-2022 走看看