ОБНОВЛЕНИЕ:
С некоторыми ключевыми предложениями и с Джорджем я предложил два разных способа достижения именно того, чего я хочу в CodeRunner, и разместил его на главном сайте Github:
Objective-C AOP gist
Код является грубым, потому что это новая концепция, и я только что закончил в 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 будет содержать больше кода, и в классе будет больше методов.
П.С., я довольно одержим СУХОЙ. Наряду с ясностью прозы и производительности, это ключевой компонент того, как я оцениваю качество своего кода в долгосрочной перспективе. Для каждого нового способа, которым я могу избежать повторения, преимущество является экспоненциальным, потому что я разрываю как можно больше кода в повторно используемых классах, которые совместно используются во многих проектах.