Комментарии 14
Велосипед какой-то… Может лучше linq?
var db = new DatabaseContext();
var results = from product in products where is_visible = 1 select product;
// do something?
var db = new DatabaseContext();
var results = from product in products where is_visible = 1 select product;
// do something?
К сожалению, с linq я ещё плохо знаком, поэтому мне не совсем понятно, что такое DatabaseContext.
Ознакомсья, сократишь кол-во строк с 90 до 5ти.
А вообще, даже если бы ты использовал Typed DataSet, у тебя и с ним было бы не больше 5ти строк. Посмотри на инструменты вокруг — уже давно всё есть для работы с бд. И заново писать один из них не имеет смысла. Это одна из проблем начинающих — начинают изобретать велосипеды. Если работаешь, судя по всему, уже 10 месяцев программистом — пора бы уже понять :)
Краткий экскурс в linq: www.gotdotnet.ru/LearnDotNet/DotNet30/441508.aspx
Как только вникнешь — гугли LINQ to SQL :)
А вообще, даже если бы ты использовал Typed DataSet, у тебя и с ним было бы не больше 5ти строк. Посмотри на инструменты вокруг — уже давно всё есть для работы с бд. И заново писать один из них не имеет смысла. Это одна из проблем начинающих — начинают изобретать велосипеды. Если работаешь, судя по всему, уже 10 месяцев программистом — пора бы уже понять :)
Краткий экскурс в linq: www.gotdotnet.ru/LearnDotNet/DotNet30/441508.aspx
Как только вникнешь — гугли LINQ to SQL :)
До последнего момента приходилось иметь дело исключительно с .net 2.0. Именно поэтому мне и было интересно мнение более опытных людей.
Для начала я бы отказался от типизированного приватного конструктора.
Далее написал бы класс для доступа к базе (аля слой data access). У класса есть метод: GetProducts(), который делает запрос в базу данных, получает результат и возвращает его в виде коллекции сущностей. Всё просто и понятно и легко тестируемо. Далее под ваши нужды уже совершенствование.
Далее написал бы класс для доступа к базе (аля слой data access). У класса есть метод: GetProducts(), который делает запрос в базу данных, получает результат и возвращает его в виде коллекции сущностей. Всё просто и понятно и легко тестируемо. Далее под ваши нужды уже совершенствование.
Я уже говорил чуть выше про typed dataset :) Он ещё с 1.x версий существует :)
Почитайте книжку — Мартин Фаулер «Архитектура корпоративных программных приложений».
я бы прикрутил ADO.NET Entity Framework.
Оно само по табличке и классы сгенерит, и запись-чтение сделает, и интерфейс удобный предоставит. Чтобы дальше приходилось только писать что-то вроде
Довольно любопытная штука, правда со своими выкрутасами.
Оно само по табличке и классы сгенерит, и запись-чтение сделает, и интерфейс удобный предоставит. Чтобы дальше приходилось только писать что-то вроде
context.ProductSet.Where("is_visible").Select(reader => new
{
ID = (int) reader[0],
Name = (string) reader[1]
}).ToList();
Довольно любопытная штука, правда со своими выкрутасами.
Срочно читать про ORM, Linq To SQL и EntityFramework, ибо вы сейчас такие велосипеды наизобретаете…
Как уже написали лучше использовать готовый ORM (не обязательно Linq2Sql или EF). Вы потратите на изучение меньше времени, чем не генерацию своего, получите знания для других проектов и вам не нужно будет поддерживать лишний самописный код. К тому же, EF к примеру через провайдеры способен работать с десятком баз данных. Ваш код, похоже, ориентирован только на MS SQL Server.
К тому же, подумайте о потомках! Тянуть весь ваш самописный ORM будет очень тяжело любому другому программисту, который, я уверен, первым же делом решит переводить проект на рельсы другого общедоступного ORM.
К тому же, подумайте о потомках! Тянуть весь ваш самописный ORM будет очень тяжело любому другому программисту, который, я уверен, первым же делом решит переводить проект на рельсы другого общедоступного ORM.
Что вы все заладили, смотри ОРМ, смотри ОРМ. ОРМ это не панацея. Буксовать будет вся ОРМ в большем проекте. Гибкости там мало. А если поменяется схема ДБ то вообще не приятно становится.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
А Вы как представляете себе Product?