首页 新闻 会员 周边

关于三层架构我的设计,我觉得还是很麻烦的,不详细 复制代码了

0
悬赏园豆:5 [待解决问题]

用了三层架构后 发现麻烦很多,是不是我写错了?

先把数据库表结构列出来吧,看起来比较清晰一点:

文章类别表:
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));
}
}
}
}
}

页面是这样:

dbfox的主页 dbfox | 初学一级 | 园豆:2
提问于:2011-05-28 23:22
< >
分享
所有回答(4)
0

或许LZ写的代码比较少(其实,我也一样)。我刚做完了一个毕业设计,就是用三层做的,刚开始其实灰常的不习惯,因为以前写代码都是写在一个页面了,现在要调来调去的,觉得特麻烦。可是,当随着我的项目逐渐的深入的时候,我慢慢的发现了三层的优势,不复制别人的,就写下我的感受。

1.代码利用率相当高。你想想,要是你没用的话 是不是每次都得写很多很多相似的代码。而且 如果你用三层的话 可以省略很多,就可以省去很多什么增删改查啊等等。。

2.代码优雅。这个刚开始我不怎么懂的,因为又一次我同学过来问我问题,然后看见我写的代码,他就表现的 非常吃惊,虽然我一直都这么做的,觉得很理所当然。呵呵 自夸一下。

3.有层次感。把前端的UI和后台分开来 这个好处不用说吧。要是2个人同时开发的话 那不是可以并行进行???高速度

4.扩展性强悍。现假如你用的是SQL数据库,可是你老板要换成oracle数据库,那这样的话 你就志需要重写数据库代码就OK了,而不用动前端。。

。。。。姑且就这么多 只是我的理解。。

随风浪迹天涯 | 园豆:932 (小虾三级) | 2011-05-29 10:40
其实很多人都会把大部分代码写到一个页面当中,这叫面向过程编程,就不叫面向对象编程了,只有真正领会三层魅力所在才能学会面向对象编程的思想!
支持(0) 反对(0) 王祖康 | 园豆:505 (小虾三级) | 2011-05-29 10:57
0

不要为了三层而三层,这话有点蹩脚。

好处“随风浪迹天涯”已经说了,不过不全面。

小项目也没必要分层,那样增加开发周期,如果是团队开发,好处就显现出来了。

另外不是用了三层就是面向对象了,这个一定不要混淆。

niugm | 园豆:1685 (小虾三级) | 2011-05-29 11:11
0

层次很低  多层的好处没体会到  去到大公司就明白了

JCdon | 园豆:2 (初学一级) | 2011-06-02 17:04
0

分三层和分一层里面建个DAL,BLL文件夹效果是一样的 ,分层不代表可维护,不代表面向对象

关键是对业务逻辑和数据库访问的抽象

TheEnd | 园豆:225 (菜鸟二级) | 2011-06-03 10:53
业务逻辑和数据访问的抽象??给个代码看看撒
支持(0) 反对(0) dbfox | 园豆:2 (初学一级) | 2011-06-03 12:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册