

Yazılımla İlgili Birkaç Soru Yeni Projem İçin Üstadlardan Akıl Alayım (Mobil Ve PHP İçerikli Sorular)
-
Hocalar şimdi yeni bir projeye girişiyorum bu projeyide php ile yazıcam. ama projenin mobil ayağıda olacak bu mobil ayağını json çıktısı vs ler ile yapabiliyorlar yani bi webservis kullanıp rss feed den bile içerik çekebiliyorlar. Benim projeye dha başlarken mobil için çıktı almak adına yapmam gereken birşey var mı? Yani şunları en başta yap sonra sıkıntı çekme dediğiniz veya rss feed json çıktısı vs nin haricinde şu şekilde daha basit olur dediğiniz bir yol var mı ?
NOT: json rss feed çıktısnıda nasıl alacağımı bilmiyorum açıkçası :D ama öğrenicez bi şekilde
** konuyu gizliyorum dışardan takip edenler soruyor sonra ne projesi falan filan diye kimseye bi bok anlatasım yok
-
Service oriented architecture, microservices, katmanlı mimari. Bu üç kavrama bakmadan başlama derim.
-
Mobil de Json çıktı alacaksan SOA ya kesinlikle bakman lazım. Web servis den Header ile bile veri gönderebiliyorsun mantık aynı . Curl ile aldığın veriler var ya php de aynı şekilde mobil taraflı sitenin çıktısını Json olarak alıp header body falan ayrıştırıyorsun.. Header ve body ile bile veri gönderebilirsin. güvenlik tarafında iyi oluyor genelde. Sorun olursa pm deyim hocam . Basit birşey zaten çok zor değil fakat bazı olaylar var güvenlik tarafında . Servislerini gizlemen lazım 1 2. de url ler bulunsa bile veri çekmemeleri lazım Authentication yani . Projenin büyüklüğüne göre daha başka önlemler alınabilir konunu altına ufaktan konunun büyüklüğünden bahsedersen ek şeyler gerektirebilir. Satın alma işlemleri falan da olursa iş çok sıkıntıya girer. RESTFULL APİ lere de bakman lazım zaten ya REST Olur yada SOAP bu konu çok uzun yapacağın işe göre değişkenlik gösterebiliyor. + ları ve - leri var ikisinin de.
SOA,REST,UDDI,WSDL Bu 4 veri işini görür zaten hepsi webServisin bacakları gibi bişey yanlış ifade de olabilir :D
EDİT ;
SOA=Service oriented architecture zaten yazılmış sorry :D
MhmdAlmz tarafından 22/Haz/16 01:12 tarihinde düzenlenmiştir -
JPriest bunu yazdı
Service oriented architecture, microservices, katmanlı mimari. Bu üç kavrama bakmadan başlama derim.
bu üç kavram yalayıp yutayımmı diyorsun yoksa aşına mı olayım hangisi yeterli olur
ayrıca önce web versiyonu yazıp daha sonra mobil için çalışma yapsam sıkıntı olur mu yoksa daha en baştan mobil uygulamaya yönelik kodlamam önemli mi ? Tada en başta önemsemezsem acı çekermiyim mobil uygulamaya uyarlarken
-
Servislerin hazır olsun da mobili istersen 50 sene sonra yaz bişey farketmezsin bence :D
-
İlk soruna cevap: uzmanlaşmak aylarını alır, fikir sahibi olmak yeterli en azından. Birer ikişer sayfa okusan bir şeyler canlanacaktır kafanda.
Diğer soruna kısa cevap: sonradan acı çekmek istemiyorsan en baştan mobili de düşünüp o şekilde kurgulaman lazım mimarini.
Daha uzun cevap: Dilimin döndüğünce anlatmaya çalışayım, ama kesinlikle bilen birinden öğrenmen daha faydalı olacaktır senin için. Benim yazacaklarım yanlış/eksik bilgiler de içeriyor olabilir.
Diyelim ki web uygulaması ile başladın, sql'leri böyle php kodlarının arasında yazdın, sorguların çalışıyor ve sistemin hizmet vermeye başladı diyelim. On numara da sistem oldu. Hadi arkada da MySql var diyelim. Bir süre sonra Oracle ya da PostgreSql'in senin için daha faydalı olacağına kanaat getirdin ve diyelim ki MySql'den Oracle'a taşınmaya karar verdin. İlk büyük problem burda başlar. 100 tane PHP dosyasında SQL yazdıysan gidip her bir dosyada tek tek güncelleme yapman gerekecek ve bir yerlerin bozulmadığından emin olmak çok da kolay olmayacak. Üstelik bunu başarmış olsan bile ileride Oracle'dan da vazgeçmeyeceğinin garantisi yok (bknz: Oracle lisans ücretleri :)) Bu problemi aşmak için ORM (Object-relational mapping) kullanmak akla gelen ilk çözüm olacaktır. Araya bir katman daha ekleyerek database'den bağımsız kodlar geliştirebileceksin artık.
Artık daha iyi ve esnek bir sisteme sahibiz. Peki yeterli mi? Hatır. Database bağımsızlığını aştığımızı varsayalım ama dataların tek kaynağı database olmayabilir. İleride dosya sistemi, REST ve/veya SOAP webservice, message broker / queue, cache, NoSql db.. gibi yerlere de ihtiyaç duyulabilir. Buralardan veri okuman ya da buralara da yazman gerekebilir. Bunun için ORM de yeterli olmayacak. Sistem en başta sadece database'den çalışacakmış gibi tasarlanırsa, bunlardan herhangi bir tanesi bile işin içine girerse ne kadar çok editleme/güncelleme yapman gerektiğini hayal edebiliyorsundur. Kısaca demek istediğim data/persistance katmanını, sistemin geri kalanından izole edebilmelisin ve bağımsız çalışacak ayrı bir katmana çevirmeye uğraşmalısın. (katman, layer). Android client'ın ya da web client'ın data'nın nereden geldiği ile bir ilgisi olmaması lazım. Onlar sadece talep edecekler ve istedikleri şey önlerine gelecek.
Data katmanını sistemin geri kalanından izole ettik diyelim. Artık ilk duruma göre çok daha iyi bir mimarimiz var. Peki yeterli mi? Tabi ki hayır. Çünkü hala iş yapan kısımlar ile kullanıcıya açılan arayüz (UI) iç içeler. En basitinden sisteme bir bootstrap giydirmeye çalışsan, database ya da işin kendisi ile ilgili kısımlara dokunmayacağının garantisi yok. Oysa tek ihtiyacımız bir miktar HTML/CSS olayıydı. Bunu sağlamak için de data katmanı dışında kalan sistemi yine en az iki katmana bölmemiz gerekiyor. Çook genel olarak arayüz ve iş mantığının döndüğü kısımlar diyebiliriz. Böylece arkada hangi persistance sistemi (RDBMS, NoSQL, Webservice, queue, file..) olursa olsun, arada ne işler ne manipulasyonlar dönüyor olursa olsun, arayüzde istedğin gibi taklalar atabilirsin. Reel hayattan aklıma gelen ilk örnek Wordpress temaları olabilir. Database'e hiç dokunmadan, arkada dönen blog sisteminde hiçbir şey aksamadan siteyi istediğin her gün yepyeni bir siteye çevirebilmene olanak sağlıyor adamlar. Temelinde bütün bu katmanları birbirinden max. bağımsızlık ile ayırmış olmaları yatıyor.
Data, iş ve arayüz olarak sistemimizi katmanlara böldük ve çalışır olmasını sağladık. Artık ilk duruma göre çook daha iyi, daha önceki durumlara göre yine daha iyi durumdayız. Peki yeterli mi? Sadece web uygulaması istiyorsan yeterli ama mobil de olsun diyorsan hayır, sistemi geliştirmeye devam :)
Mobil için neler yapmalı kısmına geçmeden önce bir virgül koyalım, buraya kadarkilerin doğru düzgün ifade edilmiş hallerini öğrenebilmen için birkaç keyword ekleyelim. Google'da bakarsan benim yazdıklarıma nazaran çok daha faydalı olabilecek şeyler bulabilirsin.
- ORM (Object-relational mapping) tools
- N-tier architecture / multitier architecture (aynı şeyler)
- Three-tier architecture
- MVC (Model View Controller)
- MVP (Model View Presenter)
- MVVM (Model View View Model)
- Bonus: http://martinfowler.com/eaaDev/uiArchs.html
Şu ana kadar hazırladığımız kadarıyla nurtopu gibi bir ORM tool'u da kullandığımız, n-tier architecture üzerine kurulu bir MVC uygulamamız var. M (Model) bizim sistemdeki data katmanına tekabül ediyor. V (View) komple arayüz tarafına denk geliyor (CSS, HTML, kısmen JavaScript, kısmen PHP). C (Controller) ise bu iki katman arasında bulunan, bütün iş mantığının döndüğü katman.
Tekrar ediyorum, şu yularıdaki listedeki her şeye düzgün kaynaklardan ayrıca bak. Birer ikişey sayfa da olsa faydalı olacaktır.
Şimdi gelelim web dışındaki clientlara. Aynı sistemin native iOS, Android, Windows Phone, Windows masaüstü, Linux/Mac masaüstü ve otomobil konsolunda çalışan versiyonları da olsun istiyorsun. İlk paragrafta belirttiğim senaryoda çalışan sistemimize bunları istiyorsak çok acılı ve cefalı bir yola girmemiz gerekiyordu ancak son versiyonumuzda daha az emek ile çok daha kısa sürede ve esnek sistemler geliştirebileceğiz. Web uygulamasındaki view katmanının neye ihtiyacı varsa, diğer tüm clientların da en fazla onlara ihtiyacı var. Yani zaten iki farklı katman bizim ihtiyacımız olan her işi yapabiliyorlar. Aslında burda olay min. 2 farklı senaryoya ayrılıyor. 1. View' katmanının Controller katmanına doğrudan bağlı olduğu senaryo. Sonuçta aynı ekosistem üzerinde çalışıyorlar. 2. Controller katmanından faydalanacak olan tüm view (clientlar) controller'a doğrudan erişmek yerine bir API (Application Program Interface) üzerinden eriştiği senaryo. Sadece web için çalışıyorsan iki senaryo da uygun ancak diğer clientlar işin içine giriyorsa mecburen en baştan ikinci senaryoya uygun gitmen gerekiyor. SOA (Service Oriented Architecture) kısmı burada devreye giriyor. Hiçbir client data katmanına doğrudan erişemiyor, ancak iş katmanı üzerinden erişebilirler. İş katmanına da bir RMI (Remote Method Invocation) veya Restful service ya da SOAP Webservice üzerinden erişebilirler. @MhmdAlmz biraz bahsetmiş zaten.
Eğer ödeme sistemleri/bankacılık seviyesinde bir güvenlik söz konusu değilse en temiz yöntem RESTful bir servis ile iş metodlarını dışarıya açıp, isteyen client'ın onları kullanmasına izin vererek devam etmektir. Buna web client'ın da dahil.
Microservices denilen hede görece yeni bir akım ve henüz bizim topraklara tam anlamıyla uğramış değil. Başlangıç için yok sayabilirsin.
Yukarıda yazdıklarım arasında gözünü korkutan bir şey varsa lütfen korkutmasın, toplamda en fazla 20-30 sayfa yazı okuyarak çoğu hakkında fikir sahibi olabilirsin. Ayrıca forumdaki bazı arkadaşlar Laravel diyeceğim için kızacaklar ama, Laravel kullanarak çok hızlı, esnek, güvenli ve basit bir şekilde bu sistemi ortaya çıkarabilirsin. (Not: Laravel bilmiyorum). Şöyle basit bir örneğe göz atabilirsin:
https://selftaughtcoders.com/from-idea-to-launch/lesson-17/laravel-5-mvc-application-in-10-minutes/
İlk postta PHP dediğin için yazı içinde PHP spesifik örnekler var ama bunların hiçbiri PHP'ye özel şeyler değil. Tamamı Java, .net, Ruby, Node.. gibi diğer platformlar için de geçerli.
-
Çok güzel bi makale yazmış :D dediklerini uygula projeyi 20 sene geliştirir o dalda en iyi proje seninki olur her gün ekle sil güncelle diye diye öyle bi proje yaparsın ki :D basit ama çok sağlam bi proje yaparsın herşeye sen müdahale edersin :)
-
@Nvidia , Hocam Şuan Json falan çıktı alıp okuyabiliyorum bi uygulama da yaptım bununla ilgili. Eğer çözemedi isen Örnek bi uygulama üzerinden bakalım :)