Форум
Философия программирования
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, Lazin, Вы писали: L>Здравствуйте, igor-booch, Вы писали: IB>>Предположим у нас есть класс SimpleLogger, у него виртуальный метод Log(string message), который просто выводит сообщения на консоль. IB>>Есть класс DbLogger, который наследуется от SimpleLogger. В DbLogger перекрыт метод Log(string message) и добавлена функциональность логирования сообщения в БД. IB>>Теперь меняем в программе SimpleLogger на DbLogger, опаньки, а баз данных то нет, комп от сети отключен, даже connection string нигде не указан. Логирование не работает. L>LSP требует, что-бы контракты aka соглашения не ломались при смене реализации, в данном примере, если класс SimpleLogger гарантирует что сообщение будет записано всегда и никаких исключений брошено не будет(лог всегда доступен для записи), то класс DbLogger тоже должен это гарантировать, поэтому из принципа LSP следует, что класс DbLogger очень нетривиальная штука. Во первых, он должен как либо инициализироваться перед использованием и кидать свои исключения во время инициализации, если например не может подключиться к БД. Во вторых, он должен гарантировать непрерывную доступность для записи, даже если соединение с сервером БД по какой либо причине отвалилось. В этом случае он может например тупо выкидывать сообщения, либо временно откатиться на другой механизм логирования, он может буферизовать сообщения где нибудь, а потом записать их в БД, после того как соединение между ними будет восстановлено.
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …