C#简单工厂模式学习
刚学习设计模式,还不是太了解,感觉只有多数据库的情况下才用的到,待学习
首先创建空白解决方案,依次创建类库Model,IDAL,SqlServerDAL,DALFactory,BLL,DBUtility,并创建一个窗体程序
首先在窗体程序的App.Config中添加以下设置
<appSettings>
//指定DAL调用类型,DALFactory中使用
<add key="DAL" value=" Nothwind.SqlServerDAL"/>
</appSettings> <connectionStrings>
<add name="con" connectionString="Data Source=127.0.0.1;Initial Catalog=Northwind;User ID=sa;Password=*******;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"/>
</connectionStrings>
在DBUtility中添加助手函数,这里只为了读取连接字符串
namespace Nothwind.DBUtility
{
public class SqlHelper
{
public static string connStr
{
get { return ConfigurationManager.ConnectionStrings["con"].ConnectionString; }
}
}
}
在Nothwind数据库中创建一张表Studen,为了学习及演示方便只创建2个字段Id Int ,Name nvarchar(50),并根据数据库结构创建模型类
namespace Nothwind.Model
{
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
}
}
创建接口类IStudent.cs,IDAL需要添加引用Model类
namespace Nothwind.IDAL
{
public interface IStudent
{
List<Model.Student> GetStudents(); //读取所有Student
Model.Student GetStudentById(int id); //根据Id返回单个Student
}
}
在SqlServerDAL中创建接口实现类Student.cs,SqlServerDAL需要添加DBUtility,IStuden,Model三个项目引用,因为需要读取数据库所以NuGet中安装Dapper
namespace Nothwind.SqlServerDAL
{
public class Student : IDAL.IStudent
{
//根据Id返回单个Student
public Model.Student GetStudentById(int id)
{
using (IDbConnection conn = new SqlConnection(DBUtility.SqlHelper.connStr))
{
string sql = "SELECT Id,Name FROM Student WHERE Id=@Id";
DynamicParameters parameters = new DynamicParameters();
parameters.Add("Id", id);
Model.Student students = conn.Query<Model.Student>(sql, parameters).FirstOrDefault();
return students;
}
}
//返回所有Student
public List<Model.Student> GetStudents()
{
using (IDbConnection conn = new SqlConnection(DBUtility.SqlHelper.connStr))
{
string sql = "SELECT Id,Name FROM Student";
IEnumerable<Model.Student> students = conn.Query<Model.Student>(sql);
return students.ToList();
}
}
}
}
在DALFactory类库中添加DataAccess.cs,为了根据配置文件选择不同的数据库,创建DALFactory。返回程序集的指定类的实例。需要引用IDAL,DBUtility
namespace Nothwind.DALFactory
{
public class DataAccess
{
private static readonly string path = ConfigurationManager.AppSettings["DAL"]; public static IDAL.IStudent CreateStudent()
{
object objectType = Assembly.Load(path).CreateInstance(path + ".Student");
return (IDAL.IStudent)objectType;
}
}
}
BLL类库中添加Student.cs,并添加引用Model,IDAL,DALFactory
namespace Nothwind.BLL
{
public class Student
{
public static Model.Student GetStudentById(int id)
{
IDAL.IStudent student = DALFactory.DataAccess.CreateStudent();
return student.GetStudentById(id);
} public static List<Model.Student> GetStudents()
{
IDAL.IStudent student = DALFactory.DataAccess.CreateStudent();
return student.GetStudents();
}
}
}
在窗体程序中添加一个button及dataGridView,添加以下代码
private void button1_Click(object sender, EventArgs e)
{
List<Model.Student> student = new List<Model.Student>();
student = BLL.Student.GetStudents();
dataGridView1.DataSource = student;
}
效果展示

C#简单工厂模式学习的更多相关文章
- 【2016-10-17】【坚持学习】【Day8】【简单工厂模式】
今天学习简单工厂模式, 结构 一个抽象产品 多个具体产品 一个工厂类,通过传入参数,new出不同的产品 代码: abstract class Product { //所有产品类的公共业务方法 publ ...
- Java设计模式学习记录-简单工厂模式、工厂方法模式
前言 之前介绍了设计模式的原则和分类等概述.今天开启设计模式的学习,首先要介绍的就是工厂模式,在介绍工厂模式前会先介绍一下简单工厂模式,这样由浅入深来介绍. 简单工厂模式 做法:创建一个工厂(方法或类 ...
- 再起航,我的学习笔记之JavaScript设计模式05(简单工厂模式)
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前几 ...
- Java设计模式学习笔记(二) 简单工厂模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...
- 学习设计模式第二十七 - GoF之外简单工厂模式
示例代码来自<深入浅出设计模式>和<大话设计模式> 概述 简单工厂模式又被称为静态工厂模式,属于类的创建型模式.其实质是由一个工厂类根据传入的参量,动态决定应该创建出哪一个产品 ...
- C#简单工厂模式(学习Learning hard讲解笔记)
原味地址http://www.cnblogs.com/zhili/p/SimpleFactory.html 简单工厂模式通俗的理解就是用户与工厂的关系,用户用的东西,工厂来生成,责任明确. 就像大神展 ...
- C#设计模式学习笔记:简单工厂模式(工厂方法模式前奏篇)
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7551373.html,记录一下学习过程以备后续查用. 一.引言 简单工厂模式并不属于GoF23里面的设计模式 ...
- C++简单工厂模式的学习
我们先从最常见的C++类的一个实现开始说起, class API { public: virtual test(std::string s)=0; protected: API(){}; }; cla ...
- 设计模式(二)简单工厂模式(Simple Factory Pattern)
一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式——简单工厂模式. 二.简单工厂 ...
随机推荐
- CF427C题解
Description 有一张带点权有向图,你要在其中修建若干个检查站,使得对于每一个点 \(p\) ,都有 \(\geq 1\) 个检查站,满足: 存在一条从这个检查站出发到点 \(p\) 的路径: ...
- 清晰易懂的RxJava入门实践
导入 我相信大家肯定对ReactiveX 和 RxJava 都不陌生,因为现在只要是和技术相关的网站,博客都会随处见到介绍ReactiveX和RxJava的文章. ReactiveX Reactive ...
- Android面试官:说说你对 Binder 驱动的了解?
面试官提了一个问题:说说你对 binder 驱动的了解.这个问题虽有些 "面试造火箭" 的无奈,可难点就是亮点.价值所在,是筛选面试者的有效手段.如果让你回答,你能说出多少呢?我们 ...
- netty系列之:文本聊天室
目录 简介 聊天室的工作流程 文本处理器 初始化ChannelHandler 真正的消息处理逻辑 总结 简介 经过之前的系列文章,我们已经知道了netty的运行原理,还介绍了基本的netty服务搭建流 ...
- VueApp监听手机物理返回键的事件
代码 第一步创建js文件夹子 在main里面引用 JS文本内容如下 //监听手机物理返回键的事件 document.addEventListener('plusready', function() ...
- rabbitMQ批量删除指定的队列
首先进入到rabbitmq目录下的sbin目录 方法1: ./rabbitmqctl list_queues| grep helloQueue | awk '{print $1}' | xargs - ...
- 英语学习Tips
[edp] 写英语论文那些容易忽略的点: 连字符大小写问题 连字符"-"后首字母的大小写_周树森_新浪博客 (sina.com.cn) reference list 里面的书名要斜 ...
- Java服务突然失败:A fatal error has been detected by the Java Runtime Environment的总结
服务启动以后过段时间自动失败:A fatal error has been detected by the Java Runtime Environment 控制台中的错误信息 A fatal err ...
- pikachu Files Inclusion
文件包含分为远程文件包含和远程文件包含 比如程序员为了提高效率让代码看起来简洁,会使用包含函数的功能,写多个文件 之后需要了进行调用,比如.c写了很多个函数分别在不同的文件里,用的时候直接 引用文件即 ...
- sqli-labs lesson 32-37
宽字节注入: 原理:mysql在使用GBK编码的时候,会认为两个字符为一个汉字,例如%aa%5c就是一个汉字(前一个ascii码大于128才能到汉字的范围).我们在过滤 ' 的时候(也就是从防御的角度 ...