C#三层架构总结

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C# WinForm简单三层框架源码共享。 本框架采用三层架构实现,大家可直接在上面扩展,进行自己系统的二次开发等。 框架中数据库字符串的配置在根目录的DBCfg.xml文件中,该文件中部分内容已经加密, 文件中有两个数据库的字符串,实际过程中只用一个即可(案例中是我自己的项目的需求) 系统框架简介: 采用广为人知的简单三层DAL(DBUtility),BLL,UI层实现,习惯开发web的朋友一看就明白了 框架默认提供很多方法,如需添加新的操作表,只需要新建一个类,拷贝下基本的代码即可 同时提供数据库字符串修改窗体,方便您的修改。 运行本框架需要创建一张表 sql如下: CREATE TABLE [dbo].[Infos]( [Iid] [int] IDENTITY(1,1) NOT NULL, [title] [varchar](255) COLLATE Chinese_PRC_CI_AS NULL, [details] [text] COLLATE Chinese_PRC_CI_AS NULL, [imgs] [varchar](5000) COLLATE Chinese_PRC_CI_AS NULL, [classify] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL, [publiship] [varchar](30) COLLATE Chinese_PRC_CI_AS NULL, [publishman] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL, [publishtime] [datetime] NULL, [isshow] [varchar](4) COLLATE Chinese_PRC_CI_AS NULL, [istop] [varchar](4) COLLATE Chinese_PRC_CI_AS NULL, [hits] [int] NULL, [notes] [varchar](255) COLLATE Chinese_PRC_CI_AS NULL, CONSTRAINT [PK_Infos] PRIMARY KEY CLUSTERED ( [Iid] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值