【发布时间】:2011-03-29 15:30:17
【问题描述】:
虽然我知道有很多方法可以做到这一点,但我只是想知道这是否方式偏离了基础。
我有一个包含三个 DLL、UI(asp.net Web 应用程序)、业务层和 DAL 的解决方案。所以我的代码主要是这样的(非常原始的示例代码):
用户界面
protected void Page_Load(object sender, EventArgs e)
{
Beanpole.Business.Project myProject = new Beanpole.Business.Project();
myProject.LoadProject(Convert.ToInt32(Request["id"].ToString()));
Response.Write(myProject.ProjectName + "<br>" + myProject.ProjectDescription);
}
BLL
using ...
using Business.Providers;
namespace Business
{
public class Project
{
public string ProjectName { get; set; }
public string ProjectDescription { get; set; }
public bool LoadProject(int projectId)
{
DataTable dt = DBProvider.Instance().LoadProject(projectId).Tables[0];
if (dt.Rows.Count == 0)
return false;
LoadProjectFromRow(dt.Rows[0]);
return true;
}
internal void LoadProjectFromRow(DataRow row)
{
this.ProjectName = (string)row["Name"];
this.ProjectDescription = (string)row["Description"];
}
}
}
数据提供者(业务 dll)
namespace Business.Providers
{
public class DBProvider
{
private static IDataAccess _getDataAccessComponent = null;
public static IDataAccess Instance()
{
if (_getDataAccessComponent == null)
{
const string className = "My.Data.DataAccess, My.Data";
_getDataAccessComponent = (IDataAccess)Activator.CreateInstance(Type.GetType(className));
}
return _getDataAccessComponent;
}
}
}
DAL 接口
namespace My.Data
{
public interface IDataAccess
{
DataSet LoadProject(int projectId);
}
}
数据访问
namespace My.Data
{
public class DataAccess : IDataAccess
{
public DataSet LoadProject(int projectId)
{
SqlParameter[] _params = new SqlParameter[1];
_params[0] = new SqlParameter("@ProjectId", SqlDbType.Int) { Value = projectId };
return SqlHelper.ExecuteDataset(connString, "up_LoadProject", _params);
}
}
}
这个设置的主要问题是DBProvider 类。由于某种原因它困扰着我,我似乎无法弄清楚为什么,或者摇晃它并继续前进。这几乎就像它导致我的作家被阻止一样。我有同样的模式在另一个应用程序中工作得很好,一切都很好,但似乎有很多额外的代码无济于事。
任何提示都会有所帮助。
另外,我现在正在开发 3.5,但是一旦我能获得 VS 2010,我会考虑迁移到 4.0。
编辑:周末刚开始使用 VS 2010,因此我将应用程序移至 4.0,以期获得更好的 EF 或 LINQ to SQL 支持。
【问题讨论】:
-
我建议您阅读 David Hayden 撰写的一些博客文章和文章,例如这个:davidhayden.com/blog/dave/archive/2005/07/22/2401.aspx
-
如果你在玩这样一个小项目,扔掉你拥有的整个 DAL 并开始使用 EF 或 Linq-To-Sql 并摆脱 DBProvider,只需让你的 BL 调用Linq-To-Sql 或 EF 实体。如果你去EF,肯定去.net 4.0
-
这最终将是一个相当大的项目,我只是想确保这不是我要在 6 个月后改变的事情。