我正在为我的应用程序的主要数据层使用 MS Enterprise Library 5.0(数据访问块)。
虽然我了解 OO 的基础知识(是的,我需要不断学习 - 不断学习!),但我正在努力了解在哪里/为什么/如何使用好的设计,即不要不必要地重复代码等,而且仍然试图保持代码简单易读,当然还有调试。
所以首先,我有以下类和默认/示例方法:(ps:db/proc 的返回值是 XML)
public class ajaxget
{
public enum outputType : int { JSON = 0, XML = 1 }
public static string getMemberContacts(string sStartsWith, string sEndswith, outputType eOT)
{
// Get the associated members based upon the criteria
Database db = DatabaseFactory.CreateDatabase("MyDatabase");
DbCommand cmd = db.GetStoredProcCommand("get_memberContactsXML");
db.AddInParameter(cmd, "@memberID", DbType.Int64, Convert.ToInt64(sID));
db.AddInParameter(cmd, "@startsWith1", DbType.String, sStartsWith);
db.AddInParameter(cmd, "@startsWith2", DbType.String, sEndswith);
IDataReader dr = db.ExecuteReader(cmd);
StringBuilder sb = new StringBuilder();
while (dr.Read())
{
sb.Append(dr.GetValue(0));
}
// Clean up
dr.Close();
dr.Dispose();
cmd.Dispose();
// What format to return?
if (eOT == outputType.XML)
{
return sb.ToString();
}
if (eOT == outputType.JSON)
{
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(sb.ToString());
return JsonConvert.SerializeXmlNode(xdoc);
}
}
}
所以..到目前为止非常基本。我只是想在这里建立一个模板,说明我应该如何继续说更多“getMemberContacts”方法。即我应该创建一个通用的“get”方法,它是一个虚拟方法,并覆盖参数?我知道这听起来很治愈,确实如此!我猜是学习的一部分。
所以总而言之,我当然试图重用“get”方法,其中 params/proc 名称明显不同,但是实际返回值(在这种情况下为 XML,因此连接返回的 while/append 部分XML 块)需要相同,即返回可以保留为 XML,或者如果提供,可以返回 JSON。
我意识到这是非常基本的东西/概念,但任何指针/想法都将不胜感激!
大卫。
- - 编辑 - -
只是为了展示 SQL 2008 XML 部分,因为我对关于不直接从 SQL 返回 XML 的评论感到好奇——我再次明白,获取原始数据以便以不同方式使用它是一件好事,但在我的情况下,所有我的前端框架使用 XML 或 JSON(顺便说一下,JS 框架是 www.dhtmlx.com,它非常棒)。
所以 SQL 2008 的过程是:
CREATE PROCEDURE [dbo].[get_messagesForMemberXMLByID]
@memberID as bigint=null,
@days as int=-7
AS
BEGIN
SET NOCOUNT ON;
/* Setup the starting point (in the past) from when we wish to select the messages */
Declare @startDate datetime
set @startDate = DateAdd(d,@days, getdate())
SELECT inboxID as "@id", convert(varchar(12),messageCreated,13) as messageCreated, convert(varchar(8), messageCreated,108) as messageCreatedTime, subject,message, messageOpened, messageFrom, messageFromID
FROM bizzbox
WHERE memberID = @memberID
AND convert(char(8), messageCreated, 112) BETWEEN convert(char(8), @startDate,112) AND convert(char(8), getdate(), 112)
ORDER BY messageCreated desc
FOR XML PATH('row'), ROOT('rows')
END
输出拉回为:
<rows>
<row id="1">
<messageCreated>31 Oct 2010 </messageCreated>
<messageCreatedTime>21:27:32</messageCreatedTime>
<subject>Testing 123</subject>
<message>Wibble Bibble!</message>
<messageFrom>David</messageFrom>
<messageFromID>7</messageFromID>
</row>
</rows>
..这正是我需要为我的前端格式化的数据的方式。
我可以看到为什么不使用这种方法的原因——例如,如果我使用另一个框架或需要直接数据表中的数据怎么办..我想我可以有一个参数变量以 XML 或直接表格形式输出..或者我什至敢说两个 procs .. 但同样,有兴趣听到任何方式的评论...
再次感谢所有输入 - 真的非常感谢。