【发布时间】:2017-02-26 22:33:48
【问题描述】:
我想通过在访问数据库时添加另一层来改进我的 .NET 项目。这是我的代码:
namespace Company.Models
{
public static class AgencyBean
{
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static String createGUID(string name)
{
DataAccess dataAccess = new DataAccess();
bool exists = dataAccess.checkIfExists(Id);
if(exist)
{
dataAccess.delete(Id);
}
retur "ok";
}
}
}
我将 DataAccess 类放在一个名为“Helpers”的单独文件夹中,其中包含我的大部分查询:
public class DataAccess
{
public bool checkIfExists(String Id)
{
try
{
SqlConnection cnn = new SqlConnection(dataConnection);
cnn.Open();
SqlCommand check_Id = new SqlCommand("SELECT COUNT(*) FROM TABLE_GUID WHERE ([USER_ID] = @Id)", cnn);
check_Id.Parameters.AddWithValue("@Id", Id);
int UserExist = (int)check_Id.ExecuteScalar();
if (UserExist > 0)
{
return true;
}
else
{
return false;
}
}
catch (SqlException ex)
{
Debug.WriteLine("SQL Exception " + ex);
DisplaySqlErrors(ex);
throw ex;
}
}
}
public class AgentBeanController : Controller
{
// GET: AgentBean
public ActionResult Index(string name)
{
return View();
}
[AllowAnonymous]
[WebMethod]
public string AgentURL() //here we create Agent URL and return it to the view
{
string var = Models.AgentBean.createGUID("TODO");
return var;
}
}
我以非常直接的方式访问数据库。使用更好的技术会如何,因此这种访问可以更安全,例如通过服务层访问? 我正在连接到某个服务器中的现有 sql 数据库,并在我的项目中使用 MVC 架构。
【问题讨论】:
-
你在正确的轨道上。如果您在 Google 上搜索“数据存储库”和“依赖注入”一词,可能会更进一步。存储库的一般概念是,您在模型层中有单独的类来访问数据(就像您现在所做的那样),但它们符合接口。当您实例化您的 AgencyBean 类时,您将接受一个实现该接口的对象作为参数。好处是您可以拥有不接触仅用于单元测试的数据库的接口的第二个实现。像 Ninject 这样的 DI 工具使这更容易编码。
-
现在我理解得更好了,我也想实现单元测试,我发现我需要 DI。感谢您的建议!
标签: c# mysql asp.net-mvc dao