Создание класса доступа к данным для нескольких типов источников - PullRequest
1 голос
/ 22 февраля 2011

Мне нужно создать класс, который будет принимать тип источника данных (MSSQL, Oracle, Access, Excel, ActiveDirectory, файл CSV, Sharepoint и т. Д.), Сведения о соединении для этого типа и возвращать соединение с этим источником данных.После этого мне нужно иметь возможность опрашивать источник данных и возвращать доступные поля и, наконец, иметь возможность извлекать данные из любых полей.

Я думал, что это звучит как работа для интерфейса, так каксписок типов источников данных со временем будет расти, но я никогда не использовал интерфейсы.

Подойдет ли это?:

interface IConnectable
{
    void Connect();
}

class SourceMSSQL : RDB, IConnectable{}
class SourceOracle : RDB, IConnectable{}
class SourceAccess : RDB, IConnectable{}
class SourceExcel : RDB, IConnectable{}
class SourceCSVFile: FlatFile, IConnectable{}
class SourceSharePoint: FlatFile, IConnectable{}
class SourceActiveDirectory: FlatFile, IConnectable{}

также, как мне добавить Read () в этот список?

PS: мне нужно только читать, а не писать.

1 Ответ

1 голос
/ 22 февраля 2011

Да, вы на правильном пути. Интерфейс - это спецификация, которая позволяет вам работать с «неизвестным» классом, который предоставляет вам нужную услугу, не привязываясь к какой службе (в данном случае к какому типу базы данных) вы используете.

В вашем коде вы продолжите строить на своем интерфейсе что-то вроде:

interface IConnectable {
    IConnection Connect();
}

interface IConnection {
    IResultSet ExecuteQuery(string query);
}

, а затем реализовать их с конкретными классами. Кроме того, вам нужна фабрика для создания любого класса, который вам нужен:

class ConnectionFactory {
    IConnecable CreateConnection(...);
}

это так, что вам не нужно знать, какое соединение создать.

Некоторая помощь уже присутствует в .NET Framework. Существует класс DbConnection с подклассами, такими как SqlConnection, который может помочь. Также существуют фреймворки, которые помогают вам соединяться (создавать классы и связывать их вместе), но это более сложная тема, которую можно попробовать позже - начните с создания собственных интерфейсов и реализации для них - которые будет легче понять .

Хорошее мышление! Удачи!

P.S. Чтобы иметь возможность легко перенастроить свое программное обеспечение для создания различных объектов, реализующих одни и те же интерфейсы (что обычно является гибкостью, которую вы хотите), вы не хотите создавать объекты с использованием конструкторов напрямую, вместо этого есть одно центральное место, где создаются объекты. Это место обычно называют фабрикой (оно создает объекты ...). Фабрика может быть очень простой (может быть, просто посмотреть на строку конфигурации или аргумент командной строки или что-то еще, управляющее вашим поведением) или более продвинутой, когда сложные правила определяют, какие классы следует использовать в различных ситуациях.

Существуют фреймворки, которые предоставляют фабрики разного рода для разных ситуаций, структурная карта ссылка - это одна, а MEF (включена в .NET 4 и доступна по ссылка ) - другая. Но не начинайте с этого, это даст вам слишком много думать сразу - вы можете позже добавить это, учитывая, что вы используете интерфейсы для начала!

...