首页 新闻 赞助 找找看

发现 MODEL 层 很是 麻烦,所以改写了下,代码如下,不晓得合适不,求指点

0
[已关闭问题] 解决于 2011-06-26 13:07

MODE 层 代码

namespace MODEL
{
public class Article
{
int _ID=0;
int _CID=0;//类别ID
string _Title="";//标题
DateTime _AddDate=DateTime.Now;//添加日期
string _Content="";//内容
int _Hits=0;//点击次数
int _Count=0;//评论次数
public Article()
{

}

//数据库记录实例化为 Article,这个地方 从数据库 读出一条记录后 可以 直接实例化 MODEL,不需要 在 一个个去写
public Article(DataRow dataRow)
{
DataColumnCollection DCC
= dataRow.Table.Columns;
if (DCC.Contains("id"))
{
_ID
= DataHelper.Int(dataRow["id"]);
}
if (DCC.Contains("cid"))
{
_CID
= DataHelper.Int(dataRow["cid"]);
}
if (DCC.Contains("hits"))
{
_Hits
= DataHelper.Int(dataRow["hits"]);
}
if (DCC.Contains("count"))
{
_Count
= DataHelper.Int(dataRow["count"]);
}

if (DCC.Contains("adddate"))
{
_AddDate
= DataHelper.dateTime(dataRow["adddate"]);
}
if (DCC.Contains("title"))
{
_Title
= DataHelper.String(dataRow["title"] );
}
if (DCC.Contains("content"))
{
_Content
=DataHelper.String( dataRow["content"] );
}
}
//外部接受过来的数据实例化类 使用 hashTable 构造 类
public Article(Hashtable hashtable)
{

if (hashtable.Contains("id"))
{
_ID
= DataHelper.Int(hashtable["id"]);
}

if (hashtable.Contains("cid"))
{
_CID
= DataHelper.Int(hashtable["cid"]);
}
if (hashtable.Contains("hits"))
{
_Hits
= DataHelper.Int(hashtable["hits"]);
}
if (hashtable.Contains("count"))
{
_Count
= DataHelper.Int(hashtable["count"]);
}

if (hashtable.Contains("adddate"))
{
_AddDate
= DataHelper.dateTime(hashtable["adddate"]);
}
if (hashtable.Contains("title"))
{
_Title
= DataHelper.String(hashtable["title"] );
}
if (hashtable.Contains("content"))
{
_Content
= DataHelper.String(hashtable["content"] );
}
}
public Article(int id,int cid,string title,DateTime addDate,string content,int hits,int count)
{
_ID
= id;
_CID
= cid;
_Title
= title;
_AddDate
= addDate;
_Content
= content;
_Hits
= hits;
_Count
= count;
}
public Article(int cid, string title, DateTime addDate, string content, int hits, int count)
{
_CID
= cid;
_Title
= title;
_AddDate
= addDate;
_Content
= content;
_Hits
= hits;
_Count
= count;
}
public Article( int cid, string title, string content)
{
_CID
= cid;
_Title
= title;
_Content
= content;
}
public Article(int id, int cid, string title, string content)
{
_ID
= id;
_CID
= cid;
_Title
= title;
_Content
= content;
}

public int ID
{
get { return _ID; }
set { _ID = value; }
}
public int CID
{
get { return _CID; }
set { _CID = value; }
}
public string Title
{
get { return _Title; }
set { _Title = value; }
}
public DateTime AddDate
{
get { return _AddDate; }
set { _AddDate = value; }
}
public string Content
{
get { return _Content; }
set { _Content = value; }
}
public int Hits
{
get { return _Hits; }
set { _Hits = value; }
}

public int Count
{
get { return _Count; }
set { _Count = value; }
}
}
}

RequestData 类:代替 Request.Form; 上面用到的,作用是 把 Request.Form;里面的 name value 保存到一个 hashTable 里面

using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Web;

/// <summary>
///RequestData 的摘要说明
/// </summary>
public class RequestData
{
public RequestData()
{
//
//TODO: 在此处添加构造函数逻辑
//

}
public static Hashtable Get()
{
Hashtable _Hashtable
= new Hashtable();
NameValueCollection NVC
= HttpContext.Current.Request.Form;
for (int i = 0; i < NVC.Count; i++)
{
_Hashtable.Add(NVC.Keys[i].ToString().ToLower(), NVC[NVC.Keys[i]]);
}
return _Hashtable;
}

}

UI:

ArticleAdd.aspx

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<form action="?action=save" method="post">
标题:
<input type="text" value="134" name="Title" /><br />
内容:
<input type="text" value="134" name="Content" /><br />
日期:
<input type="text" value="1989 07 18" name="AddDate" /><br />
类别ID:
<input type="text" value="134" name="CID" /><br />
<input type="submit" value="submit" />
</form>
</body>
</html>

ArticleAdd.aspx.cs

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using MODEL;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Hashtable Has
= RequestData.Get();
Article ArticleMOD
=new Article(Has); //实例化 MODEL


}
}
问题补充:

补充下,我还写了一个类 ,专门转换数据类型的,确保 不存在 null 

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

namespace MODEL
{
class DataHelper
{
public static int Int(object val)
{
int rval = 0;
if (val == null)
{
rval
= 0;
}
else
{
try
{
rval
= Convert.ToInt32(val);
}
catch
{
rval
= 0;
}
}
return rval;
}

public static DateTime dateTime(object val)
{
DateTime rval
= DateTime.Now;
if (val!=null)
{
try
{
rval
= Convert.ToDateTime(val);
}
catch
{

rval
= DateTime.Now;
}
}
return rval;
}

public static string String(object val)
{
string rval = "";
if (rval!=null)
{
try
{
rval
= Convert.ToString(val);
}
catch
{

rval
= "";
}
}

return rval;
}
}
}

先说说 好处 :

不需要 一个个去 接收数据了

不需要 在UI 层去 转换数据类型了 

dbfox的主页 dbfox | 初学一级 | 园豆:2
提问于:2011-06-06 20:39
< >
分享
其他回答(1)
0

  看了好一会才明白,这个方法蛮不错,谢谢!

hardersen | 园豆:206 (菜鸟二级) | 2011-06-06 20:50
兄弟 帮我问问,这样写有什么弊端
支持(0) 反对(0) dbfox | 园豆:2 (初学一级) | 2011-06-07 10:49
0

这样写,ui层和DAO层耦合度太高啦

TFS | 园豆:89 (初学一级) | 2011-06-07 17:00
这样 耦合度高的话,会有哪些影响呢?
我能想到的是 当 数据库 加字段 删除字段的时候 可能会 麻烦
还有就是 按照常规的写法,数据库 删除字段 或者添加 字段 基本上 也要改个遍
但是这个 我写了一个 代码生成工具 ,根据数据库 结构生成 的 所以 也不是麻烦
支持(0) 反对(0) dbfox | 园豆:2 (初学一级) | 2011-06-07 17:23
代码生成工具固然方便。但是它是在项目开始时使用。到了项目迭代时:你不可能通过代码生成工具来大批量生成Code。因为有些业务逻辑是工具无法完成的
支持(0) 反对(0) TFS | 园豆:89 (初学一级) | 2011-06-08 09:28
其实技术的应用:就是在你项目中权衡你的需求。
支持(0) 反对(0) TFS | 园豆:89 (初学一级) | 2011-06-08 09:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册