Взаимодействие с объектами через базовый класс
От: Аноним  
Дата: 21.03.12 14:31
Оценка:
Добрый день.
Есть задача: надо абстрагировать работу с хранилищем данных от внешних классов. Т.е. сделать так, чтобы внешние классы не зависили от реализации хранилища данных.
Для этого ввожу базовый класс и наследую от него классы с конкретными реализациями хранилищ данных (например класс для работы с БД и класс для работы с файлами XML). Вопрос с инициализацией этих классов. Т.е. оба класса должны реализовать общий метод (который описан в базовом классе), но для каждого класса нужен свой набор параметров, поэтому нельзя выделить общую сигнатуру этого метода инициализации. Как лучше поступить?
Спасибо.

P.s. программа на с#
Re: Взаимодействие с объектами через базовый класс
От: zfima  
Дата: 21.03.12 14:37
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день.

А>Есть задача: надо абстрагировать работу с хранилищем данных от внешних классов. Т.е. сделать так, чтобы внешние классы не зависили от реализации хранилища данных.
А>Для этого ввожу базовый класс и наследую от него классы с конкретными реализациями хранилищ данных (например класс для работы с БД и класс для работы с файлами 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  
Дата: 21.03.12 15:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, zfima, Вы писали:


Z>>>Сделать конструкторы с разными параметрами?

А>>Да, я всегда так и поступаю, но в данном случае так сделать не получится. Конкретная реализация определяется в одном "месте" (классе), а инициализация должна быть в другом месте. По другому говоря параметры инициализации становятся известны позже определения выбранной реализации базового класса.

А>Я пока писал ответ понял, что я выбрал в принципе не верный подход, потому что получается, что метод, который будет вызывать инициализацию класса должен "знать" о конкретной реализации, а это ломает всю затею. Так что я похоже завел себя в тупик...


А>Мне вообщем надо получить данные из XML файла, но имя этого файла я узнаю только в процессе работы программы. К XML файлу надо обратиться как к источнику данных, при этом сохранить абстракцию представления данных... Может есть какие нибудь элегантные решения?


А если в конструкторе передать параметры инициализации и перегрузив метод Initialize, полъзоваться этими параметрами. Нет?
Re[5]: Взаимодействие с объектами через базовый класс
От: Sashaka Россия  
Дата: 21.03.12 15:16
Оценка:
Здравствуйте, 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). Мне кажется так архитектура программы будет выглядеть более логично.
"Делай все максимально просто, но не проще, чем это необходимо".
В любом случае спасибо за советы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.