03 2011 档案
摘要:我们以一个线程例子来说明下抽象工厂是如何工作的.平时我们都会收发邮件,那我们就做个邮件引擎线程. 定义: 抽象工厂模式是一种创建型的模式。上面的比喻说明了抽象工厂就是生产同一个系列产品的东西,因为这一系列的产品是关联的,如果混用就可能出问题,所以就统一的在抽象工厂中进行创建。当要增加一个新的产品系列时,就多写一个工厂子类并添加相应的产品子类就可以了。 我们来看一个类图。 图中,我们可以看到,客户需要得到某系列的产品的时候,直接用相应的工厂子类来创建产品就可以了。示例用例图接来下我们设计个邮件发送的线程实例,先看用例图:代码设计首先创建一个接口ISaaSProcess.cs: /// <s
阅读全文
摘要:园子里讲设计模式的太多了,最近我也在学设计模式,把我自己练的一些代码整理下,写个.NET设计模式学习笔记来让自己在设计模式的功底更深一层。记得金庸小说里风清扬教令狐冲的时候,说过独孤九剑的总纲,无招胜有招,其实设计模式中也有这种总纲,那便是 ?Identify the aspects of your application that vary and separate them from what stays the same.(找到系统中变化的部分,将变化的部分同其它稳定的部分隔开)。而我就有泡妞二十三招比喻设计模式的二十三种模设的开篇吧,作为大家茶余饭后的笑资。 1、ABSTRACT FA
阅读全文
摘要:这个系列我一共写了八篇,从什么是三层架构到一个简单的三层架构从数据库设计、SQLHelper设计、Modle设计、DAL设计、BLL设计到UI的设计作了简单的说明,在这其中有很多读者提出了很好的意见,我很高兴,我只是把我的理解粗略的写出来分享,以此来回顾以前做过的一些项目的总结,希望自己在这其中有些启发,同时也接受读者给我的批评,来使自己有所提高。步步为营 .NET三层架构解析系列步步为营 .NET三层架构解析 一、什么是三层架构步步为营 .NET三层架构解析 二、数据库设计步步为营 .NET三层架构解析 三、SQLHelper设计步步为营 .NET三层架构解析 四、Model设计(四种设计.
阅读全文
摘要:这次我们设计员工操作列表Custom.aspx和部门操作列表Departmant.aspx的设计.以及如何设计GridView的分页功能.先调用BLL设计方法获取数据的List列表,转换成PagedDataSource,再设置PagedDataSource属性来实现分页功能.先看Custom.aspx的设计:<div style="text-align: center"> <asp:GridView ID="gvCustom" DataKeyNames="ID" OnRowDeleting="GridVie
阅读全文
摘要:在我们设计好了三层架构的SQLHelper、Model、DAL和BLL后,我们要开始来调用它设计好的功能了。首先我们来设计Login.aspx,先看界面的设计: <table> <tr> <td style="width: 100px; text-align: right"> 帐户名:</td> <td style="width: 100px"> <asp:TextBox ID="txtUserName" runat="server"><
阅读全文
摘要:BLL层,又叫业务逻辑层,顾名思义,就是放置业务逻辑的地方.业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时,遵循了面向接口设计的思想,那么这种向下的依赖也应该是一种弱依赖关系。因而在不改变接口定义的前提下,理想的分层式架构,应该是一个支持可抽取、可替换的“抽屉”式架构。正因为如此,业务逻辑层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同的角色。对于数据访问层而言,它是调用者;对于表示层.
阅读全文
摘要:IDAL:数据访问层接口,接口是一种系列‘功能’的声明或名单,接口没有实现细节.IDAL的作用是把访问数据的实现与客户端分开,符合“Program to an interface, not an implementation”的设计原理,这样1。客户端不依赖于DAL的具体实现的类2。可以通过工厂类/配置设置改换具体实现的类(譬如从Oracle到SQLServer)DAL:数据访问层,主要用来做数据逻辑处理,具体为业务逻辑层或表示层提供数据服务。先来看下IDAL的设计:ICustom.cs public interface ICustom { /// <summary> /// 添加
阅读全文
摘要:摘自:圣殿骑士 的.NET 技术社区谈之英文篇和.NET 技术社区谈之中文篇英文社区:名称:MSDN 地址:http://msdn.microsoft.com/zh-cn/default.aspx描述:这个网站是大家学.Net的初始网站,也是.net方面官方和权威的资料,相信大家都知道或经常访问这个网站。即是初学者的最佳资料,同时也是中高级开发者的参考资料。同时里面还包括很多视频、library、每月技术杂志、社区等。名称:CodeProject地址:http://www.codeproject.com描述:分类十分的清晰,同时涵盖了.net技术的方方面面,最关键的是它的基本所有文章都带有源码
阅读全文
摘要:说到Model设计,我们先谈谈它的作用:Model又叫实体类,model层里面的一个类对应数据库里面的一张表, 类里面的每一个属性对应表里面的一个字段,每个属性都有自己的 GET 和 SET 方法, 项目中的数据存取都要依靠GET和SET方法来实现.确切的说它不属于纵向的哪一层,而是所有层都要用到的业务实体层。其实最主要的作用还是用来传递参数.下面我就用四种方式来创建Model类:方式一: 创建department的实体类department.cs: public class department { private int _id; private string _departname; p
阅读全文
摘要:数据库设计好了,我们开始设计SQLHelper了,是一个SQL基类.连接数据源: private SqlConnection myConnection = null; private readonly string RETURNVALUE = "RETURNVALUE";打开数据库连接. private void Open() { // 打开数据库连接 if (myConnection == null) { // myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["Con
阅读全文
摘要:要开发用户管理系统,我们首先要了解需求,现在就举一个简单需求,用户表,假设有两种角色用一个字段departID来判断,管理员和员工,我们要先建一个用户表custom和一个部门表department:CREATE TABLE [dbo].[custom]( [id] [int] IDENTITY(1,1) NOT NULL, [cname] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL, [departID] [int] NOT NULL, [age] [int] NOT NULL, [ename] [nvarchar](50) COLLAT
阅读全文
摘要:在项目开发的过程中,有时把整个项目分为三层架构,其中包括:表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。三层的作用分别如下: 表示层:为用户提供交互操作界面,这一点不论是对于Web还是WinForm都是如此,就是用户界面操作。我们网站展示给用户看的界面。 业务逻辑层:负责关键业务的处理和数据的传递。复杂的逻辑判断和涉及到数据库的数据验证都需要在此做出处理。根据传入的值返回用户想得到的值,或者处理相关的逻辑。 数据访问层:见名知意,负责数据库数据的访问。主要为业务逻辑层提供数据,根据传入的值来操作数据库,增、删、改或者其它。 以下我简单介绍下一个用户管理模块: 为了整个项目的开发方
阅读全文
摘要:用list的方法来完成在一个数型结构的文件夹中,可能在拷贝时中间出现了差错,希望有一段代码来比较两个文件夹中的异同数目有多少.主要用到的方法是:1: System.IO.DirectoryInfo.GetFiles("*.*", System.IO.SearchOption.AllDirectories);返回当前目录的文件列表。2:List.Intersect(List);找出兩陣列相同的項目.3:List.Except(List);找出兩陣列不相同的項目-Except新建一个ErrorFrom.cs From代码如下:public partial class Error
阅读全文
摘要:abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。抽象类具有以下特性:抽象类不能实例化。抽象类可以包含抽象方法和抽象访问器。不能用 sealed(C# 参考)修饰符修改抽象类,这意味着抽象类不能被继承。从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。在方法或属性声明中使用 abstract 修饰符以指示方法或属性不包含实现。抽象方法具有以下特性:抽象方法是隐式的虚方法。只允许在抽象类中使用抽象方法声明。因为抽象方法声明
阅读全文
摘要:接口:描述可属于任何类或结构的一组相关功能,通过interface关键字来声明;接口只包含方法、委托或事件和属性的签名(接口包含的成员)、不能包含字段(因为字段是包含数据的)。方法的实现是“继承”接口的类中完成的;接口可以包含的成员的访问修饰符只能且默认为public;一个接口可以从一个或多个基接口继承;接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员;当基类型列表包含基类和接口时,基类必须是列表中的第一项;实现接口的类可以显式实现该接口的成员,显示实现的成员不能通过类实例访问,而只能通过接口实例访问;类和结构可以按照类继承基类或结构的类似方式继承接口;但注意:类或结构可继
阅读全文
摘要:代码重构重构(Refactoring)就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。 一、为什么要重构(Refactoring)1、·持续偏纠和改进软件设计。2、·使代码更易为人所理解。3、·帮助发现隐藏的代码缺陷。4、·从长远来看,有助于提高编程效率。二、何时着手重构(Refactoring)1、·代码中存在重复的代码。2、·过大的类和过长的方法。3、·牵一毛而需要动全身的修改。4、·类之间需要过多的通讯。5、·过度耦
阅读全文
摘要:String.Split方法有6个重载函数:1) public string[]Split(params char[] separator)2) public string[] Split(char[] separator, int count)3) public string[] Split(char[] separator, StringSplitOptionsoptions)4) public string[] Split(string[] separator, StringSplitOptionsoptions)5) public string[] Split(char[] separ
阅读全文
摘要:看代码:using System;using System.Runtime.InteropServices;using System.Web.UI;using System.Web.UI.WebControls.WebParts;using System.Xml.Serialization;using Microsoft.SharePoint;using Microsoft.SharePoint.WebControls;using Microsoft.SharePoint.WebPartPages;namespace LoisAndClark.Ajax{[Guid(“be6ec8e3-2706
阅读全文
摘要:先看下微软官方介绍:如果数据类型在它自己的内存分配中存储数据,则该数据类型就是“值类型”。“引用类型”包含指向存储数据的其他内存位置的指针。值类型 值类型包括:所有数字数据类型 Boolean 、Char 和 Date所有结构,即使其成员是引用类型枚举,因为其基础类型总是 SByte、Short、Integer、Long、Byte、UShort、UInteger 或 ULong引用类型 引用类型包括: String 所有数组,即使其元素是值类型类类型,如 Form委托非类型的元素 以下编程元素未限定为类型,因为您无法将它们中的任何一个指定为声明元素的数据类型:命名空间模块事件属性和过程变量、常
阅读全文
摘要:因业务查询要把时间转换为格式为"01/JAN/2008" 这样的,代码处理如下:DateTime.Now().ToString("dd/MMM/yyyy",new System.Globalization.CultureInfo("en-US"))就是把时间处理为如上这样的一种格式,加入new System.Globalization.CultureInfo("en-US")是因为中间月份要处理为英文的前3个字母的简写,不然的话是中文的一月这样子.简单介绍下datetime用法:参数format格式详细用法格式字符
阅读全文
摘要:代码示例如下:using System;using System.Runtime.InteropServices;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Serialization;namespace LoisAndClark.AspNetExample{public class NormalEditorPart : EditorPart{TextBox _txtNormalBox;protected overrid
阅读全文
摘要:在C#的C/S开发中,用户可以自定义选择文件夹路径,效果如下:首先托一个folderBrowserDialog到From上而后双击Select button 方法如下: private void btnSelectFolder_Click(object sender, EventArgs e) { folderBrowserDialog1.ShowDialog(); txtFilePath.Text = folderBrowserDialog1.SelectedPath; }就能实现如上效果.
阅读全文
摘要:先看实例:在配置文件中加入: <add key="SaveXmlPath" value="D:\SaveXml.xml"/>而后创建一个实全类: public class SingleResultBE { public string Id { get; set; } public string Operation { get; set; } }实现代码如下: private void SavelistToxml(List<SingleResultBE> listInsertResult) { string saveName = C
阅读全文
摘要:方式一:DataRow[] rows = dtStart.Select("", "Createdate asc");DataTable dttwo = dtStart.Clone(); dttwo.Rows.Add(row); dtStart= dttwo ;方式二:DataView dv = dt.DefaultView;dv.Sort = "ID Asc";dt = dv.ToTable();还是第二种比较简单,适合经常用;
阅读全文
摘要:先看代码:private SPListWS.Lists _ws;private int _rowLimit = 100; //Add by spring yang /// <summary> /// /// </summary> /// <param name="listResultsPart"></param> public void UpdateQARelateField(List<SingleResultBE> listResults) { List<SingleResultBE> listRe
阅读全文
摘要:看代码:private void SetListReadOnly(bool isReadOnly,String _listID, String _listVersion){if (string.IsNullOrEmpty(_listID) || string.IsNullOrEmpty(_listVersion))this.InitListInfo();string updateFields =@"<Fields><Method ID='1'><Field ID='{{28cf69c5-fa48-462a-b5cd-27b6f9d
阅读全文
摘要:先看示例代码:// Put the next line into the Declarations section.private System.Data.DataSet dataSet; private void MakeDataTables(){ // Run all of the functions. MakeParentTable(); MakeChildTable(); MakeDataRelation(); BindToDataGrid();} private void MakeParentTable(){ // Create a new DataTable. System.Dat
阅读全文