源代码:13033480群共享
郭德纲说的原话是:“不想当裁缝的厨子不是好司机”。
他说的是这个意思吗?
又能天天在家做可口的饭菜(你把厨子理解成给别人做饭,那,我就没办法了);
又买得起得体漂亮的好衣服(你把裁缝理解成给别人量体裁衣,那,我就没办法了);
又开得起宝马奔驰兜风的人(你把司机理解成给别人卖苦力开破车的人,那,我就没办法了);
才能讨得美女的欢心。
呵呵,仁者见仁,我,也就这智商了…
我说的这句“不想当将军的学生,不是好程序员”,可没那么绕人:
将军嘛:要有系统的观点,要指挥别人做事,不需要事事躬亲,这是一种思想;
学生嘛:学生的最高境界是什么?是“学士”啦…
“学士”和“战士”没什么大的区别啦,一个打仗的专业人士,一个学习的专业人士而已…
程序员嘛:计算机专业的学生,一个有系统观点的学士,难道不是一个好的程序员吗??
前面,我们已经当好了一个裁缝,量体裁衣,精心打造了一个数据集Model;我们又把ADO.NET的核心类封装到了SQLHelper中,构建了一个函数集DBUtilty。
那,现在,是时候,我们组建一个职能部门,把那些基础的脏活、累活都交给他们去做了吧?
对了,这个职能部门,就叫做数据访问层DAL…
【操作步骤】
一、添加类库DAL,在DAL中添加类Category.cs,并在类库中添加函数GetCategories(),代码如下:
using System;
using System.Data;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using WestGarden.Model;
using WestGarden.DBUtility;
namespace WestGarden.DAL
{
public class Category
{
private const string SQL_SELECT_CATEGORIES = "SELECT CategoryId, Name, Descn FROM Category";
public IList<CategoryInfo> GetCategories()
{
IList<CategoryInfo> categories = new List<CategoryInfo>();
using (SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_CATEGORIES, null))
{
while (rdr.Read())
{
CategoryInfo cat = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2));
categories.Add(cat);
}
}
return categories;
}
}
}
函数GetCategories()要在SQLHelper中读取连接字符串,因此,需要在SQLHelper.cs中添加代码:
public static readonly string ConnectionStringLocalTransaction = ConfigurationManager.ConnectionStrings["NetShopConnString"].ConnectionString;
注意添加引用System.Configuration。
二、使用用户控件
在Web中新建文件夹Controls并在其中添加用户控件NavigationControl.ascx,窗体页和代码页代码分别如下:
1、NavigationControl.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="NavigationControl.ascx.cs" Inherits="WestGarden.Web.NavigationControl" %>
<%@ OutputCache Duration="100000" VaryByParam="*" %>
<asp:Repeater ID="repCategories" runat="server">
<HeaderTemplate>
<table cellspacing="0" border="0" style="border-collapse: collapse;">
</HeaderTemplate>
<ItemTemplate>
<tr>
<td class="<%= ControlStyle %>"><asp:HyperLink runat="server" ID="lnkCategory" NavigateUrl='<%# string.Format("~/Items.aspx?page=0&categoryId={0}", Eval("CategoryId")) %>' Text='<%# Eval("Name") %>' /><asp:HiddenField runat="server" ID="hidCategoryId" Value='<%# Eval("CategoryId") %>' /></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
2、NavigationControl.ascx.cs
using System;
using System.Web.UI.WebControls;
using WestGarden.DAL;
namespace WestGarden.Web {
public partial class NavigationControl : System.Web.UI.UserControl {
private string controlStyle;
protected string ControlStyle {
get { return controlStyle; }
}
protected void GetControlStyle() {
if (Request.ServerVariables["SCRIPT_NAME"].ToLower().IndexOf("default.aspx") > 0)
controlStyle = "navigationLinks";
else
controlStyle = "mainNavigation";
}
protected void Page_Load(object sender, EventArgs e) {
GetControlStyle();
BindCategories();
string categoryId = Request.QueryString["categoryId"];
if (!string.IsNullOrEmpty(categoryId))
SelectCategory(categoryId);
}
private void SelectCategory(string categoryId) {
foreach (RepeaterItem item in repCategories.Items) {
HiddenField hidCategoryId = (HiddenField)item.FindControl("hidCategoryId");
if(hidCategoryId.Value.ToLower() == categoryId.ToLower()) {
HyperLink lnkCategory = (HyperLink)item.FindControl("lnkCategory");
lnkCategory.ForeColor = System.Drawing.Color.FromArgb(199, 116, 3);
break;
}
}
}
private void BindCategories() {
Category category = new Category();
repCategories.DataSource = category.GetCategories();
repCategories.DataBind();
}
}
}
三、为Default.aspx添加主题WestGarden并添加样式表StyleSheet.css,在Default.aspx中应用主题,删除Default.aspx.cs代码页中的代码及Default.aspx中Reapeter控件,直接把用户控件拖入到页面中。
【几点说明】
1、 用户控件NavigationControl,由于要应用在首页和母版页两个地方,在这两个地方的样式是不一样的,为此,有了函数GetControlStyle(),通过判断地址中有没有default.aspx来确定采用什么样式。
2、 母版页中的导般栏,选择点击分类项后,相应分类项的颜色会改变。为此,有了函数SelectCategory(string categoryId),通过地址栏中获取的CategoryId,查询预先放置在HiddenField中的CategoryId,获取相应的Repeater控件的分类项,并设置相应HyperLink的颜色。
3、 我们把ADO.NET的核心类封装在SQLHelper.cs中,只要告诉它针对哪个连接,命令类型是什么、命令内容是什么,命令参数是什么,就可以使用其中的通用数据库访问函数,完成基本的查询、更新、插入、删除操作。
4、 我们把基本的查询、更新、插入、删除操作的函数,封装在数据访问层DAL中,也就是把访问数据库的基本参数:针对哪个连接、命令类型、命令内容、命令参数,都存放在数据访问层的相应函数中,这样,上一层,在我们现在这个两层的结构中的应用层,就不再做那些具体的连接、执行命令操作;不再做那些具体的配置连接字符串、命令内容的操作,只需要简单发布一个指令,调用一个GetCategories()函数,就一切都OK了,我们,是不是已经由奴隶到将军了呢????
5、关于层次架构的问题,我转载的一篇文章讲得非常好,举的例子也特别地好,大家有时间,可以去看看:http://blog.csdn.net/yousuosi/article/details/7658046
另:前面,我们十八相送,把ADO.NET核心类送到了类库DBUtility中的SQLHelp.cs类中,这次,就一次性把查询商品分类表Name字段的功能段代码,直接形成GetCategories(),直接放在了数据访问层,没有再次来个十八相送,实在只是为了不让程序员中的有情人,再次伤心过度之原因,特此说明...
分享到:
相关推荐
java dal 封装的通用dao 数据访问层,如果你不喜欢用Hibernate、Mybaits这类ORM框架,喜欢Spring JdbcTemplate或DbUtils,那么可以试试这个封装的通用dal
通用数据访问层基类及公用类 Lm.Common.DAL.Sql 通用数据访问层针对sql server 2005及以上版本的实现 Lm.Common.Excel Excel2003的读取与生成 Lm.Common.Excel.OpenXml Excel2007、2010的读取和生成 Lm.Common....
【王继彬】典型三层结构程序设计-第二节:数据访问层DAL
Cobar Client是一个轻量级分布式数据访问层(DAL)基于iBatis(已更名为MyBatis)和Spring框架实现。主要特性:可以支持垂直和水平数据切分数据库集群的访问;支持双机热备的HA解决方案, 应用方可以根据情况选用数据库...
c# asp.net DAL数据访问层通用库源码c# asp.net DAL数据访问层通用库源码c# asp.net DAL数据访问层通用库源码
C# 访问数据库架构设计 可在 757293457 revit二开的群中有下载,书也有 (csdn的设置的积分用户是不可控的,最初设置为0,几天后就自动调整到几十)
这个是我整理的asp.net 2.0教程之三层开发中的一篇《asp.net 2.0中操作数据创建一个数据访问层》,希望大家指正。
DAL——数据访问层 IDAL——数据接口层(控制是选择什么类型的数据库) Bll——业务逻辑层 Model——构造模型(对应数据库字段) 功能很简单,是学习Ajax/Atlas+MVC(三层)入门的好例子 注意:搭建的时候设置根...
三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。
1.所生成的三层架构、工厂模式类名加了后缀,BLL——数据表BLL,DAL——数据表DAL,IDAL——I数据表DAL,Model——数据表Model 2.添加了BLL层实例化方法Instance,方便直接调用 3.添加分页方法,开发更快捷 使用方法:...
对DAL数据访问层的封装,一个泛型接口,一个实现泛型接口的父类,泛型父类实现了对某个表的增删改查,用EF技术实现
创建数据访问层 asp.net #1 |创建数据访问层 该教程从头开始使用 Typed DataSet(强类型 DataSet)创建数据访问层 (DAL),以访问数据库中的信息。
可执行个性化存储过程的数据访问层(DAL) (C#实现)
用于C++的数据访问层接口,可以适用于大部分主流数据库。
Uncode-DAL是一个功能全面的Java数据访问层组件,它深度整合了MyBatis、Spring JDBC以及Hibernate等主流ORM框架,致力于为开发者提供一套简便、高效的数据操作解决方案。该组件支持多数据源配置,能够实现读写分离、...
DAL——数据层 IDAL——数据接口层(控制是选择什么类型的数据库) Bll——逻辑层 Model——构造模型(对应数据库字段) <br/>功能很简单,是学习Ajax/Atlas+MVC(三层)入门的好例子 注意...
dal-client-2.0.13-release javax.servlet-3.0.0.v201103241009.jar mssql-jdbc-6.4.0.jre7.ctrip.jar 合集
数据访问层开发实践 目录: 1)前言 a) 关于数据访问层(Data Access Layer) b) 关于Dal 2) Dal的产生 3) Dal的发展 a) Dal2.1.x b) Dal2.2.x 4) Dal的未来
能够根据建好的数据库生成Modle层与DAL层