Мне нужно несколько предложений для работы с 3-уровневой архитектурой, недавно я завершил один из моих клиентов с 3-уровневой архитектурой, в котором я преобразовывал данные непосредственно в html из sql server 2008 и извлекал записи в .net, .net просто выполнял задачу рендеринга, поэтому один из моих друзей сказал, что это может значительно снизить производительность, но я никогда не получал никаких жалоб от клиента по поводу того же, поскольку записи, которые я преобразовываю в html из sql server 2008, не являются более 10, и теперь для второго сайта, я хочу принять больше мер предосторожности при отображении данных на сайте, теперь на этот раз я планировал снова использовать 3 уровня, но теперь вместо преобразования данных в HTML на сервере SQL я Перетаскивая записи из SQL Server 2008, на мой уровень данных и на уровне бизнес-уровня, я преобразовываю их в HTML ... так что кто-нибудь может предложить, какой из них лучше, предыдущее преобразование в HTML в SQL SERVER или в. NET
Под преобразованием в HTML я имею в виду:
ALTER PROCEDURE [dbo].[SP_TVT_Article_Get]
@ID INT
AS
BEGIN
DECLARE @HTML NVARCHAR(MAX)
SET @HTML = '';
SELECT @HTML = '
<div style="margin-top:10px;" class="craig"><span style='+(SELECT CASE ISNULL(Author, '') WHEN '' THEN '"display:none; float:left"' ELSE '"display:block; float:left"' END)+'> ' + ISNULL(C.Author, '' )+ ' /</span> ' + DATENAME(DW, C.PublishDate) + ' ' + CONVERT(VARCHAR(15), CAST(C.PublishDate AS TIME), 100) +'</div>
<div class="sony_title">'+C.Title+'</div>' +
CASE
WHEN C.SecondaryTitle IS NOT NULL THEN
'<div class="tokiyo">' + C.SecondaryTitle + '</div>
'ELSE
'<div class="tokiyo">TOKYO: Six broadcasters & theaters in at least 22 will carry 3D coverage.</div>'
END +
'<div class="imgtxt_para01"> <img src="'+isnull(C.Thumbnail,'')+'" style="'+(SELECT CASE ISNULL(C.Thumbnail,'') WHEN '' THEN '"display:none"' ELSE '"display:block"' END)+'" />
'+ CAST(C.Article AS NVARCHAR(MAX)) +'</div>'
FROM CrossArticle_Article C
WHERE Id = @ID
SELECT @HTML
END
и на этот раз я планирую сделать вот так ..
Мой DataLogic Layer будет выглядеть так:
public void GetArticle(int PortalID, int ArticleID, out DateTime PublishDate, out string Article, out string Author, out string Title)
{
object _getArticle = "";
Article = Author = Title = null;
PublishDate = DateTime.Now;
using (SqlCommand comGetArticle = new SqlCommand("sp_EQEM_GetArticle", ConnectDatabase))
{
comGetArticle.CommandType = CommandType.StoredProcedure;
comGetArticle.Parameters.AddRange(new SqlParameter[]{new SqlParameter("@PortalID", PortalID),
new SqlParameter("@ArticleID", ArticleID)});
ConnectDatabase.Open();
using (SqlDataReader reader = comGetArticle.ExecuteReader())
{
while (reader.Read())
{
Title = reader.GetValue(0).ToString();
Author = reader.GetValue(1).ToString();
PublishDate = Convert.ToDateTime(reader.GetValue(2));
Article = reader.GetValue(3).ToString();
}
}
ConnectDatabase.Close();
}
}
и бизнес-слой будет выглядеть так:
public object GetArticle()
{
string Title, Author, Article;
DateTime PublishDate;
connection.GetArticle(PortalID, ArticleID, out PublishDate, out Article, out Author, out Title);
StringBuilder str = new StringBuilder();
str.Append("<div class='aricle_para'>");
str.Append("<h1>" + Title + "</h1>");
str.Append("<span style='float:left; display:" + (String.IsNullOrEmpty(Author) ? "none" : "block") + "'>By " + Author + " | </span><span> " + PublishDate.DayOfWeek.ToString().Substring(0, 3) + ", " + PublishDate.ToString("dd MMM yyyy") + "</span><br />");
str.Append(HttpContext.Current.Server.HtmlDecode(Article));
str.Append("</div>");
return str.ToString();
}
и тогда я буду вызывать функцию GetArticle на странице, где я хочу отобразить статью ...