5. Sonuç
Aşağıdaki istemci/sunucu uygulamasını geliştirdik:

Kodun son haline ulaşmak için, AngularJS ve Spring 4 çerçevelerinin birçok noktasını açıklamamız gerekti. Dolayısıyla bu belge, bu iki çerçevenin kullanımına ilişkin eğitim amacıyla kullanılabilir. 1.3 numaralı paragrafta, kodların nerede bulunabileceği ve nasıl kullanılabileceği açıklanmaktadır.
İstemci/sunucu uygulamasının çeşitli ortamlarda kullanılabileceğini gösterdik:
- geleneksel bir web uygulaması olarak;
- Android emülatörlerinde çalıştırılabilir bir ikili dosya olarak;
Tekrar belirtmek gerekirse, bu eğitim kılavuzu her iki çerçeveyi de kapsamlı bir şekilde ele almamaktadır. Angular için, beraberinde gelen test araçlarının da mutlaka tanıtılması gerekir. Testler, bir uygulama yazarken vazgeçilmez adımlardır. Angular etrafında geliştirilen araçlar, bu testleri otomatikleştirmeye ve sürekli entegrasyon sürecine dahil etmeye olanak tanır.
Bu çalışmadan iki noktayı özellikle hatırlayacağım:
- Spring web servisinin yazılması orta derecede karmaşıktı. Başlangıçtan itibaren Spring kavramlarını iyi biliyordum. Yalnızca web servisinin güvenliğini sağlama konusunda ve daha sonra HTTP CORS başlıklarının yönetimi konusunda zorluklarla karşılaştım; bu iki alan hakkında bilgim yoktu;
- Angular istemcisinin yazılması ise çeşitli nedenlerden dolayı çok daha karmaşıktı:
- Javascript dili ve sunduğu imkânlar hakkında yeterince bilgim yoktu;
- tarayıcı içinde asenkron programlamanın nasıl işlediğini anlamakta zorlandım. Sunucudaki gibi düşünüyordum; orada bu asenkronluk, birden fazla iş parçacığının eşzamanlı kullanımıyla sağlanır. Tarayıcıda ise tek bir iş parçacığı vardır ve asenkron görevler paralel olarak değil, sırayla işlenir. Daha açık bir ifadeyle, asenkron görevler paralel olarak çalışabilir (örneğin, çoklu HTTP istekleri), ancak bu görevlerin tamamlandığında ürettikleri olaylar sırayla işlenir. Dolayısıyla, beraberinde getirdiği sayısız sorunla uğraşmak zorunda kalınacak bir eşzamanlı yürütme söz konusu değildir;
- Angular, çok sayıda kavramı (MVC, direktifler, hizmetler, model kapsamı, ...) içeren zengin bir çerçevedir. Öğrenmesi uzun sürer;
- Angular, belirli bir geliştirme yöntemi dayatmaz. Dolayısıyla aynı sonuca ulaşmak için farklı mimariler kullanılabilir. Bu kafa karıştırıcıdır. Herkesin aynı tasarım kalıplarını (design pattern) kullandığı kapalı çerçevelerde kendimi daha rahat hissediyorum. Bu nedenle, sunucu tarafında kullandığım tasarım kalıplarını sürekli olarak Angular’da da uygulamaya çalıştım. Sonuçtan memnunum çünkü bunun tekrarlanabilir olduğunu düşünüyorum. Tam da aradığım şey buydu. Ancak Angular’ın “iyi uygulamalarından” sapıp sapmadığımı hiç bilmiyorum;
Serge Tahé, Temmuz 2014.