Хороший ли стиль «Проверка значения в Getter / Setter»?

мои методы Getter / Setter проверяют значение, прежде чем они устанавливают / возвращают его. Если значение недействительно, они генерируют исключение (BadArgumentException или IllegalStateException). Это необходимо, поскольку мы инициализируем все члены с недопустимыми значениями - и поэтому мы избегаем работы с этими недопустимыми значениями (== получение ошибок / ошибок / исключений в других местах).

Преимущества следующие:

  • Когда вы получаете значение элемента из модели, вы знаете, что они действительны
  • Проверки достоверности выполняются только в объекте модели
  • Диапазон значений определяется в объект-модель

Это кажется очень необычным, поскольку большинство новых членов команды сначала жалуются на это - даже если они соглашаются со мной после того, как я им это объясню.

Вопрос: Это хороший стиль программирования? (Даже если это немного снижает производительность)

Пример кода :

inline bool MyClass::HasGroupID const { return m_iGroupID != 0; }

int MyClass::GetGroupID() const
{
    if( !HasGroupID() )
        throw EPTIllegalStateException( "Cannot access uninitialized group ID!" );

    return m_iGroupID;

}   // END GetGroupID() const

void MyClass::SetGroupID( int iGroupID )
{
    // negative IDs are allowed!
    if( iGroupID != 0 )
        throw EPTBadArgumentException( "GroupID must not be zero!", iGroupID );

    m_iGroupID = iGroupID;

}   // END SetGroupID( int )

Использование :

// in serialization
if( myObject.HasGroupID() )
    rStream.writeAttribute( "groupid", GetGroupID() );

// in de-serialization
try {
    // required attribute - throw exception if value is invalid
    myObject.SetGroupID( rStream.GetIntegerAttribute( "groupid" );
} catch( EPTBadArgumentException& rException )
{
    throw EPTBadXmlAttribute( fileName, rException );
}
5
задан Charly 18 November 2011 в 07:43
поделиться