【发布时间】:2012-10-02 20:27:29
【问题描述】:
我目前正在开展一个集成项目,以连接两个不同的系统。
我的计划是设置一个 HTTP-API 以允许系统 A 通过 HTTP-POST 向系统 B 发出命令。
这些命令将用于向 SQL 服务器数据库发出 CRUD 指令,以检索和更新会员卡数据(例如“创建会员”、“更新会员”等),然后将数据以 XML 格式返回给系统 A。我知道 n 层设计要求我应该有一个具有多个属性的 MembershipCard 类:
public class MembershipCard
{
private string number;
private decimal points;
public string Number
{
get { return number; }
set { number = value; }
}
public decimal Points
{
get { return points; }
set { points = value; }
}
以及调用 DAL 的几种方法:
public string GetPoints(string cardnumber)
{
return MembershipCardDB.BalanceRequest(cardnumber);
}
但是,我在将这种方法证明为静态 DAL 类时遇到了一些困难,MembershipCardDB 似乎执行了我需要的所有工作(见下文):
public static string BalanceRequest(string cardNumber)
{
string response = string.Empty;
string sqlselect =
"SELECT Balance " +
"FROM tbl_MemberShipCard " +
"WHERE Card_No = @cardNumber " +
"FOR XML PATH ('Card'), ROOT('CardBalance')";
using (SqlConnection connect = new SqlConnection("Data Source=TEST\\TEST;Initial Catalog=TEST;User Id=sa;Password=TEST"))
{
connect.Open();
using (SqlCommand command = new SqlCommand(sqlselect))
{
command.Parameters.AddWithValue("@cardNumber", cardNumber);
response = (string)command.ExecuteScalar();
}
}
return response;
}
通过简单地删除 MembershipCard 类并从数据库中提取数据并将其格式化为 XML 有什么我忽略的吗?
【问题讨论】:
-
如果这是整个应用程序中唯一的方法,那么在我的书中删除 MembershipCard 类是可以接受的。 n 层设计结构用于重用和可读性。但我在将 Console.ReadLine 放入打开的 SQL Server 连接时确实存在问题。 SQL Server 连接有限且成本高昂,因此应尽快打开和关闭它们。
-
顺便问一下,你为什么要这样做?我可以建议使用实体框架来做到这一点吗?在当今时代,没有理由像这样手动实施“CRUD 存储系统”。
-
@GeneS 很抱歉,我刚刚将 Console.ReadLine() 用于测试。我已更新问题以更正它。
标签: c# sql-server-2008 api http-post n-tier-architecture