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

如何高效开发三层架构项目

2009-05-14 14:11 281 查看
作为一个程序编辑人员,不但要有敏捷的思维,缜密的逻辑等等.但是一个程序员仅有这些是远远不够的.不管如何我们所有的目
的只有1个-高效切快速开发出符合要求的程序.

就这个问题.本人就简单谈谈自己的"领悟".

下面我们以一个简单的公告栏做例子.

表WebAnn结构
id 标识
title 标题
body 内容
addDate 添加日期

1.我们要知道我们程序要做到什么,实现如何的功能.当然.这只是简单的考虑.
2.需要操作数据库的.需要考虑数据库的构造.并且建出雏形的数据库.

当然这些不是必把所有的可能性全部考虑进去,考虑的那么完善,因为无论考虑的再"周到",到实际开发时,必定要修改这些部分.

3.我们要按照 三层架构 模式建立的初步架构, 我们将 WebAdd的各个属性等封装成一个类,这个类里面包含 Title,Body,
AddDateTime,ID的属性.
4.然后我们可以想象一下这个类都需要实现些什么功能,对于公告.无非 增 删 改 查,我们先将一个个需要的方法预先添加到这
个类中,需要返回值的我们预先返回一个理论失败的值,不考虑实际的操作.返回失败值是因为 如果我们忘记写没个方法的代码
时在初步测试时用理想测试时发现是个错误.必定会查找改处.有些人只要返回理想值就不会测试非理想的操作...
5.初步完成模型的构作,下一步就是要一一对模型中功能书写数据库访问代码.我们新建另一个类例如AnnDAL.cs我们把所有的数
据库代码操作代码都写在这个类里面,将操作结果返回.
6.根据WebAdd中需要实现的功能做逻辑处理,并将操作结果返回.在WebAdd里面我们要对逻辑要做处理.比如一个公告ID不能小于1..
等等的逻辑判断.
7.根据美工实现页面添加相应 代码,将需要的操作进行实现即可.
8.测试

这样一段简单的开发完成,在这个小项目实现中,我们会对数据库,等有新的需求,这样我们可以随时对代码,数据库进行修改.
这样我们不但完成了项目开发,也使得整个开发逻辑顺序非常明了,也实现了 三层结构 (WebAnn 逻辑层,AnnDAL 数据库访问层, .aspx
界面)

最后要说明的是,作为一个程序员来说,都会遇到不通的项目或者自己的私活,这些小项目有时候所需要的功能大多数千篇一律,比如留言版,
公告栏等等.这样我们要把平时收集以及以前用的项目好好保留这样在以后的开发中加以利用.何乐而不为.

以上只是个人对开发的一点点看法.难免牵强,希望大家多多指教

WebAnn.cs

using System;
using System.Collections.Generic;
using System.Text;

namespace MyWeb.WebAnn
{

/// <summary>
/// 公告
/// </summary>
public class WebAnn
{
private string _title, _body;
private DateTime _addDateTime;
private int _id;

/// <summary>
/// 公告标题
/// </summary>
public string Title
{
get { return _title; }
set { _title = value; }
}

/// <summary>
/// 公告内容
/// </summary>
public string Body
{
get { return _body; }
set { _body = value; }
}

/// <summary>
/// 公告添加时间
/// </summary>
public DateTime AddDateTime
{
get { return _addDateTime; }
set { _addDateTime = value; }
}

/// <summary>
/// 公告id
/// </summary>
public int ID
{
get { return _id; }
set { _id = value; }
}

public WebAnn(int id,string title, string body, DateTime addDateTime)
{
_id = id;
_title = title;
_body = body;
_addDateTime = addDateTime;
}

/// <summary>
/// 获得公告(最新)
/// </summary>
/// <param name="top">获得记录数</param>
/// <returns></returns>
public static List<WebAnn> getWebAnnList(int top)
{
return WebAnnDAL.getNewWebAnn(top);
}

/// <summary>
/// 查看公告
/// </summary>
/// <param name="_page">当前页数</param>
/// <param name="_pageSize">分页大小</param>
/// <param name="_pageCount">总页数</param>
/// <param name="_count">记录总数</param>
/// <returns></returns>
public static List<WebAnn> getWebAnnList(int _page, int _pageSize, ref int _pageCount, ref int _count)
{
return WebAnnDAL.getWebAnn(_page, _pageSize, ref _pageCount, ref _count);
}

/// <summary>
/// 添加公告
/// </summary>
/// <param name="webAnn"></param>
/// <returns></returns>
public bool addAnn()
{
return WebAnnDAL.InsertWebAnn(this._body, this._title);
}

/// <summary>
/// 删除公告
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public static bool delAnn(int id)
{
return WebAnnDAL.delWebAnn(id);
}

public static WebAnn getWebAnnById(int id)
{
return WebAnnDAL.getWebAnnById(id);
}
}
}

WebAnnDAL.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;

namespace MyWeb.WebAnn
{
public class WebAnnDAL
{
internal static bool delWebAnn(int id)
{
string sql = "DELETE FROM WebAnn WHERE id=@id;";
return OleDbHelper.ExecuteNonQuery(CommandType.Text, sql, new OleDbParameter("@id", id)) > 0;
}

internal static bool updateWebAnn(int id, string body, string title, string adddate)
{
string sql = "UPDATE WebAnn SET body=@body,title=@title,adddate=@adddate WHERE id=@id;";
OleDbParameter[] prm = new OleDbParameter[] {
new OleDbParameter("@body",body),
new OleDbParameter("@title",title),
new OleDbParameter("@adddate",adddate),
new OleDbParameter("@id",id)
};

return OleDbHelper.ExecuteNonQuery(CommandType.Text, sql, prm) > 0;
}

internal static bool InsertWebAnn(string body, string title)
{
string sql = "INSERT INTO WebAnn (body,title) VALUES (@body,@title);";
OleDbParameter[] prm = new OleDbParameter[] {
new OleDbParameter("@body",body),
new OleDbParameter("@title",title)
};

return OleDbHelper.ExecuteNonQuery(CommandType.Text, sql, prm) > 0;
}

internal static List<WebAnn> getNewWebAnn(int top)
{
string sql = "SELECT TOP " + top.ToString() + " * FROM WebAnn Order BY id DESC";
OleDbDataReader drr = OleDbHelper.ExecuteReader(CommandType.Text, sql, null);
List<WebAnn> lst = new List<WebAnn>();
while (drr.Read())
{
lst.Add(new WebAnn(Convert.ToInt32(drr["id"]), drr["title"].ToString(), drr["body"].ToString(), Convert.ToDateTime(drr["adddate"])));
}
drr.Close();

return lst;
}

internal static List<WebAnn> getWebAnn(int page, int pageSize, ref int pageCount, ref int counts)
{
string sql = "SELECT COUNT(id) FROM WebAnn;";
object obj = OleDbHelper.ExecuteScalar(CommandType.Text, sql, null);
counts = Convert.ToInt32(obj);
pageCount = JTObject.countsToPage(counts, pageSize);

if (page <= 1)
{
sql = "SELECT TOP " + pageSize.ToString() + " * FROM WebAnn ORDER BY [ID] DESC;";
}
else
{
sql = @"select top " + pageSize.ToString() + @" * from WebAnn where id not in
   (select top " + page * pageSize + @" id from WebAnn order by id desc) and order by id desc";
}

OleDbDataReader drr = OleDbHelper.ExecuteReader(CommandType.Text, sql, null);
List<WebAnn> lst = new List<WebAnn>();
while (drr.Read())
{
lst.Add(new WebAnn(Convert.ToInt32(drr["id"]), drr["title"].ToString(), drr["body"].ToString(), Convert.ToDateTime(drr["adddate"])));
}
drr.Close();

return lst;

}

internal static WebAnn getWebAnnById(int id)
{
string sql = "SELECT * FROM WebAnn WHERE id=@id;";

OleDbDataReader drr = OleDbHelper.ExecuteReader(CommandType.Text, sql, new OleDbParameter("@id", id));
WebAnn wenAnn = null;
while (drr.Read())
{
wenAnn = new WebAnn(Convert.ToInt32(drr["id"]),
drr["title"].ToString(), drr["body"].ToString(), Convert.ToDateTime(drr["adddate"]));
}
drr.Close();
return wenAnn;

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