C#三层架构总结
2015-09-25 18:42
513 查看
1. 三层项目
复杂项目不能把SQL语句直接写到界面里,不模块化,难以维护,应该采用三层架构
三层只是一个比较好的软件架构,不是非用三层不可,复杂项目才用三层
界面层UI
业务逻辑层BLL(Business Logic Layer)
数据访问层DAL(Data Access Layer)
实体类Model
对数据进行操作的代码写在DAL中,一般就是SQL语句
DAL只有对数据的操作,没有逻辑
BLL调用DAL中的代码进行逻辑操作
2. 创建三层项目
1)需求分析
2)设计数据库
3)创建数据库
4)搭建三层
5)写功能 一般先写DAL 然后BLL 最后UI
3. MD5加密
MD5算法是一种散列(hash)算法 -->32位16进制的字符串
不是纯压缩算法,不是加密算法
MD5值的个数是有限的,但是源数据是无限的,因此存在不同的内容产生相同的MD5值的概率。
基于同样的原因,MD5算法是不可逆的,
而且对于不同的内容产生相同的MD5值概率非常低。攻击的唯一办法就是碰撞。
password字段保存用户输入密码的MD5值,这样即使系统管理员也不知道用户的密码是什么。
判断密码正确性的方法:计算用户输入密码的MD5值,与数据库存储的MD5值进行比较。
如果相等则认为密码正确。这也是为什么很多网站只有密码重置,而没有找回密码功能
案例--第三方支付用MD5对金额、订单号等进行散列计算,来保证数据是对方发出的
二次加密
admin --> MD5值 再将这个MD5值加上比如说12,再算一次MD5值
这样即便很简单的密码也不会算出来的
public static string GetStringMD5(string str)
{
string msg = "";
byte[] buffer = Encoding.UTF8.GetBytes(str);
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] newBuffer = md5.ComputeHash(buffer);
for (int i = 0; i < newBuffer.Length; i++)
{
msg += newBuffer[i].ToString("x2");
}
return msg;
}
文件也可以MD5加密
4. 拼音检索
为什么要用拼音检索?(为客户提供拼音模糊搜素,数据库英文列的查询效率比汉字高)
CHS -- chinese simplied
CHT -- chinese traditional
两种实现方式:
实时检索(速度慢)
增加一个拼音字段(速度快,有冗余)
Microsoft.International.Converters.PinYinConverter命名空间包含了拼音和笔画转换工具的类
先找类 ChineseChar类 -->命名空间(using命名空间) -->程序集(添加程序集)
根据想要实现的功能 找这个类下的方法或者属性
5. 程序处理Excel的技术
1)OLE Automation:程序会启动一个Excel进程,然后和Excel进程进行通讯来进行Excel的操作
能够使用Excel的所有功能。由于其会启动Excel进程,要求要已经安装Excel程序,不适用于服务器
2)OpenXML,微软提供的读写Excel的技术,只能处理xlsx格式的文件
3)NPOI只能处理xls格式文件,不能处理xlsx文件格式,不依赖于Excel,在ASP.NET中最合适
excel表 -- workbook 页 -- sheet 行 -- row 单元格 -- cell
POI是Apache的一个Java开源项目,NPOI是POI在.Net下的移植版本。
很多.net的移植版本开源项目都是在原来的Java版本名称前加上N,如NHibernate,NDoc, NUnit,NAnt
6. 单例模式
案例--点击Form1中的button1弹出一个Form2
1)如果用Form2.show() 会弹出多个Form2,可以操作Form1
2)如果用Form2.showDialog() 会弹出一个Form2,但是Form1无法选择
3)如果我既想弹出一个窗体,又想能够操作Form1 --
//添加单例模式 只有一个对象实例 设为属性
public static Form2 Instance
{
get
{
if (instance == null || instance.IsDisposed)
{
instance = new Form2();
}
return instance;
}
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = Form2.Instance;
f2.Show();
}
7. SVN版本控制(subversion)
开发中的问题
代码的备份
版本的控制
团队代码同步(所有人的代码要求是最新的)
代码回溯(恢复到之前的某个版本)
代码比较
源代码管理模型
服务器端(服务器端要安装软件)
客户端(客户端要安装软件 VS也要安装插件)
源代码数据库
本地工作目录
本地副本
签入签出
冲突
复杂项目不能把SQL语句直接写到界面里,不模块化,难以维护,应该采用三层架构
三层只是一个比较好的软件架构,不是非用三层不可,复杂项目才用三层
界面层UI
业务逻辑层BLL(Business Logic Layer)
数据访问层DAL(Data Access Layer)
实体类Model
对数据进行操作的代码写在DAL中,一般就是SQL语句
DAL只有对数据的操作,没有逻辑
BLL调用DAL中的代码进行逻辑操作
2. 创建三层项目
1)需求分析
2)设计数据库
3)创建数据库
4)搭建三层
5)写功能 一般先写DAL 然后BLL 最后UI
3. MD5加密
MD5算法是一种散列(hash)算法 -->32位16进制的字符串
不是纯压缩算法,不是加密算法
MD5值的个数是有限的,但是源数据是无限的,因此存在不同的内容产生相同的MD5值的概率。
基于同样的原因,MD5算法是不可逆的,
而且对于不同的内容产生相同的MD5值概率非常低。攻击的唯一办法就是碰撞。
password字段保存用户输入密码的MD5值,这样即使系统管理员也不知道用户的密码是什么。
判断密码正确性的方法:计算用户输入密码的MD5值,与数据库存储的MD5值进行比较。
如果相等则认为密码正确。这也是为什么很多网站只有密码重置,而没有找回密码功能
案例--第三方支付用MD5对金额、订单号等进行散列计算,来保证数据是对方发出的
二次加密
admin --> MD5值 再将这个MD5值加上比如说12,再算一次MD5值
这样即便很简单的密码也不会算出来的
public static string GetStringMD5(string str)
{
string msg = "";
byte[] buffer = Encoding.UTF8.GetBytes(str);
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] newBuffer = md5.ComputeHash(buffer);
for (int i = 0; i < newBuffer.Length; i++)
{
msg += newBuffer[i].ToString("x2");
}
return msg;
}
文件也可以MD5加密
4. 拼音检索
为什么要用拼音检索?(为客户提供拼音模糊搜素,数据库英文列的查询效率比汉字高)
CHS -- chinese simplied
CHT -- chinese traditional
两种实现方式:
实时检索(速度慢)
增加一个拼音字段(速度快,有冗余)
Microsoft.International.Converters.PinYinConverter命名空间包含了拼音和笔画转换工具的类
先找类 ChineseChar类 -->命名空间(using命名空间) -->程序集(添加程序集)
根据想要实现的功能 找这个类下的方法或者属性
5. 程序处理Excel的技术
1)OLE Automation:程序会启动一个Excel进程,然后和Excel进程进行通讯来进行Excel的操作
能够使用Excel的所有功能。由于其会启动Excel进程,要求要已经安装Excel程序,不适用于服务器
2)OpenXML,微软提供的读写Excel的技术,只能处理xlsx格式的文件
3)NPOI只能处理xls格式文件,不能处理xlsx文件格式,不依赖于Excel,在ASP.NET中最合适
excel表 -- workbook 页 -- sheet 行 -- row 单元格 -- cell
POI是Apache的一个Java开源项目,NPOI是POI在.Net下的移植版本。
很多.net的移植版本开源项目都是在原来的Java版本名称前加上N,如NHibernate,NDoc, NUnit,NAnt
6. 单例模式
案例--点击Form1中的button1弹出一个Form2
1)如果用Form2.show() 会弹出多个Form2,可以操作Form1
2)如果用Form2.showDialog() 会弹出一个Form2,但是Form1无法选择
3)如果我既想弹出一个窗体,又想能够操作Form1 --
//添加单例模式 只有一个对象实例 设为属性
public static Form2 Instance
{
get
{
if (instance == null || instance.IsDisposed)
{
instance = new Form2();
}
return instance;
}
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = Form2.Instance;
f2.Show();
}
7. SVN版本控制(subversion)
开发中的问题
代码的备份
版本的控制
团队代码同步(所有人的代码要求是最新的)
代码回溯(恢复到之前的某个版本)
代码比较
源代码管理模型
服务器端(服务器端要安装软件)
客户端(客户端要安装软件 VS也要安装插件)
源代码数据库
本地工作目录
本地副本
签入签出
冲突
相关文章推荐
- 分享二:架构设计分享一:关于API分布式服务提供方式
- 求救啊,怎么让百度快速收录我的网站啊!!!!
- 【Jenkins系列之六】Jenkins分布式构建基础——Master/Slave架构
- MediaWiki 架构
- Web API应用架构在Winform混合框架中的应用(1)
- 获取当前IP地址,跳转到对应城市网站。
- 微服务架构思考
- 网站技术笔记-演化
- web网站中腾讯空间分享不了的问题
- 架构设计分享一:关于分布式系统的数据一致性问题(一)
- 用vbs等实现辅助网站的后台运行工作进程(四)
- PHP网站建设的流程与步骤分享
- 用vbs等实现辅助网站的后台运行工作进程(三)
- Jenkins部署.NET网站项目
- 架构设计原则、开发工具
- 0130 分布式网站架构后续:zookeeper技术浅析
- 网站渗透测试
- 如何有效地防止网站和手机APP的数据被采集?
- 【转载】构建高并发高可用的电商平台架构实践
- 用vbs等实现辅助网站的后台运行工作进程