2013-06-15 12 views
9

Buduję projekt, który mogę rozważyć, aby otworzyć źródło. Mam kategorię UIView, która daje mi łatwy dostęp do ustawiania współrzędnych x, y lub szerokości i lewo bezpośrednio do UIView, bez zajmowania się ramką. Moje pytanie brzmi, czy powinienem używać takich kategorii w moim projekcie, jeśli zamierzam je otworzyć?Czy powinienem uwzględnić niestandardowe kategorie w moich projektach open source?

Wiele projektów będzie miała podobną kategorię z metod UIView jak

- (void)setLeft:(CGFloat)left; 

lub

- (void)setX:(CGFloat)x; 

i My rozumiemy, że jeśli 2 kategorie stworzyć metodę, będziesz miał żadnej gwarancji o którym będzie się nazywać.

Więc ... co powinienem zrobić? W ogóle nie korzystasz z kategorii i zajmujesz się tym denerwującym kodem w moim otwartym projekcie? Używaj kategorii i może prefiksować nazwy metod?

Dziękujemy!

Odpowiedz

11

Nie zawracaj sobie głowy dodawaniem tych metod.

Zapisują bardzo mało pisania, prefiks, który naprawdę powinieneś dodać, będzie brzydki i nie dodadzą prawie żadnej prawdziwej wygody podczas pisania kodu przeciw temu dodanemu API, który nie jest już przenośny dla projektów, które go nie mają.

Co więcej, posiadanie mnóstwa wygodnych metod znacznie utrudnia podklasę. Którą metodę należy zastąpić? Jakie jest zachowanie KVO? Czy istnieje prymitywna metoda, w której wszystko jest przekazywane lub czy naprawdę trzeba wszystko przesłonić?

Zwykle nie dodaje się takiego wygodnego interfejsu API, ponieważ tworzy on dodatkowy "ciężar" interfejsu API, jednocześnie ponosząc wszystkie wyżej wymienione problemy. Wszystkie te dodatkowe metody to po prostu więcej punktów danych, które programista musi nauczyć się, zapamiętać i wyjaśnić innym, wprowadzając nowe osoby do projektu.

Jednym wyjątkiem są klasy klastrów; NSString, NSArray, etc ... mają podstawowy zestaw prymitywnych metod, które zapewniają wszystkie funkcje potrzebne do implementacji pozostałych interfejsów API. Pozostałe metody klas abstrakcyjnych są implementowane w całości w odniesieniu do tych prymitywnych metod. Podczas podklasowania wystarczy zaimplementować prymitywy, a wszystkie inne zachowania "po prostu zadziałają". Jednak podklasy mogą przesłonić dowolne z nie-prymitywów w celu optymalizacji lub dostosowania (choć ostrożnie, naprawdę powinieneś zachować to zachowanie).

Ogólna zasada jest taka, że ​​jeśli interfejs API wygody nie zapisuje regularnie więcej niż kilku linii kodu, nie jest to tego warte.

5

Od Celu C nie obsługuje przestrzeni nazw Popularnym sposobem, aby upewnić się, że kod jest unikatowy, jeśli planujesz udostępnić, jest przedrostek metod kilkoma literami, które odnoszą się konkretnie do twojego projektu.

Po zmianie nazwy setLeft i setX na LMSetLeft i LMSetX należy znacznie zmniejszyć prawdopodobieństwo kolizji.

Powinna to być również bardzo łatwa zmiana, o ile używa się narzędzia do refaktoryzacji IDE.