АОП в Objective-C: внедрять контекстно-зависимый код в каждый метод при сохранении СУХОГО

ОБНОВЛЕНИЕ:

С некоторыми ключевыми предложениями и взад и вперед с Джорджем я придумал два разных способа достичь именно того, что я хочу в CodeRunner, и разместил их на сайте Github gist: Суть АОП Objective-C

Код грубый, потому что это новая концепция, и я закончил ее только в 1:30. Тем не менее, он определенно работает и имеет некоторые тонкости, такие как автоматическое добавление всех методов, которые не являются инициализаторами, геттерами или сеттерами. [КОНЕЦ ОБНОВЛЕНИЯ]

Несколько раз (но, конечно, не очень часто) я сталкивался с ситуацией, когда мой код был бы немного СУШЕ, если бы я мог вызывать контекстно-зависимый фрагмент кода для каждого метода в классе. Использование среды выполнения Objective-C совершенно нормально, я бы также принял решения C или C ++.

Вместо:

- (void)methodName1
{
   self->selector = _cmd;
   NSLog(@"This method is named: %@",_cmd);
   //more code
}

- (void)methodName2
{
   self->selector = _cmd;
   NSLog(@"This method is named: %@",_cmd);
   //more code
}

Сделайте что-нибудь вроде этого с тем же результатом:

+ (void)AOPMethod
{
   self->selector = _cmd;
   NSLog(@"This method is named: %@",_cmd);
}

- (void)methodName1
{
   //more code
}

- (void)methodName2
{
   //more code
}

В реальном приложении AOPMethod будет содержать больше кода, и в классе будет больше методов.

P.S., Я очень помешан на DRY. Наряду с ясностью изложения и производительностью, это ключевой компонент моей оценки качества кода в долгосрочной перспективе. Для каждого нового способа, которым я могу избежать повторения, выгода экспоненциальная, потому что я прерываю как можно больше кода в повторно используемых классах, которые используются во многих проектах.

8
задан james_womack 15 February 2012 в 09:31
поделиться