Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Системный подход написанию клиентов к БД, Хочется навести порядок в хаосе! 
:(
    Опции темы
albert21
  Дата 7.4.2006, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 10.1.2006

Репутация: нет
Всего: нет



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

Хотелось бы услышать предлажения по созданию системы (на уровне проекта), которая бы устранила хаос в исходниках. Что бы данные вводились в одном месте, проверялись в дугом обрабатывались в третьем. Может кто-то классы писал специализированные для таблиц, в которых концентрировались типовые методы (добавить, удалить, изменить, отфильтровать, найти). В этом духе вообщем!

Кто-как пишет и организовывает подобные программы?
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
mr.DUDA
Дата 8.4.2006, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Кто как могёт, так и пишет. ИМХО.

Общего рецепта тебе вряд ли кто посоветует, а если что и подскажут - это будет скорее всего основано на собственном опыте, приобретённом при решении единичной задачи, т.е. не панацея от всех бед.

З.Ы. используй датасеты и датаадаптеры smile


--------------------
user posted image
PM MAIL WWW   Вверх
FatherFrost
Дата 8.4.2006, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почетный Мороз
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 27.4.2005
Где: Крайний север

Репутация: нет
Всего: 6



Поддерживаю mr.DUDA, так как в одном случае отсоединенные компоненты работы с БД подойдут, а вот в каком то случае нет...


--------------------
Задаю много глупых вопросов....
PM MAIL ICQ   Вверх
albert21
Дата 8.4.2006, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 10.1.2006

Репутация: нет
Всего: нет



Цитата

используй датасеты и датаадаптеры


Я так и делаю! smile Всё равно есть чувство того, что чего-то не то! Всё работает, но частенько возникают мелкие недочёты, которые упускаешь из виду. И когда прога готова всё равно не уверен что всё учёл! Вот и хочется найти способ организации программы управления базой данных, чтобы ошибки легче было замечать, чтобы логика легче проглядывалась.

На панацею я и не надеялся. сам знаю что её нет smile
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
mr.DUDA
Дата 9.4.2006, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Есть такой подход как ORM (Object-relational mapping), при хорошо написанном нижнем слое он вообще снимает с разработчика все задачи связанные с базами данных, т.к. работа уже идёт на уровне объектов. Почитать можно например тут. Есть ещё язык объектных запросов OQL, разработанный ODMG, его часто используют в ORM. Пример того, чего можно достичь:

Код
// объявляем ORM-классы

public class Customer : PersistentObject
{
      [PersistentProperty]
      public string City;
}

public class Order : PersistentObject
{
      [PersistentAssociation (Aggregated = true)]
      public Customer MyCustomer;

      [PersistentProperty]
      public DateTime OrderDate;

      [PersistentProperty]
      public decimal Amount;
}


// ...


// Пример объектного запроса

PersistentCollection orders = OQLExecutor.ExecuteQuery ("SELECT * FROM " + typeof(Order).FullName + " WHERE OrderDate = ? AND MyCustomer.City = ?", DateTime.Today, "Moscow");

// Обработка результатов запроса

foreach (Order order in orders)
      Console.WriteLine (order.Amount);


Единственная сложность - реализация собственно классов, выполняющих mapping объектов на таблицу базы данных, а также генератора таблиц на основе описания ORM-классов. На codeproject.com есть масса примеров, более или менее удачных, как это можно делать.


--------------------
user posted image
PM MAIL WWW   Вверх
Exception
Дата 9.4.2006, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 2
Всего: 186



Цитата(mr.DUDA @ 9.4.2006, 12:30 Найти цитируемый пост)
Есть такой подход как ORM (Object-relational mapping), при хорошо написанном нижнем слое он вообще снимает с разработчика все задачи связанные с базами данных, т.к. работа уже идёт на уровне объектов.

А ещё есть O/R mapper от Microsoft, который сейчас находится в стадии разработки и называется DLinq smile .
Обзор будет, но как только довершу проект...
PM   Вверх
Exception
Дата 9.4.2006, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 2
Всего: 186



Вот пример использования DLinq:

Код

[Table(Name = "Forums")]
public class Forum
{
    [Column]
    public string Name;

    [Column]
    public string URL;

    [Column(Id = true)]
    public System.Guid ForumID;
}

/*...*/

DataContext context = new DataContext
    (connection);
Table<Forum> forums = context.GetTable<Forum>();
var forumNames = from forum in forums
                 select forum.Name;
foreach(var name in forumNames)
    Console.WriteLine(name);


Он рулит однозначно.
PM   Вверх
mr.DUDA
Дата 9.4.2006, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Exception, канешна рулит smile

Тока тут длинк, а я про C# 2.0 smile


--------------------
user posted image
PM MAIL WWW   Вверх
Exception
Дата 9.4.2006, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 2
Всего: 186



Цитата(mr.DUDA @ 9.4.2006, 14:44 Найти цитируемый пост)
Тока тут длинк, а я про C# 2.0

Ну, он и сейчас работает smile
PM   Вверх
mr.DUDA
Дата 9.4.2006, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Цитата(Exception @ 9.4.2006, 14:00 Найти цитируемый пост)
Ну, он и сейчас работает


Цитата(Exception @ 9.4.2006, 11:02 Найти цитируемый пост)
находится в стадии разработки


Использовать ли его сейчас ?..


--------------------
user posted image
PM MAIL WWW   Вверх
Exception
Дата 9.4.2006, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 2
Всего: 186



А почему бы нет? Я лично использую... Выйдет релиз - буду юзать его.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.