您的位置:首页 > 运维架构 > 网站架构

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也要安装插件)

  源代码数据库

  本地工作目录

  本地副本

  签入签出

  冲突

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: