W dużym projekcie udało nam się całkiem dobrze oddzielić kod ArcObjects od naszej logiki biznesowej. Jest to ogólnie rzecz biorąc droga, którą powinienem powiedzieć, zamiast próbować wyśmiewać to wszystko, nawet jeśli jest to możliwe przy użyciu ramek próbnych, aby uzyskać trochę drogi.
Zadaj sobie pytanie, dlaczego czujesz potrzebę kpienia. Zazwyczaj dzieje się tak z powodu braku abstrakcji. Pomyśl o drobnych obowiązkach i zminimalizuj powierzchnię ogromnego, brzydkiego potwora ArcObject. Unikaj przeciągania wokół typów ArcObject tylko dlatego, że gdzieś potrzebny jest jakiś ich aspekt.
Mogę podać jeden konkretny przykład z naszego projektu. Część kodu zdawała się zależeć od IMxDocument. Okazało się, że jedynym powodem było odświeżenie aktywnego widoku. Zamiast tego stworzyliśmy interfejs IViewRefresher i pracowaliśmy tylko nad tym; łatwe do wyśmiewania i testowania. Dodatkowo sprawia, że zamiar kodu jest znacznie bardziej przejrzysty i usuwa pokusę, aby ktoś zaczął robić śmieszne rzeczy z IMxDocument, których nie powinni robić, ponieważ wszystko, co chcieliśmy zrobić, to odświeżenie. To samo ćwiczenie można wykonać z dużą ilością kodu ArcObjects.
Ponadto zawarliśmy cały dostęp do klas elementów w bezpiecznych opakowaniach typu, ponownie zapewniając kod możliwy do wyzerowania, chroniąc kod biznesowy przed ArcObjects.
Omówiliśmy nawet nieużywanie typów geometrycznych ArcObjects, ale obecnie zezwalamy na używanie tych interfejsów bezpośrednio w naszym kodzie. (Dozwolona jest jednak tylko znajomość interfejsu i wszystkie instancje geometrii korzystają z naszej własnej fabryki geometrii).
Podsumowując, nie zniechęcam do kpin, ale zachęcam do kpin na innym poziomie abstrakcji niż ArcObjects.