惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

K
Kaspersky official blog
Engineering at Meta
Engineering at Meta
D
DataBreaches.Net
Stack Overflow Blog
Stack Overflow Blog
Microsoft Security Blog
Microsoft Security Blog
Y
Y Combinator Blog
B
Blog RSS Feed
GbyAI
GbyAI
P
Proofpoint News Feed
aimingoo的专栏
aimingoo的专栏
MyScale Blog
MyScale Blog
D
Docker
阮一峰的网络日志
阮一峰的网络日志
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recorded Future
Recorded Future
美团技术团队
The Register - Security
The Register - Security
V
Visual Studio Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Tailwind CSS Blog
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
The Blog of Author Tim Ferriss
博客园 - 司徒正美
量子位
B
Blog
F
Fortinet All Blogs
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
MongoDB | Blog
MongoDB | Blog
A
About on SuperTechFans
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
有赞技术团队
有赞技术团队
雷峰网
雷峰网
大猫的无限游戏
大猫的无限游戏
J
Java Code Geeks
L
LangChain Blog
Latest news
Latest news
S
SegmentFault 最新的问题
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Blog — PlanetScale
Blog — PlanetScale
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Cisco Talos Blog
Cisco Talos Blog
F
Full Disclosure
C
Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
W
WeLiveSecurity
T
Tenable Blog
T
Tor Project blog

博客园 - liangyi_neil

移步 面朝大海,春暖花开 Process Desinger 配置基于WebSphere服务的Production Java基础 使用mingw在windows下搭建c/c++IDE环境 gcc for windows 开发环境介绍 关于asp上传下载的iis配置 对服务器上SQLServer数据进行备份和下载 开发思考总结 .net必懂题 装机软件必备(IT人士) EJB 软件架构初读01 33条C#、.Net经典面试题目及答案 Silverlight WebService SOAP 内聚与偶合
写个三层代码
liangyi_neil · 2008-06-24 · via 博客园 - liangyi_neil

        要找个主题去发表一下,面对技术人士,还真难拿出什么来讲。写个啥。

        参考:LTP代码生成器,PetShop4.0,正题:

        数据库设计:

同样很重要的一个过程,直接与后期测试、发布与维护的成功与否相关。

UserInfo:

1            U_ID             int    4            0

0            U_Name         varchar          20           0

0            U_Pass           varchar          32           0

0            U_Mail           varchar          100         1

备注:此数据表只为熟悉三层设计,其他的数据表因注意其他设计,加入必须的AddBy、AddTime、AddIp、UpdateBy、UpdateTime、UpdateIp、Remark、standbyCol等。

设计步骤:

1、  新建网站与解决方案personalOA,配置IIS,新建数据库。

2、  逐个新建类库Model、IDAL、SQLServerDAL、DALFactory、BLL,最后新建网站Web。

注意:每个类库与网站都要设为personalOA引用程序集,即在属性里增加personalOA.。

3、  Model层(UserInfo.cs):

using System;

 

namespace personalOA.Model

{

    
/// <summary>

    
/// 实体类UserInfo

    
/// </summary>


    
public class UserInfo

    
{

        
public UserInfo()

        
{ }

        
Model Model

    }


}


 

4、  IDAL层(IUserInfo.cs):

添加引用Model

using System;

using System.Data;

 

namespace personalOA.IDAL

{

    
/// <summary>

    
/// 接口层IUserInfo 的摘要说明。

    
/// </summary>


    
public interface IUserInfo

    
{

        
成员方法  成员方法

    }


}

5、  SQLServerDAL层(UserInfo.cs):

添加引用Model、IDAL和System.Configuration

using System;

 
using System.Data;

 
using System.Text;

 
using System.Data.SqlClient;

 
using personalOA.IDAL;

 

namespace personalOA.SQLServerDAL

{

     
/// <summary>

     
/// 数据访问类UserInfo。

     
/// </summary>


   

        
public class UserInfo : IUserInfo

        
{

            
public UserInfo()

            
{ }

            
成员方法  成员方法

     }


}


 

在SQLServerDAL里还有一个基础库类DbHelperSQL.cs,因为太多,将它独立拿出写到其他日志里。

注意:在DbHelperSQL.cs中用到Using.Configuration;在引用中添加using Configuration,即是用ConfigurationManager来代替ConfigurationSettings,否则在2.0中会出现过时警告:警告  “System.Configuration.ConfigurationSettings.AppSettings”已过时:“This method is obsolete, it has been replaced by System.Configuration!System.Configuration.ConfigurationManager.AppSettings” 

备注:在PetShop4.0中把基础库类写到类库DBUtility里,我觉得没有必要为它重新加一个类库,只是为了方便理解。

6、  DALFactory层(UserInfo.cs):

添加引用IDAL和System.Web、System.Configuration

using System;

using System.Reflection;

using System.Configuration;

using personalOA.IDAL;

 

namespace personalOA.DALFactory

{

    
/// <summary>

    
/// 工厂类UserInfo 的摘要说明。

    
/// web.config 需要加入配置:(利用工厂模式+反射机制+缓存机制,实现动态创建不同的数据层对象接口)

    
/// DataCache类在导出代码的文件夹里

    
/// <appSettings>

    
/// <add key="DAL" value="personalOA.SQLServerDAL" /> (这里的命名空间根据实际情况更改为自己项目的命名空间)

    
/// </appSettings>

    
/// </summary>


    
public class UserInfo

    
{

        
public static IUserInfo Create()

        
{

            
string path =ConfigurationManager.AppSettings["DAL"];

            
string CacheKey = path + ".UserInfo";

            
object objType = DataCache.GetCache(CacheKey);

            
if (objType == null)

            
{

                
try

                
{

                    objType 
= Assembly.Load(path).CreateInstance(CacheKey);

                    DataCache.SetCache(CacheKey, objType);
// 写入缓存

                }


                
catch { }

            }


            
return (IUserInfo)objType;

        }


    }


}


 

注意:引用System.Web是为了设置工厂模式与反射机制。

在DALFactory里还有DataCache.cs,它提供了GetCache与SetCache两种方法提供反射机制,当然可以直接用System.Web定义,为了方便理解,这样分开更直观。

DataCache.cs:

using System;

using System.Web;

 

namespace personalOA.DALFactory

{

     
/// <summary>

     
/// 缓存相关的操作类

     
/// </summary>


     
public class DataCache

     
{

         
/// <summary>

         
/// 获取当前应用程序指定CacheKey的Cache值

         
/// </summary>

         
/// <param name="CacheKey"></param>

         
/// <returns></returns>


         
public static object GetCache(string CacheKey)

         
{

 

              System.Web.Caching.Cache objCache 
= HttpRuntime.Cache;

              
return objCache[CacheKey];

 

         }


 

         
/// <summary>

         
/// 设置当前应用程序指定CacheKey的Cache值

         
/// </summary>

         
/// <param name="CacheKey"></param>

         
/// <param name="objObject"></param>


         
public static void SetCache(string CacheKey, object objObject)

         
{

              System.Web.Caching.Cache objCache 
= HttpRuntime.Cache;

              objCache.Insert(CacheKey, objObject);

         }


     }


}



备注:在PetShop4.0中,把这2个类写到了DataAccess.cs里,区别不大。

7、  BLL层(UserInfo.cs):

添加引用DALFactory、IDAL和Model

using System;

using System.Data;

using System.Data.SqlClient;

using System.Text;

using personalOA.IDAL;

 

namespace personalOA.BLL

{

    
/// <summary>

    
/// 业务逻辑类UserInfo 的摘要说明。

    
/// </summary>


    
public class UserInfo

    
{

        
public UserInfo()

        
{ }

        
成员方法  成员方法

    }


}



8、  Web层(LoginIn.aspx):

引用BLL、Model和SQLServerDAL。

以下是BtnLoginIn_Click事件的代码:

protected void BtnLoginIn_Click(object sender, EventArgs e)

    
{

        
string PName, PPwd;

        PName 
= TxtPName.Text.Trim();

        PPwd 
= TxtPPwd.Text.Trim();

        UserInfo b
=new UserInfo();

      

        
if (b.Exists(PName,PPwd) == true)

        
{

            Response.Redirect(
"Main.aspx");

        }


        
else

        
{

            Response.Write(
"<script>alert('输入错误!')</script>");

            Response.Redirect(
"LoginIn.aspx");

        }


}



9、  运行,成功!