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也要安装插件)
源代码数据库
本地工作目录
本地副本
签入签出
冲突