ООП архитектура и общение без перехода на личности
От: daga  
Дата: 07.08.06 08:46
Оценка:
Предыстория.

Представьте себе приложение на C++ с такой архитектурой,
есть главный класс Application, он содержит в себе объекты
остальных классов, при старте программы, инициализируется глобальный
указатель на объект главного класса, и в любой момент когда кому-то что-то нужно,
он, используя указатель на класс Application, добирается до любого нужного
ему объекта (почти все члены-данных объявлены как public).

Это пораждает массу проблем,
1)Каждый знает о каждом: изменение в одном месте требует перекомпиляции всей программы
2)Невозможно протестировать ничего отдельно
3)Много чего сделано public, для облегчения такого метода работы,
и соответственно абсолютно не ясны "контракты классов", ты что-то изменяешь,
и вуаля, вылезает через какое-то время ошибка.
4)Мне не нравиться это поддерживать

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

Я предложил постепенно изменить очевидные вещи, ну например:
есть GUI компонент основная задача которого вызывать Application->MethodX(),
все ему больше ничего не нужно знать ни об Application, ни о других классах,

я хочу отделить его использую boost signals/slots от остального приложения,
и так постепенно поступить со всеми простыми классами, общающимися
с Application, посредством вызова его двух, трех методов, а больше никак
не взаимодействующих с другими компонентами программы.

Сама история.

По почте произошел такой диалог:
— Я хочу для отделения классов друг от друга использовать boost signals
— Зачему это нужно и как это будет выглядеть?
— То как сделано это сейчас это известный анти-паттерн ООП и решение тоже давно известно,
вот патч показывающий как это будет выглядеть.
— Нет, мне это не нравиться, во-первых нужна отдельная библиотека для этого, во-вторых
мы знаем что мы будем вызывать на этапе компиляции, зачем нам это делать в runtime,
в-третьих мы можем сделать это проще использую static функции и callback аргумент,
но зачем, ради какого-то ООП паттерна, я так не думаю.

Чтобы вы сделали для объяснения своей правоты в данном вопросе,
или может я не прав?

07.08.06 14:14: Перенесено из 'О работе'
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.