|
Хранилище объектов, как быть?
|
|||
---|---|---|---|
#18+
Философский вопрос, возможно даже не серьезный. Немного почитал про разработку с использованием интерфейсов. Говорят это удобно, т.к. уменьшает связанность классов. Что объект А "автомобиль" уже не включает в себя целиком другой объект Б "двигатель", а обращается к нему через интерфейс объекта Б, предварительно реализовав его интерфейс. В итоге, можно использовать в качестве объекта Б, разные объекты, которые реализуют соответствующий интерфейс. Для тестирования, хорошо, можно написать заглушку вместо настоящего объекта Б, и сделать отладку и тестриование объекта А, предположив, что Б работает так как должен. Тут все понятно. Но. Непонятен вопрос. А где хранить в таком случае эти два объекта, где хранить Б, ведь он уже не будет целиком и полностью включен в А. Получается что необходимо использовать какое-то хранилище этих обхектов. А пердед обращением к Б, А должен получить интерфейс Б и сделть необходимые действия, так получается? Прочитал такую статью Реализуем сами простой IoC контейнер , но в ней непонятно, а каким образом получить "иммено тот" Б, который "приписан" к А. В том хранилище Resolve делается только по типу, а если много одиннаковых типов...? Понятно, что можно написать такой метод, который будет вытягивать "Б" из контейнера по ключу. Но автор этого не сделал, возможно вся моя концепция неправильная, и нет необходимости хранить объекты раздельно. Но в таком случае, объект А должен включать Б, и смысла в интерфейсах между ними нет... Или чего-то я не понимаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 20:59 |
|
Хранилище объектов, как быть?
|
|||
---|---|---|---|
#18+
zebroxГоворят это удобно, т.к. уменьшает связанность классов. Врут ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 21:03 |
|
Хранилище объектов, как быть?
|
|||
---|---|---|---|
#18+
zebrox, если хотите разобраться с IoC контейнерами - прочитайте Dependency Injection in .NET . Cамо по себе добавление интерфейсов не приводит к меньше связанности, для этого надо читать хорошие книжки, опыта применения в них написанного. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 21:38 |
|
Хранилище объектов, как быть?
|
|||
---|---|---|---|
#18+
Cat2zebroxГоворят это удобно, т.к. уменьшает связанность классов. Врут это от того что множественное наследование не осилили - затычку в виде интерфейсов и сделали ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 22:54 |
|
Хранилище объектов, как быть?
|
|||
---|---|---|---|
#18+
ИзопропилCat2пропущено... Врут это от того что множественное наследование не осилили - затычку в виде интерфейсов и сделали интерфейсы это не затычка , а множественное наследование не панацея ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2012, 10:33 |
|
Хранилище объектов, как быть?
|
|||
---|---|---|---|
#18+
pation...а множественное наследование не панацея а в некоторых случаях и геморрой. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2012, 10:41 |
|
Хранилище объектов, как быть?
|
|||
---|---|---|---|
#18+
Изопропилэто от того что множественное наследование не осилили - затычку в виде интерфейсов и сделали Зачем тебе множественное наследование и причем тут интерфейсы? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2012, 11:19 |
|
Хранилище объектов, как быть?
|
|||
---|---|---|---|
#18+
Читаю... И на мсдне дочитался до того, что Service Locator и Dependycy Injection паттерны призваны решить одну и туже проблему связанности, только несколько иными способами. Сервис локатор, хранит свои сервисы (объекты Б) в хранилище, а клас А, использующий эти объкты (Б) обращается, через локатор к необходимому Б по его ключу. Правильно ли я понимаю, что в простейшем случае, таким хранилищем может выступить Dictionary например? А в DI паттерне. Так понимаю, при создании объкта А, ему, в конструктор передается интерфейс, полученный от объекта Б. И А, может обращаться к Б, через его интерфейс, т.к. есть ссылка на него. Тут возникает вопрос... А что дальше происходит с Б после создания? Необходимо ли его где-то хранить? Как мне кажется, полученный интерфейс (при создании Б) будет храниться в А, получается, что Б, будет использован, т.к. хранится ссылка на его интерфейс (не уверен, что так можно сказать), и в таком случае фреймворк его не удалит. Или Б, где-то необходимо хранить? Как мне кажется, сервис локатор предоставляет большую гибкость, тем, что можно заменять Б, во время выполнения приложения. В каких случаях лучше использовать один и другой паттерны, какой-нибудь простой пример? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2012, 18:46 |
|
Хранилище объектов, как быть?
|
|||
---|---|---|---|
#18+
zebrox, эта тема не так проста, чтобы ее можно было изложить простым примером. Литературу я вам уже приводил. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2012, 19:06 |
|
Хранилище объектов, как быть?
|
|||
---|---|---|---|
#18+
zebrox....Тут возникает вопрос... А что дальше происходит с Б после создания? Необходимо ли его где-то хранить? Как мне кажется, полученный интерфейс (при создании Б) будет храниться в А, получается, что Б, будет использован, т.к. хранится ссылка на его интерфейс (не уверен, что так можно сказать), и в таком случае фреймворк его не удалит. Или Б, где-то необходимо хранить?... Пользоваться им надо, а не хранить. Не ясно, откуда у Вас эта идея, хранить где-то что-то? Получили из контейнера или сами инстанцировали, попользовались и забыли (задиспозили при необходимости). Зачем задумываться о хранении? Или какой-то ресурсоемкий объектище/объектищи с с очень дорогим конструктором пользовать надо, и есть смысл его/их кешировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2012, 19:34 |
|
Хранилище объектов, как быть?
|
|||
---|---|---|---|
#18+
zebrox, живучесть полученных объектов все зависит от вашей реализации откуда вы будете брать объект вот пример A a = new A(); самый примитивный локатор а умрет при выходе из предела видимости ( если в стеке) а вот другая реализация class f{ static A ass=new A(); void fo(){ A a=f.ass; тоже можно назвать примитивным локатором тут берется аки сиглтон } } мне не очень нравится кода эти механизмы называют паттерны декларативного управления временем жизни ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2012, 20:20 |
|
Хранилище объектов, как быть?
|
|||
---|---|---|---|
#18+
МСУИзопропилэто от того что множественное наследование не осилили - затычку в виде интерфейсов и сделали Зачем тебе множественное наследование и причем тут интерфейсы? интерфейс - чистый абстрактный класс. вся конструкция - частный случай множественного наследования ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2012, 23:11 |
|
Хранилище объектов, как быть?
|
|||
---|---|---|---|
#18+
ИзопропилМСУпропущено... Зачем тебе множественное наследование и причем тут интерфейсы? интерфейс - чистый абстрактный класс. вся конструкция - частный случай множественного наследования Это не частный случай множественного наследования, потому что наследование - получение реализации предка. Интерфейсы - всего лишь обязывают реализовывать члены, не более того. Про абстрактные классы ты совсем не в тему ляпнул, ибо их удел - полиморфизм, а не наследование. Итого, не нужно путать божий дар с яичницей. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2012, 00:21 |
|
|
start [/forum/topic.php?fid=20&msg=38067439&tid=1405531]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 307ms |
total: | 432ms |
0 / 0 |