一:ADO.NET实现三层架构

不用三层的普通的查询写法:

 string sql = string.Format("select * from Studnet where StuName like '%{0}%'", txtName.Text);
string strconn = "server=.;database=MySc;uid=sa;pwd=123456";
SqlConnection conn = new SqlConnection(strconn);
SqlDataAdapter da = new SqlDataAdapter("select * fromStuden", conn);
DataSet ds = new DataSet();
try
{
da.Fill(ds);
// dataGridView1.DataSource = ds.Tables[0];
DataTable dt = ds.Tables[0];
txtName.Text = dt.Rows[0]["Name"].ToString(); }
catch (Exception)
{ throw;
}

普通删除的写法:

  SqlConnection conn = new SqlConnection("server=.;database=MySc;uid=sa;pwd=123456");
string id = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
string sql = "delect from Student where stNO=" + id;
SqlCommand comm = new SqlCommand(sql,conn);
conn.Open();

修改的普通写法:

   string strsql = @"UPDATE Student SET [StuName]='0' WHERE [StuNO]={3}";
string id = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
string sql = string.Format(strsql, txtName.Text, id);
SqlConnection conn = new SqlConnection("server=.;database=MySc;uid=sa;pwd=123456");
SqlCommand com = new SqlCommand(sql, conn);
try
{
conn.Open();
com.ExecuteNonQuery();
//刷新数据
}
catch (Exception)
{ throw;
}
finally {
conn.Close();
}

一个简单的DbHelper:

 private static SqlConnection conn = new SqlConnection("server=.;database=Mys,uid=sa;pwd=123456");

       public static int ExecuteSQL(string strsql)
{
SqlCommand comm = new SqlCommand(strsql, conn);
try
{
conn.Open();
return comm.ExecuteNonQuery();
}
catch (Exception ex)
{ throw ex;
}
finally {
conn.Close();
}
} public static int GetDataTable(string strsql)
{
SqlDataAdapter da = new SqlDataAdapter(strsql, conn);
DataSet ds = new DataSet();
try
{
da.Fill(ds);
return ds.Tables[];
}
catch (Exception ex)
{ throw ex;
} } /// <summary>
/// 返回一个单一的值
/// </summary>
/// <param name="strsql">传入的是select打头的sql语句(select count(*),select max(..))</param>
/// <returns>返回的是Object类型</returns>
public static object GetSingle(string strsql)
{
SqlCommand comm = new SqlCommand(strsql, conn);
try
{
conn.Open;
return comm.ExecuteScalar();
}
catch (Exception ex)
{ throw ex;
}
finally {
conn.Close();
}
}

缺点:不是面向对象,客户端不了解后台数据也能完全的操作,而这个三层架构实现不了

解决方案: OOP实现

二:用OOP实现三层架构

  private static IList<Student> GetStudentsBySQL(string strsql)
{
DataTable dt = DbHelper.GetDataTable(sql);
IList<Student> result = new List<Student>();
for (int i = ; i < dt.Rows.Count; i++)
{
Student student = new Student();
student.Sid = int.Parse(dt.Rows[i]["id"].ToString());
student.Sname = dt.Rows[i]["Name"].ToString(); result.Add(student);
} return result;
}
/// <summary>
/// Id查询
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public static Student GetStudentById(int id)
{
string sql = string.Format("select * from Studnet where stuno={0}", id);
try
{
return GetStudentsBySQL(sql)[];
}
catch (Exception)
{ return null;
}
} /// <summary>
/// 查询所有
/// </summary>
/// <returns></returns>
public static IList<Student> GetAllStudent()
{
string sql = "select * from Studnet";
return GetStudentsBySQL(sql); } /// <summary>
/// 姓名查询
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static IList<Student> GetStudentByName(string name)
{
string strsql = string.Format("select * from student where stuname like '%{0}%'", name);
return GetStudentByName(strsql);
}

三:应用抽象工厂+反射实现通用数据源的设计

一:解决思路:

1.利用工厂方法模式(多态)来封装 new SqlServerUser()所造成的变化

说明:工厂模式就是定义一个创建对象的接口,让子类来决定实例化那个类

2.抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类

面向对象的好处:可维护性,可复用,可扩展,灵活性

面向对象的原则:1.类的单一职责

2.开放--封闭原则(对扩展是开放的,对于更改是封闭的)

3.依赖倒转原则(针对接口编程,不要对实现编程)

4.里氏替换原则(子类型必须能够替换它们的父类型)

四:23种设计模式的分类:

一:创建型模式

1.简单工厂模式    2.工厂方法模式    3.抽象工厂模式     4.创建者模式    5.原型模式    6.单例模式

二:结构型模式

1.外观模式    2.适配器模式    3.代理模式    4.装饰模式  5.桥模式    6.组合模式    7.享元模式

三:行为型模式

1.模板方法模式      2.观察者模式     3.状态模式     4.策略模式     5.职责链模式      6.访问者模式      7.调停者模式    8.备忘录模式   9.迭代器模式    10.解释器模式

.net的架构模式的更多相关文章

  1. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

  2. Hibernate(1)——数据访问层的架构模式

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 数据库的概念.逻辑.数据模型概念 应用程序的分层体系结构发展 MVC设计模式与四层结构的对应关系 持久层的设 ...

  3. Android 四大组件 与 MVC 架构模式

    作为一个刚从JAVA转过来的Android程序员总会思考android MVC是什么样的? 首先,我们必须得说Android追寻着MVC架构,那就得先说一下MVC是个啥东西! 总体而来说MVC不能说是 ...

  4. iOS 架构模式--解密 MVC,MVP,MVVM以及VIPER架构

    本文由CocoaChina译者lynulzy(社区ID)翻译 作者:Bohdan Orlov 原文:iOS Architecture Patterns 在 iOS 中使用 MVC 架构感觉很奇怪? 迁 ...

  5. 《企业应用架构模式》(POEAA)读书笔记

    原文地址:<企业应用架构模式>(POEAA)读书笔记作者:邹齐龙(技术-5013 什么是架构 Rolph Johnson认为:架构是一种主观上的东西,是专家级的项目开发人员对系统设计的一些 ...

  6. 面向对象架构模式之:领域模型(Domain Model)

    一:面向对象设计中最简单的部分与最难的部分 如果说事务脚本是 面向过程 的,那么领域模型就是 面向对象 的.面向对象的一个很重要的点就是:“把事情交给最适合的类去做”,即:“你得在一个个领域类之间跳转 ...

  7. iOS 架构模式-MVVM

    iOS 架构模式-MVVM MVVM Model-View-ViewModelMVVM 其实是MVC的进化版,他将业务逻辑从VC中解耦到ViewModel,实现VC的瘦身. 做一个简单的登录判断: 创 ...

  8. iOS - MVP 架构模式

    1.MVP 从字面意思来理解,MVP 即 Modal View Presenter(模型 视图 协调器),MVP 实现了 Cocoa 的 MVC 的愿景.MVP 的协调器 Presenter 并没有对 ...

  9. Android IOS WebRTC 音视频开发总结(二二)-- 多人视频架构模式

    本文主要介绍多人视频会议服务端架构方式,文章来自博客园RTC.Blacker,转载必须说明出处,欢迎关注个人微信公众号blacker,更多详见www.rtc.help 随着移动互联网的迅速发展,很多公 ...

  10. 浅谈MVC、MVP、MVVM架构模式的区别和联系

    MVC.MVP.MVVM这些模式是为了解决开发过程中的实际问题而提出来的,目前作为主流的几种架构模式而被广泛使用. 一.MVC(Model-View-Controller) MVC是比较直观的架构模式 ...

随机推荐

  1. BZOJ3527 [Zjoi2014]力 【fft】

    题目 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. 输入格式 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. 输出格式 n行,第i行输出Ei.与标准答案误差不超过 ...

  2. 20155306 2016-2017-2 《Java程序设计》第九周学习总结

    20155306 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 16.1 JDBC入门 Java语言访问数据库的一种规范,是一套API ...

  3. leetCode- 472. Concatenated Words

    因为每个组合的字符串,至少要有3个index. 起点,中间拼接点,结点.所以可以将字符串分解为子字符串,判断子字符串是否存在.但是,后面字符串的存在必须要在前面字符串已经存在基础上判断. class ...

  4. Linux - 包不同安装方式

    rpm 软件包管理器 安装编译包好的二进制包 方式 rpm -ivh lynx # rpm安装 rpm -e lynx # 卸载包 rpm -e lynx --nodeps # 强制卸载 rpm -q ...

  5. 阿里云3台机器组成集群配置ssh免密码登陆

    1 查询阿里云局网ip 注意:需要配置同一地区同一可用区的机器 才是一个局网 2 配置好hosts文件 3 hostname确认也是正确的 4 生成公钥私钥 三台机器同样操作 ssh-keygen - ...

  6. 解决:[DCC Fatal Error] **.dpk : E2202 Required package '***' not found

    //[DCC Fatal Error] **.dpk : E2202 Required package '***' not found 意思是:[DCC致命错误] *:e2202需包***没有发现 D ...

  7. Python 入门基础17 --加密、表格、xml模块

    今日内容: 1.hashlib模块:加密 2.hmac模块:加密 3.configparser模块:操作配置文件 4.subprocess模块:操作shell命令 5.xlrd模块:excel 6.x ...

  8. shiro自定义realm支持MD5算法认证(六)

    1.1     散列算法 通常需要对密码 进行散列,常用的有md5.sha, 对md5密码,如果知道散列后的值可以通过穷举算法,得到md5密码对应的明文. 建议对md5进行散列时加salt(盐),进行 ...

  9. SpringBoot处理静态资源的两种方式

    静态资源是指----> CSS.JS之类的文件 首先创建SpringBoot Web项目 添加Spring Boot Web Starter <dependency> <gro ...

  10. /etc/my.cnf

    [client] default-character-set=utf8 [mysqld] tmp_table_size = 2048M max_heap_table_size = 2048M max_ ...