Добрый день.
Есть задача: надо абстрагировать работу с хранилищем данных от внешних классов. Т.е. сделать так, чтобы внешние классы не зависили от реализации хранилища данных.
Для этого ввожу базовый класс и наследую от него классы с конкретными реализациями хранилищ данных (например класс для работы с БД и класс для работы с файлами XML). Вопрос с инициализацией этих классов. Т.е. оба класса должны реализовать общий метод (который описан в базовом классе), но для каждого класса нужен свой набор параметров, поэтому нельзя выделить общую сигнатуру этого метода инициализации. Как лучше поступить?
Спасибо.
P.s. программа на с#
Re: Взаимодействие с объектами через базовый класс
Здравствуйте, Аноним, Вы писали:
А>Добрый день. А>Есть задача: надо абстрагировать работу с хранилищем данных от внешних классов. Т.е. сделать так, чтобы внешние классы не зависили от реализации хранилища данных. А>Для этого ввожу базовый класс и наследую от него классы с конкретными реализациями хранилищ данных (например класс для работы с БД и класс для работы с файлами XML). Вопрос с инициализацией этих классов. Т.е. оба класса должны реализовать общий метод (который описан в базовом классе), но для каждого класса нужен свой набор параметров, поэтому нельзя выделить общую сигнатуру этого метода инициализации. Как лучше поступить? А>Спасибо.
А>P.s. программа на с#
Сделать конструкторы с разными параметрами?
Re[2]: Взаимодействие с объектами через базовый класс
От:
Аноним
Дата:
21.03.12 14:50
Оценка:
Здравствуйте, zfima, Вы писали:
Z>Сделать конструкторы с разными параметрами?
Да, я всегда так и поступаю, но в данном случае так сделать не получится. Конкретная реализация определяется в одном "месте" (классе), а инициализация должна быть в другом месте. По другому говоря параметры инициализации становятся известны позже определения выбранной реализации базового класса.
Re[3]: Взаимодействие с объектами через базовый класс
От:
Аноним
Дата:
21.03.12 15:05
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, zfima, Вы писали:
Z>>Сделать конструкторы с разными параметрами? А>Да, я всегда так и поступаю, но в данном случае так сделать не получится. Конкретная реализация определяется в одном "месте" (классе), а инициализация должна быть в другом месте. По другому говоря параметры инициализации становятся известны позже определения выбранной реализации базового класса.
Я пока писал ответ понял, что я выбрал в принципе не верный подход, потому что получается, что метод, который будет вызывать инициализацию класса должен "знать" о конкретной реализации, а это ломает всю затею. Так что я похоже завел себя в тупик...
Мне вообщем надо получить данные из XML файла, но имя этого файла я узнаю только в процессе работы программы. К XML файлу надо обратиться как к источнику данных, при этом сохранить абстракцию представления данных... Может есть какие нибудь элегантные решения?
Re[4]: Взаимодействие с объектами через базовый класс
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, zfima, Вы писали:
Z>>>Сделать конструкторы с разными параметрами? А>>Да, я всегда так и поступаю, но в данном случае так сделать не получится. Конкретная реализация определяется в одном "месте" (классе), а инициализация должна быть в другом месте. По другому говоря параметры инициализации становятся известны позже определения выбранной реализации базового класса.
А>Я пока писал ответ понял, что я выбрал в принципе не верный подход, потому что получается, что метод, который будет вызывать инициализацию класса должен "знать" о конкретной реализации, а это ломает всю затею. Так что я похоже завел себя в тупик...
А>Мне вообщем надо получить данные из XML файла, но имя этого файла я узнаю только в процессе работы программы. К XML файлу надо обратиться как к источнику данных, при этом сохранить абстракцию представления данных... Может есть какие нибудь элегантные решения?
А если в конструкторе передать параметры инициализации и перегрузив метод Initialize, полъзоваться этими параметрами. Нет?
Re[5]: Взаимодействие с объектами через базовый класс
Здравствуйте, zfima, Вы писали:
Z>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, Аноним, Вы писали:
А>>>Здравствуйте, zfima, Вы писали:
Z>>>>Сделать конструкторы с разными параметрами? А>>>Да, я всегда так и поступаю, но в данном случае так сделать не получится. Конкретная реализация определяется в одном "месте" (классе), а инициализация должна быть в другом месте. По другому говоря параметры инициализации становятся известны позже определения выбранной реализации базового класса.
А>>Я пока писал ответ понял, что я выбрал в принципе не верный подход, потому что получается, что метод, который будет вызывать инициализацию класса должен "знать" о конкретной реализации, а это ломает всю затею. Так что я похоже завел себя в тупик...
А>>Мне вообщем надо получить данные из XML файла, но имя этого файла я узнаю только в процессе работы программы. К XML файлу надо обратиться как к источнику данных, при этом сохранить абстракцию представления данных... Может есть какие нибудь элегантные решения?
Z>А если в конструкторе передать параметры инициализации и перегрузив метод Initialize, полъзоваться этими параметрами. Нет?
Передавай строку или xml-строку, которую каждая реализация будет парсить по своему.
Re[6]: Взаимодействие с объектами через базовый класс
От:
Аноним
Дата:
21.03.12 17:37
Оценка:
Здравствуйте, Sashaka, Вы писали:
S>Здравствуйте, zfima, Вы писали:
Z>>Здравствуйте, Аноним, Вы писали:
А>>>Здравствуйте, Аноним, Вы писали:
А>>>>Здравствуйте, zfima, Вы писали:
Z>>>>>Сделать конструкторы с разными параметрами? А>>>>Да, я всегда так и поступаю, но в данном случае так сделать не получится. Конкретная реализация определяется в одном "месте" (классе), а инициализация должна быть в другом месте. По другому говоря параметры инициализации становятся известны позже определения выбранной реализации базового класса.
А>>>Я пока писал ответ понял, что я выбрал в принципе не верный подход, потому что получается, что метод, который будет вызывать инициализацию класса должен "знать" о конкретной реализации, а это ломает всю затею. Так что я похоже завел себя в тупик...
А>>>Мне вообщем надо получить данные из XML файла, но имя этого файла я узнаю только в процессе работы программы. К XML файлу надо обратиться как к источнику данных, при этом сохранить абстракцию представления данных... Может есть какие нибудь элегантные решения?
Z>>А если в конструкторе передать параметры инициализации и перегрузив метод Initialize, полъзоваться этими параметрами. Нет?
На момент вызова конструктора параметры инициализации не известны
S>Передавай строку или xml-строку, которую каждая реализация будет парсить по своему.
Да, это может решить проблему (по крайней мере метод Инициализации будет иметь вполне определенную сигнатуру). Но я уже больше склоняюсь, к тому чтобы сделать так, чтобы XML файл был заранее известным (что бы он был определен на момент вызова конструктора реализации). В этом случае можно будет сделать конструкторы с разным набором параметров (как писал ранее zfima). Мне кажется так архитектура программы будет выглядеть более логично.
"Делай все максимально просто, но не проще, чем это необходимо".
В любом случае спасибо за советы.