我正在使用MS Enterprise Library 5.0(数据访问块)作为应用程序的主数据层。
虽然我了解OO的基本知识(是的,我需要不断学习-不断地!)我试图通过理解在哪里/为什么/如何使用好的设计来工作,即不必重复代码等,并且仍然试图保持代码的简单易读性,当然还有调试。
首先,我有以下类和默认/示例方法:
(P.S: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);
}
}
}
所以…到目前为止还很基本。我只是想在这里建立一个模板,说明如何继续使用say more“getmembercontacts”方法。也就是说,我应该创建一个通用的“get”方法,这是一个虚拟方法,并重写参数吗?我知道这听起来是很好的补救措施。我想是学习的一部分。
总之,我尝试重新使用“get”方法,其中参数/proc名称明显不同,但是实际返回值(在本例中是XML,因此连接返回的XML块的while/append部分)需要相同,即返回可以保留为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或直接表格形式输出。或者我敢说两个程序……但同样,有兴趣听到这些评论…
再次感谢所有的意见-非常感谢。