Я использую MS Enterprise Library 5.0 (блоки доступа к данным) для основного уровня данных моего приложения.
Хотя я понимаю основы ОО (да, мне нужно продолжать учиться - постоянно!)Я пытаюсь понять, где / почему / как использовать хороший дизайн, т. Е. Не обязательно повторять код и т. Д., А также все еще стараюсь сделать код простым для чтения и, конечно, отладкой.
Итак, во-первых, у меня есть следующий класс и метод по умолчанию / пример: (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.
Я понимаю, что этобазовый материал / концепция, но любые указания / идеи будут с благодарностью приняты!
Дэвид.
--- EDIT ---
Просто чтобы показать XML-часть SQL 2008, так как мне любопытно, что я не возвращаю XML прямо из SQL - снова яв целом понимаю, что получение необработанных данных для их использования по-разному - это хорошо, но в моем случае вся моя интерфейсная среда использует либо XML, либо JSON (JS Framework, к примеру, 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>
.. именно так ямне нужны данные, отформатированные для моего интерфейса.
Я вижу причины, по которым не стоит использовать этот метод - то есть, что, если я использую другую структуру или мне нужны данные, например, с прямыми данными .. Я думаю, яможет иметь переменную param для вывода в виде XML или простой табличной формы .. или, смею сказать, даже два процесса ... но, опять же, интересно услышать комментарии в любом случае ...
Еще раз спасибо за все введенные данные -это действительно очень ценится.