Хотя я знаю, что есть много способов сделать это, мне просто интересно, является ли это способом вне базы.Настройка правильного приложения nTier
У меня есть решение, в котором есть три DLL, UI (веб-приложение asp.net), бизнес-уровень и 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 длл)
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 прямо сейчас, но думать о переезде в 4,0 раз я могу получить VS 2010.
Edit: Просто взял VS 2010 в выходные дни, так что я двигаюсь приложение над до 4.0 в надежде на улучшение поддержки EF или LINQ to SQL.
Я предлагаю вам прочитать некоторые сообщения и статьи в блоге, которые написал Дэвид Хейден, например это: http://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 месяцев. –