понедельник, 5 сентября 2011 г.

Забор вокруг туалета.

Есть такой проект Facebook ActionScript API (http://code.google.com/p/facebook-actionscript-api). Так как работа под браузер, дестктоп и девайсы несколько различаются, ребята сделали несколько реализаций своего API. Но как они это сделали!

Есть три класса-синглтона: Facebook, FacebookDesktop и FacebookMobile, отнаследованные от некого AbstractFacebook. Пока все хорошо, идем дальше. Каждый из классов имеет набор статических методов, которые в свою очередь вызывают методы приватного инстанса того же класса. То же не плохо, но вот теперь начинается жопа - все методы инстанса и getInstance() объявлены, как protected! То есть использовать их можно только через статику или отнаследовавшись от нужной платформенной реализации (что в свою очередь то же не правильно). Таким образом ребята перекрывают естественный путь для повторного использования кода при создании мультиплатформенного приложения, а именно приложение работает с чистым платформонезависимым интерфейсом, реализации которого подставляются исходя из цели компиляции.

Синглтон в данном случае весьма уместен. Согласитесь, глупо создавать инстанс API-класса, такскать его по всему приложению, учитывая, что в 99% случаев оно будет работать только с одним фейсбук-профилем одновременно. Это не тот случай, когда нам нужны инъекции, синглтон оберегает нас от желания некоторых тащить зависимость через параметры конструкторов. Но получилось так, что отрезая пути быдлокодеров, ребята отрезали и нормальные юзкейсы.

В программировании нужно руководствоваться здравым смыслом. Глупо строить забор с калиткой вокруг общественного туалета.

0 коммент.:

Отправить комментарий