用了三层架构后 发现麻烦很多,是不是我写错了?
先把数据库表结构列出来吧,看起来比较清晰一点:
文章类别表:
create table Category(
@ID int,
@Name nvarchar(50)
)
文章表:
create table Article(
@ID int,
@Title nvarchar(200),
@content ntext,
@CID int -----------这个是文章类别ID
)
标签表:
create table Tags(
@ID int,
@Name nvarchar(50)
)
文章 与 标签 对应关系表(说明:文章可以有多个标签):
create table ArticleIDTagID(
@ID int,
@ArticleID int,
@TagID int
)
文字的实体层
namespace MODEL
{
public class article
{
public article()
{ }
private int _id;
private int _cid = 0;
private string _title = "";
private string _content = "";
private DateTime _datetime = global::System.DateTime.Now;
private int _hits = 0;
private string _categoryName = "";
private int _countMsg = 0;
}
}
namespace DAL
{
public class article
{
public int Add(MODEL.article article)
{
SqlParameter[] sps =
{
new SqlParameter("@title",article.Title),
new SqlParameter("@content",article.Content),
new SqlParameter("@cid",article.CID)
};
object obj = db.ExecuteScalar("insert into [article](title,content,cid) values(@title,@content,@cid);select @@IDENTITY", sps);
if (obj == null)
{
return 0;
}
else
{
return Convert.ToInt32(obj);
}
}
}
}
namespace BLL
{
public class article
{
/// <summary>
/// 添加文章
/// </summary>
/// <param name="articleMod">文章</param>
/// <param name="tagCollection">标签集合</param>
/// <returns></returns>
public int Add(MODEL.article articleMod,params MODEL.tag[] tagCollection)
{
int ArticleID=0;
DAL.article article=new DAL.article();
ArticleID = article.Add(articleMod);
if (tagCollection.Length > 0)
{
DAL.tag tag = new DAL.tag();
DAL.aidtid aidtid = new DAL.aidtid();
for (int i = 0; i < tagCollection.Length; i++)
{
int TagID = tag.Add(tagCollection[i]);
aidtid.Add(new MODEL.aidtid(ArticleID, TagID));
}
}
return ArticleID;
}
}
}
ADDArticle.aspx
namespace WEB.mgr
{
public partial class AddArticle : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string action = Request.QueryString["action"];
if (action == null) action = "";
if (action=="save")
{
string title=Request.Form["title"]; //文章标题
if (title == null) {title = "";}
string content = Request.Form["content"];//文章内容
if (content == null) {content = "";}
string CategoryID = Request.Form["CategoryID"];//文章类别ID
if (!Lib.StringHelper.isSafeNum(CategoryID)){ CategoryID = "0";}
string tags = Request.Form["tags"]; //文章标签
if (tags == null) {tags = "";}
tags=tags.Trim().Replace(",",",");
if (tags.Length>0)
{
string[] tagsCollection =tags.Split(',');
List<MODEL.tag> list=new List<MODEL.tag>();
for (int i = 0; i < tagsCollection.Length; i++)
{
if (tagsCollection[i].Trim().Length>0)
{
list.Add(new MODEL.tag(tagsCollection[i]));
}
}
new BLL.article().Add(new MODEL.article(Convert.ToInt32(CategoryID), title, content), list.ToArray());
}
else
{
new BLL.article().Add(new MODEL.article(Convert.ToInt32(CategoryID), title, content));
}
}
}
}
}
页面是这样:
或许LZ写的代码比较少(其实,我也一样)。我刚做完了一个毕业设计,就是用三层做的,刚开始其实灰常的不习惯,因为以前写代码都是写在一个页面了,现在要调来调去的,觉得特麻烦。可是,当随着我的项目逐渐的深入的时候,我慢慢的发现了三层的优势,不复制别人的,就写下我的感受。
1.代码利用率相当高。你想想,要是你没用的话 是不是每次都得写很多很多相似的代码。而且 如果你用三层的话 可以省略很多,就可以省去很多什么增删改查啊等等。。
2.代码优雅。这个刚开始我不怎么懂的,因为又一次我同学过来问我问题,然后看见我写的代码,他就表现的 非常吃惊,虽然我一直都这么做的,觉得很理所当然。呵呵 自夸一下。
3.有层次感。把前端的UI和后台分开来 这个好处不用说吧。要是2个人同时开发的话 那不是可以并行进行???高速度
4.扩展性强悍。现假如你用的是SQL数据库,可是你老板要换成oracle数据库,那这样的话 你就志需要重写数据库代码就OK了,而不用动前端。。
。。。。姑且就这么多 只是我的理解。。
不要为了三层而三层,这话有点蹩脚。
好处“随风浪迹天涯”已经说了,不过不全面。
小项目也没必要分层,那样增加开发周期,如果是团队开发,好处就显现出来了。
另外不是用了三层就是面向对象了,这个一定不要混淆。
层次很低 多层的好处没体会到 去到大公司就明白了
分三层和分一层里面建个DAL,BLL文件夹效果是一样的 ,分层不代表可维护,不代表面向对象
关键是对业务逻辑和数据库访问的抽象