C # - Как написать объект, который требует подключения к БД - PullRequest
1 голос
/ 14 декабря 2011

Я новичок в создании объектов и тому подобного в C # (winforms), и мне нужно знать лучший подход к этому. У меня есть простой объект, который будет возвращать некоторые данные из нашей базы данных. Обычно я помещаю строку DS (закодированную) в объект и выполняю, но проблема, с которой я столкнулся, заключается в том, что это не делает объект действительно «мобильным», чтобы его можно было использовать в любом из наших приложений ( сеть или окна). Итак, лучше ли создавать объект, которому требуется закодированная строка БД в конструкторе, или как мне это сделать?

Вот что я думал:

public class foo
{
    public foo(string EncodedConnectionString)
    {
        _EncodedConnectionString = EncodedConnectionString;
    }

    private string _EncodedConnectionString { get; set; }

    private DataSet GetFooFromDB()
    {
        oDatabase = new SQLDataBase(
            EncodedConnectionString, 15);

        //remaining code omitted...
    }
}

Мысли, комментарии?

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

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

Существует несколько способов достижения постоянства.Одним из способов является наличие DAL (уровня доступа к данным), который знает, как загружать и хранить данные, связанные с вашими объектами.Имейте в виду, однако, что даже DAL не будет иметь жестко запрограммированную строку подключения, а должен извлекать ее из файла конфигурации по мере необходимости.

Простой пример здесь: http://www.radsoftware.com.au/articles/dataaccesslayerdesign1.aspx Лично,Я не согласен со всем о том, как это было сделано, но это хорошая отправная точка, чтобы узнать о них.

Для более углубленного прочтения взгляните на Entity Framework http://msdn.microsoft.com/en-us/library/bb399572.aspx

Другой способ заключается в использовании Inversion of Control и Dependency Injection.Идея состоит в том, что ваш объект будет иметь методы Save() и Load(), которые принимают некоторый тип интерфейса, который выполняет фактическое постоянство.http://msdn.microsoft.com/en-us/library/aa973811.aspx

Это немного сложнее, чтобы разобраться, но выплачивает дивиденды с гибкостью, чтобы заменить хранилища по требованию.Это означает, что намного проще поддерживать несколько баз данных или даже хранить объекты в файлах csv / xml.

2 голосов
/ 14 декабря 2011

Что я хотел бы изменить в вашем коде:

public class foo
{
    private SQLDataBase _sqlDataBase;
    public foo(SQLDataBase sqlDataBase)
    {
        _sqlDataBase = sqlDataBase;
    }
}

Теперь вы можете протестировать свой код с помощью внедрения зависимостей.Строка подключения добавляется извне, поэтому вы можете изменить базу данных, не переписывая и не переписывая много кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...