2009-03-04 2 views
3

Я использую блок приложений доступа к данным .Net для библиотеки данных для моего уровня доступа к данным.Дизайн уровня доступа к данным (DAL)

В моей категории класса DAL, у меня есть такие методы, как:

GetProductsInCategory (INT CatID), GetAllProducts, GetCategories и т.д.

Мой вопрос: где я ставлю эту строку кода?

DatabaseFactory.CreateDatabase("MyDB"); 

мне положить его в каждом методе выше или я есть базовый класс, который будет возвращать объект базы данных для моего класса DAL.

Кроме того, следует ли использовать эти методы класса DAL как статические?

ответ

3

Я предпочитаю базовый класс, который возвращает обычные объекты, такие как соединение, в вашем примере базы данных.

Вот ссылка на Desing Доступ к данным слоя: .NET Application Architecture: the Data Access Layer

Я использую Microsoft Enterprise Library Data Access Block Application. Он делает большинство вещей, упомянутых здесь. но общие вещи, такие как соединения или транзакции, поступают в мой базовый класс.

alt text

Класс DataServiceBase обеспечивает функциональные возможности общего доступа к данным, как открытие соединения с базой данных, управлением транзакцией, настройкой параметров хранимых процедур, выполнением команд, и так далее. В других словах класс DataServiceBase содержит общий код базы данных, а предоставляет набор вспомогательных методов для использования в отдельных данных классов обслуживания . Полученные данные классов используют вспомогательные методы в DataServiceBase для конкретных целей , например, выполнение определенной команды или запуск определенного запроса.

+0

Если у вас есть базовый класс, вам не нужен фабричный метод, поскольку производные классы могут просто получить доступ к 'protected Database _myDatabase'. –

+0

@Ian Quigley: да, вам нужно создать экземпляр вашей «защищенной базы данных _myDatabase», поэтому вам нужен фабричный класс в конструкторе базового класса. – Canavar

+0

спасибо за советы ур .. у меня будут все мои классы DAL, полученные из базового класса DBManager. Этот класс будет иметь защищенный метод GetDatabase(), который будет иметь код: return DatabaseFactory.CreateDatabase ("MyDB"); И мой метод в производном классе будет выглядеть так: ... (заключено в следующем комментарии) –

1

спасибо за ур tips..i будет иметь все мои классы DAL, полученные от базового класса DBManager.This класса будет иметь защищенный метод, называемый GetDatabase(), который будет иметь код: вернуть DatabaseFactory.CreateDatabase («MyDB»); И мой метод в производном классе будет выглядеть так: ..

public DataSet GetProductsInCategory(int Category) 
{ 
Database db = base.GetDatabase(); 
DbCommand dbCommand = db.GetStoredProcComman("GetProductsByCategory"); 
db.AddInParameter(dbCommand, "CategoryID", DbType.Int32, Category); 
return db.ExecuteDataSet(dbCommand); 
} 

этот дизайн DAL выглядит нормально?

+0

Да, это выглядит хорошо. – Canavar

0

Я бы предложил посмотреть на использование SubSonic для создания DAL и создания объектов. Он реализует блок приложений Microsoft, но предоставляет простые (и надежные) возможности запроса, например;

SubSonic.Query qry = new SubSonic.Query(Usr.Schema); 
qry.SetSelectList(Usr.Columns.UserPkid); 
qry.QueryType = SubSonic.QueryType.Select; 
qry.AddWhere(Usr.UsernameColumn.ColumnName, SubSonic.Comparison.Equals, Username); 

using (IDataReader reader = qry.ExecuteReader()) 
{ 
    while (reader.Read()) 
    { 
     Trace.WriteLine("Fetched User Pkid [" + reader[Usr.Columns.UserPkid].ToString() + "]"); 
    } 
} 

И, конечно, он реализует ActiveRecord шаблон поэтому классы объектов имеют методы .Delete(), .Add(), .get() типа.

Смежные вопросы