虽然我知道有很多方法可以做到这一点,但我只是想知道这是否方式偏离基础。
我有一个包含三个DLL,UI(asp.net Web应用程序),业务层和DAL的解决方案。所以我的代码主要看起来像这样(非常原始的示例代码):
UI
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"];
}
}
}
数据提供商(Business 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支持。
答案 0 :(得分:0)
我完全同意Jimmy Hoffa的观点。除非你有一个非常好的理由,否则你不应该在2010年进行自定义数据访问。在您将要在未来几年内咒骂您的名字之后,您的头痛和任何必须支持该产品的开发人员都会感到头疼;)
像nHibernate&amp; amp;很久以前,实体框架甚至Codesmith或T4的代码解决了这个问题。
整个n层堆栈现在几乎都是商品:
ORM - &gt;网络服务 - &gt; UI,
如果你是MS唯一的商店等于: EF - &gt; WCF(域服务/数据服务) - &gt; ASP.NET(MVC)