.net的架构模式
一: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的架构模式的更多相关文章
- Microservice架构模式简介
在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...
- Hibernate(1)——数据访问层的架构模式
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 数据库的概念.逻辑.数据模型概念 应用程序的分层体系结构发展 MVC设计模式与四层结构的对应关系 持久层的设 ...
- Android 四大组件 与 MVC 架构模式
作为一个刚从JAVA转过来的Android程序员总会思考android MVC是什么样的? 首先,我们必须得说Android追寻着MVC架构,那就得先说一下MVC是个啥东西! 总体而来说MVC不能说是 ...
- iOS 架构模式--解密 MVC,MVP,MVVM以及VIPER架构
本文由CocoaChina译者lynulzy(社区ID)翻译 作者:Bohdan Orlov 原文:iOS Architecture Patterns 在 iOS 中使用 MVC 架构感觉很奇怪? 迁 ...
- 《企业应用架构模式》(POEAA)读书笔记
原文地址:<企业应用架构模式>(POEAA)读书笔记作者:邹齐龙(技术-5013 什么是架构 Rolph Johnson认为:架构是一种主观上的东西,是专家级的项目开发人员对系统设计的一些 ...
- 面向对象架构模式之:领域模型(Domain Model)
一:面向对象设计中最简单的部分与最难的部分 如果说事务脚本是 面向过程 的,那么领域模型就是 面向对象 的.面向对象的一个很重要的点就是:“把事情交给最适合的类去做”,即:“你得在一个个领域类之间跳转 ...
- iOS 架构模式-MVVM
iOS 架构模式-MVVM MVVM Model-View-ViewModelMVVM 其实是MVC的进化版,他将业务逻辑从VC中解耦到ViewModel,实现VC的瘦身. 做一个简单的登录判断: 创 ...
- iOS - MVP 架构模式
1.MVP 从字面意思来理解,MVP 即 Modal View Presenter(模型 视图 协调器),MVP 实现了 Cocoa 的 MVC 的愿景.MVP 的协调器 Presenter 并没有对 ...
- Android IOS WebRTC 音视频开发总结(二二)-- 多人视频架构模式
本文主要介绍多人视频会议服务端架构方式,文章来自博客园RTC.Blacker,转载必须说明出处,欢迎关注个人微信公众号blacker,更多详见www.rtc.help 随着移动互联网的迅速发展,很多公 ...
- 浅谈MVC、MVP、MVVM架构模式的区别和联系
MVC.MVP.MVVM这些模式是为了解决开发过程中的实际问题而提出来的,目前作为主流的几种架构模式而被广泛使用. 一.MVC(Model-View-Controller) MVC是比较直观的架构模式 ...
随机推荐
- collectd使用
1.什么是collectd collectd是一款基于C语言研发的插件式架构的监控软件,它可以收集各种来源的指标,如操作系统,应用程序,日志文件和外部设备,并存储此信息或通过网络提供.这些统计数据可用 ...
- POJ - 1039 Pipe(计算几何)
http://poj.org/problem?id=1039 题意 有一宽度为1的折线管道,上面顶点为(xi,yi),所对应的下面顶点为(xi,yi-1),假设管道都是不透明的,不反射的,光线从左边入 ...
- CodeForces - 327D Block Tower
D. Block Tower time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- Nginx动态添加模块
前言 有时候要使用已安装好的Nginx的功能时,突然发现缺少了对应模块,故需对其进行动态添加模块. 操作 # 查看已安装模块 [root@kazihuo ~]# nginx -V nginx vers ...
- 流媒体技术学习笔记之(一)nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器
参照网址: [1]http://blog.csdn.net/redstarofsleep/article/details/45092147 [2]HLS介绍:http://www.cnblogs.co ...
- C#字体与Rectangle简单对应关系
在1920*1080 无缩放分辨率下,Rectangle要至少是字体的2倍+2才不会被遮挡.
- Tomcat环境变量,端口号,编码格式,项目路径,默认页的配置
Tomcat的配置 1.配置环境变量 新建名为:CATALINA_HOME的系统变量,值为我们安装tomcat的目录 2端口号及编码的配置: 找到tomcat安装目录下的sonf下的server文件, ...
- MIPS架构上函数调用过程的堆栈和栈帧
转载于CSDN:http://blog.csdn.net/do2jiang/article/details/5404566 在计算机科学中,Call stack是指存放某个程序的正在运行的函数的信息的 ...
- Nginx Server 配置
http { include mime.types; // 主模块:实现对配置文件包含的文件设定,可以减少主配置文件的复杂度: default_type application/octet-strea ...
- luogu P2627 修剪草坪
传送门 单调队列优化dp板子 表示不大想写详细做法,自己看代码吧qwq (懒) 注意细节,不然就会跟我一样WA4次 // luogu-judger-enable-o2 #include<bits ...