前几天在论坛看到有人讨论三层架构,有人说应该吧UI层和其他层完全分离,UI层只接收传值工作。觉得很有道理。所以动手做了个。在DAL层查询语句。BLL层把数据封装为数据集,然后在UI层直接引用数据集。相当于把DAL层和BLL层看做一个DataSource。UI层只绑定这个DataSource。

描述的不怎么清楚,直接贴代码:

UI层:

DataTable dt = BLL.Select();
        GridView1.DataSource = dt;
        GridView1.DataBind();

BLL层:

public static DataTable Select()
        {
            DataTable ds = DAL.Select();
            DataTable dt = new DataTable("uss");
            DataColumn dc1 = new DataColumn("no", Type.GetType("System.Int32"));
            DataColumn dc2 = new DataColumn("name", Type.GetType("System.String"));
            DataColumn dc3 = new DataColumn("width", Type.GetType("System.Int32"));
            DataColumn dc4 = new DataColumn("height", Type.GetType("System.Int32"));
            DataColumn dc5 = new DataColumn("ip", Type.GetType("System.String"));
            DataColumn dc6 = new DataColumn("scrType", Type.GetType("System.String"));
            DataColumn dc7 = new DataColumn("conType", Type.GetType("System.String"));
            dt.Columns.Add(dc1);
            dt.Columns.Add(dc2);
            dt.Columns.Add(dc3);
            dt.Columns.Add(dc4);
            dt.Columns.Add(dc5);
            dt.Columns.Add(dc6);
            dt.Columns.Add(dc7);
           foreach (DataRow row in ds.Rows)
           {
               DataRow dr = dt.NewRow();
               dr["no"] = int.Parse(row["nNo"].ToString());
               dr["name"] = row["nName"].ToString();
               dr["width"] = int.Parse(row["nWidth"].ToString());
               dr["height"] = int.Parse(row["nHeight"].ToString());
               dr["ip"] = row["pIP"].ToString();
               dr["scrType"] = System.Enum.GetName(typeof(EnumTest.ScrType), int.Parse(row["nScrType"].ToString()));
               dr["conType"] = (ConTypeService.GetTypeById(row["nConType"].ToString())).Controlcode;
               dt.Rows.Add(dr);
           }
           return dt;
        }

DAL层:

public static DataTable Select()
        {
            DBHelpers DBHelpers1 = new DBHelpers();
            string strsql;
            strsql = "select * from users";
            DataTable dt = new DataTable();
            dt = DBHelpers1.Readstr(strsql);
            return dt;
        }

DBHelpers.cs文件:

public DataTable Readstr(String strSql)
        {
            DataTable ds = new DataTable();
            MySqlConnection Conn = new MySqlConnection(strConn);
            Conn.Open();
            MySqlDataAdapter Cmd = new MySqlDataAdapter(strSql, Conn);
            Cmd.Fill(ds);
            Conn.Close();
            return ds;
        }

model层:

1)枚举

public enum ScrType
        {
            单身=1,
            恋爱=2,
            失恋=3,
        }

2)user.cs文件

private ConType ncontype;
        /// <summary>
        /// PK
        /// </summary>
        public ConType Ncontype
        {get { return ncontype; }
            set { ncontype = value; }}

private string nname;
        public string Nname
        {get { return nname; }
            set { nname = value; }}

private int nno;
        public int Nno
        {get { return nno; }
            set { nno = value; }}

private int nwidth;
        public int Nwidth
        {get { return nwidth; }
         set { nwidth = value; }}

private int nheight;
        public int Nheight
        {get { return nheight; }
          set { nheight = value; }}

private int nscrtype;
        public int Nscrtype
        {get { return nscrtype; }
            set { nscrtype = value; }}

private string pip;
        public string Pip
        {get { return pip; }
            set { pip = value; }}

3)ConType.cs文件

private string conde;
        public string Concode
        {get { return concode; }
            set { concode = value; }}
        private string contype;
        public string Contype
        {get { return contype; }
            set { contype = value; }}

这个是涉及到多表查询的。还有枚举......

因为原先找人教的时候他教我的很多东西都是在UI层做。导致UI层的代码很多。无法实现UI层与下层的完全分离,到时候换UI层的话要修改好多代码。所以我想直接封装好然后在UI调用,这样美工即使不懂代码也能在拿到下层的时候直接弄出UI层.....

如果需要单项绑定的话用IList<>同样的全部封装好,然后UI层直接给参数名,修改、删除页同样的封装。如此UI层不就和其他层完全分离了么,到时候要换UI层的话随便怎么换,把WEBFROM转到WINFrom都没问题。都只要换UI,相当于把BLL和DAL与UI完全分离....

三层架构之UI层完全分离相关推荐

  1. 小眼游戏架构:UI篇:三层架构(UI层)

    上一篇我们分析了UI的架构原则以及为什么要这么架构的一些原因,这篇会具体实现架构的方方面面,东西会有点多.我辈求道,岂能求快! 为了避免框架的干扰我们先来配置一下开发环境. LuaFrameWork的 ...

  2. 三层架构(UI、BLL、DAL)

    目录 表示层 / 表现层 / (用户)界面层 UI 业务逻辑层 / 应用程序层 / 领域层BLL 数据访问层 / 数据层 / 持久层DAL 三层框架之间的关系 实体层 / 数据库实体类Entity 三 ...

  3. C# 三层架构与七层架构

    前言 学习三层的时候对于这三层有了大致的了解,但是还是说不出个一二,今天试着总结一下,将自己的知识重新梳理一遍. 三层架构 概念 三层架构通常意义上讲的就是将整个业务应用划分为:表现层(UI).业务逻 ...

  4. 三层架构的bussiness层没用?

    首先说明一下三层架构 举一个被举烂的例子,饭店的例子 1.数据库(或其它数据源)--市场 2.dataaccess层--饭店仓库,从市场买来 3.bussiness层--饭店厨房,加工原料 4.页面层 ...

  5. 三层架构 业务逻辑层 workflow

    三层架构: 用户界面层 user interface layer 业务逻辑层 business logic layer 数据访问层 data access layer 系统的主要功能和业务逻辑都在业务 ...

  6. JAVA三层架构,持久层,业务层,表现层的理解

    转自:https://blog.csdn.net/ljf_study/article/details/64443653 SSH: Struts(表示层)+Spring(业务层)+Hibernate(持 ...

  7. 面向对象——三层架构(表现层、业务层、持久层)

    ① 持久层:采用DAO模式,建立实体类和数据库表映射(ORM映射).也就是哪个类对应哪个表,哪个属性对应哪个列.持久层 的目的就是,完成对象数据和关系数据的转换. ② 业务层:采用事务脚本模式.将一个 ...

  8. 关于MVC与三层架构、个人总结网上杂七杂八得出的最终成果、asp.net (core) MVC、JavaWeb的MVC

    阅读本文必须明白的事情 首先需要明白的是不同语言实现的MVC与三层架构对应的层是不一样的!!! 拿.net来说,.net实现MVC与其他语言的MVC具体实现是不同的,asp.net MVC与 MVC ...

  9. [.NET 三层架构(ADO.NET)+Web Service+多语言]WinForm三层架构重新实现TaskVision,外加WebService提供数据和多语言...

    前言: 关于不同框架实现同一个TaskVision: 前面DebugLZQ先是用WPF(没有使用MVVM,因为前面使用MVVM实现过过点餐系统),因而这个关键点就放在了WPF的Binding上面: 然 ...

最新文章

  1. Everyday English
  2. 【杂谈】为什么邀请大家加入硬核知识星球有三AI
  3. CentOS5.5下SVN部署文档
  4. pymysql安装_pymysql 模块简单使用
  5. JDBC09 CLOB文本大对象
  6. sqlprompt安装注册
  7. Hybrid APP的离线存储总结
  8. select for update是属于排他锁,也属于悲观锁
  9. 扩展欧几里得算法——java
  10. 根据列表内车牌号,统计各省市车牌占有量
  11. 美团笔试题解2022-3-12号
  12. 干货 | Spark Streaming 和 Flink 详细对比
  13. 【游戏王arc-v卡片力量SP改名字ID教程】
  14. 根据经纬度定位百度地图(带图片的)
  15. 【Vue基础知识总结 6,我的支付宝3面+美团4面+拼多多四面
  16. 数据库(MySQL)基础
  17. 无符号格式化输出的区别%d,%u?
  18. matlab图像增强实验总结,图像处理实验报告
  19. 关于征集全国信标委人工智能分委会知识图谱工作组成员单位的通知
  20. linux 进入recovery模式,recovery模式怎么进入,教您recovery模式怎么进入

热门文章

  1. ubuntu 重装系统 Home文件夹数据保存
  2. Google支付从创建商品到支付成功踩过的坑
  3. 路考系统应具备的计算机辅助评判考试项目,科目三路考系统应具备的计算机辅助评判2017新考试项目...
  4. web基础·transform:rotate()搭配perspective实现3D旋转
  5. OSChina 周四乱弹 —— 连繁育下一代的时间都没有
  6. JS基础知识(总结归纳)(常识笔记)
  7. 统一数据交换平台(服务总线)的三大特点
  8. 零基础怎么学画画?像素画和绘画的本质
  9. 移动IPv6光猫各个lan口的作用,移动光猫lan3口可以设置上网吗?
  10. 看完吊打面试官!微信小程序趋势及前景,复习指南