一: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. ThinkPHP 3.2 DEMO案例系列【phpmailer批量发送邮件】

    但是邮件和短信相比在一些场景依然有着重要的意义和优势: 1:零成本:发邮件没有费用: 2:内容丰富且量大:邮件可以长篇大论:图文并茂: 3:增加访问量:用户很容易通过邮件中的链接访问网站: 好了:下面 ...

  2. 转--python 黑魔法2

    Python 高效编程小技巧 个人博客:临风|刀背藏身 Python 一直被我拿来写算法题,小程序,因为他使用起来太方便了,各种niubi闪闪的技能点也在写算法的过程中逐渐被挖掘到,感谢万能的谷哥度娘 ...

  3. 在O(n) 时间复杂度,O(1)空间复杂度内反转单链表

    在LeetCode中看到判断回文的程序:https://leetcode.com/problems/palindrome-linked-list/ 里面用单链表来存储数据,先反转前半部分的单链表,然后 ...

  4. pyqt5 添加属性-类方法用属性形式访问

    方法一 装饰器法 import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout,QLab ...

  5. POJ 1061 青蛙的约会 (扩展欧几里得算法)

    题目链接 Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件 ...

  6. MySQL复制框架

    一.复制框架 开始接触复制时,看到各种各样的复制,总想把不同类型对应起来,结果越理越乱~究其原因就是对比了不同维度的属性,不同维度得出的结果集之间必然存在交集,没有必要将不同维度的属性安插到成对的萝卜 ...

  7. 前端mock数据的几种方式

    方式 备注 本地php服务架设 直接输出json 使用在线mock服务 如easyMock.apizza.Rap1\2 , 可以远程协作  本地node服务:koa+mongodb    本地node ...

  8. 原 layer父子页面交互

    1.访问父页面元素值 2.访问父页面方法 3.如何关闭弹出的子页面窗口 parent.layer.close(index);//关闭弹出的子页面窗口 4.如何从子页面执行刷新父页面操作 [javasc ...

  9. 零基础http代理http完美代理访问

    如果翻过墙,或者做过渗透啥的,肯定对代理不陌生,说白了,代理服务器就是一个中转站,你对目标网址的请求都会进过代理服务器去请求,类似于一个被你操控的傀儡,别人能知道的也只能是这个代理,从而提升安全性和访 ...

  10. android aysncTask面试解析