diff Lib/IMPL/AppException.pm @ 278:4ddb27ff4a0b

core refactoring
author cin
date Mon, 04 Feb 2013 02:10:37 +0400
parents 89179bb8c388
children
line wrap: on
line diff
--- a/Lib/IMPL/AppException.pm	Fri Feb 01 16:37:59 2013 +0400
+++ b/Lib/IMPL/AppException.pm	Mon Feb 04 02:10:37 2013 +0400
@@ -11,7 +11,7 @@
 
 use IMPL::Const qw(:prop);
 use IMPL::Resources::Strings {
-	messageFormat => "Application exception"
+	message => "Application exception"
 };
 
 use IMPL::declare {
@@ -21,7 +21,6 @@
     props => [
         source => PROP_RO,
         callStack => PROP_RO,
-        _cachedMessage => PROP_RW 
     ]
 };
 
@@ -36,18 +35,6 @@
     return $instance;
 }
 
-
-sub message {
-	my ($this) = @_;
-	
-	if (my $msg = $this->_cachedMessage) {
-		return $msg;
-	} else {
-	   my $formatter = $this->can('messageFormat');
-	   return $this->_cachedMessage($formatter->($this));
-	}
-}
-
 sub ToString {
 	my ($this) = @_;
 	
@@ -60,4 +47,98 @@
 	die $self->new(@_);
 }
 
-1;
\ No newline at end of file
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+C<IMPL::AppException> - исключение приложения.
+
+=head1 SYNOPSIS
+
+=begin code
+
+package MyException;
+use strict;
+
+use IMPL::Const qw(:prop);
+use IMPL::declare {
+    base => [
+        'IMPL::AppException' => undef
+    ],
+    props => [
+        level => PROP_RO
+    ] 
+};
+
+use IMPL::Resources::Strings {
+    message => "Something wrong at level %level%"
+};
+
+sub CTOR {
+    my ($this,$level) = @_;
+    
+    $this->level($level);
+}
+
+=end code
+
+=head1 DESCRIPTION
+
+Для описания собственных исключений в качестве базового класса должен
+использоваться C<IMPL::AppException> поскольку он позволяет использовать
+C<IMPL::declare> и объявлять свойства.
+
+C<IMPL::Exception> также является классом для исключений, однако поскольку
+он используется в базовых механизмах библиотеки, то в нем не реализованы
+механизмы для описания свойсвт.
+
+Исключение имеет свойство C<message> которое возвращает текст с описанием
+проблемы, данное свойство можно реализовать с использованием
+C<IMPL::Resources::Strings> для реализации поддержки нескольких языков.
+
+Особенностью тсключений также является то, что при их создании автоматически
+фиксируется место, где оно было создано и свойства C<source> и C<callStack>
+заполняются автоматически.
+
+Для исключений переопределены операторы приведения к строке и к булевому
+значению.
+
+=head1 MEMBERS
+
+=head2 C<[op]new(@args)>
+
+Оператор создающий новый экземпляр исключения, сначала создает экземпляр
+исключения, затем заполняет свойства C<source>, C<callStack>.
+
+=head2 C<[op]throw(@args)>
+
+Создает объект исключения и бросает его.
+
+=begin code
+
+throw MyException(10);
+MyException->throw(10); # ditto
+
+=end code
+
+=head2 C<[get]source>
+
+Строка с описанием в каком файле и где произошло исключение. см. C<Carp>
+
+=head2 C<[get]callStack>
+
+Строка со стеком вызовов в момент возникновения исключения. см. C<Carp>
+
+=head2 C<[get]message>
+
+Возвращает описание исключения.
+
+=head2 C<ToString()>
+
+Возвращает текстовое представление, как правило это C<message> и C<callStack>.
+
+=cut
\ No newline at end of file