.NET'e giriş MAUI
İpucu
Bu içerik, .NET Docs'ta veya çevrimdışı olarak okunabilen ücretsiz indirilebilir bir PDF olarak bulunan .NET MAUIKullanan Kurumsal Uygulama Desenleri adlı e-Kitap'tan bir alıntıdır.
Platformdan bağımsız olarak, kurumsal uygulama geliştiricileri çeşitli zorluklarla karşı karşıya kalır:
- Zaman içinde değişebilen uygulama gereksinimleri.
- Yeni iş fırsatları ve zorluklar.
- Geliştirme sırasında uygulamanın kapsamını ve gereksinimlerini önemli ölçüde etkileyebilecek sürekli geri bildirim.
Bunları göz önünde bulundurarak, zaman içinde kolayca değiştirilebilen veya genişletilebilen uygulamalar oluşturmak önemlidir. Uygulamanın tek tek bölümlerinin, uygulamanın geri kalanını etkilemeden bağımsız olarak geliştirilip yalıtılmış olarak test edilmesini sağlayan bir mimari gerektirdiğinden, bu tür bir uyarlanabilirliği tasarlamak zor olabilir.
Birçok kurumsal uygulama, birden fazla geliştirici gerektirecek kadar karmaşıktır. Birden çok geliştiricinin uygulamanın farklı parçaları üzerinde bağımsız olarak etkili bir şekilde çalışabilmesi için bir uygulama tasarlamaya karar vermek ve parçaların uygulamayla tümleştirildiğinde sorunsuz bir şekilde bir araya gelmesini sağlamak önemli bir zorluk olabilir.
Uygulama tasarlama ve derlemeye yönelik geleneksel yaklaşım, bileşenlerin aralarında net bir ayrım olmadan sıkı bir şekilde birleştirildiği monolitik bir uygulama olarak adlandırılan yöntemle sonuçlanır. Genellikle, bu monolitik yaklaşım, uygulamadaki diğer bileşenleri bozmadan hataları çözmek zor olabileceğinden ve yeni özellikler eklemek veya mevcut özellikleri değiştirmek zor olabileceğinden bakımı zor ve verimsiz uygulamalara yol açar.
Bu güçlükler için etkili bir çözüm, bir uygulamayı bir uygulamaya kolayca tümleştirilebilen ayrık, gevşek bir şekilde bağlanmış bileşenlere bölmektir. Böyle bir yaklaşım çeşitli avantajlar sunar:
- Tek tek işlevlerin farklı kişiler veya ekipler tarafından geliştirilmesine, test edilmesine, genişletilmesine ve korunmasına olanak tanır.
- Uygulamanın kimlik doğrulaması ve veri erişimi gibi yatay özellikleriyle uygulamaya özgü iş işlevleri gibi dikey özellikler arasındaki endişelerin yeniden kullanılmasını ve net bir şekilde ayrılmasını teşvik eder. Bu, uygulama bileşenleri arasındaki bağımlılıkların ve etkileşimlerin daha kolay yönetilmesini sağlar.
- Farklı kişilerin veya ekiplerin uzmanlıklarına göre belirli bir göreve veya işlev parçasına odaklanmasına izin vererek rol ayrımının korunmasına yardımcı olur. Özellikle, kullanıcı arabirimi ile uygulamanın iş mantığı arasında daha temiz bir ayrım sağlar.
Ancak, bir uygulamayı ayrık, gevşek bir şekilde bağlanmış bileşenlere bölerken çözülmesi gereken birçok sorun vardır. Bu modüller şunlardır:
- Kullanıcı arabirimi denetimleri ile bunların mantığı arasındaki endişelerin net bir şekilde nasıl ayrılacaklarına karar verme. .NET MAUI kurumsal uygulaması oluştururken alınan en önemli kararlardan biri, iş mantığını arka planda kod dosyalarına yerleştirmek veya uygulamayı daha sürdürülebilir ve test edilebilir hale getirmek için kullanıcı arabirimi denetimleriyle bunların mantığı arasında temiz bir ayrım oluşturup oluşturmamaktır. Daha fazla bilgi için bkz . Model-Görünüm-GörünümModeli.
- Bağımlılık ekleme kapsayıcısı kullanılıp kullanılmayacağını belirleme. Bağımlılık ekleme kapsayıcıları, bağımlılıkları eklenmiş sınıfların örneklerini oluşturmak ve kapsayıcı yapılandırmasına göre yaşamlarını yönetmek için bir tesis sağlayarak nesneler arasındaki bağımlılık bağlamasını azaltır. Daha fazla bilgi için bkz . Bağımlılık ekleme.
- Platform arasında seçim yapmak, nesneye ve tür başvurularına göre bağlanması zor olan bileşenler arasında olay oluşturma ve gevşek bir şekilde bağlanmış ileti tabanlı iletişim. Daha fazla bilgi için bkz. Gevşek bağlanmış bileşenler arasında iletişim kurmaya giriş.
- Gezintinin nasıl çağrılacağı ve gezinti mantığının nerede bulunacağı dahil olmak üzere sayfalar arasında nasıl gezinileceğine karar verme. Daha fazla bilgi için bkz. Gezinti.
- Doğruluğa yönelik kullanıcı girişini doğrulamayı belirleme. Karar, kullanıcı girişini doğrulamayı ve doğrulama hatalarını kullanıcıya bildirmeyi içermelidir. Daha fazla bilgi için bkz . Doğrulama.
- Kimlik doğrulaması gerçekleştirme ve yetkilendirme ile kaynakların nasıl korunacaklarına karar verme. Daha fazla bilgi için bkz . Kimlik doğrulaması ve yetkilendirme.
- Verileri güvenilir bir şekilde alma ve verileri önbelleğe alma dahil olmak üzere web hizmetlerinden uzak verilere erişmeyi belirleme. Daha fazla bilgi için bkz . Uzak verilere erişme.
- Uygulamanın nasıl testine karar verme. Daha fazla bilgi için bkz . Birim testi.
Bu kılavuz, bu sorunlarla ilgili rehberlik sağlar ve .NET MAUIkullanarak platformlar arası kurumsal uygulama oluşturmaya yönelik temel desenlere ve mimariye odaklanır. Kılavuz, ortak .NET MAUI kurumsal uygulama geliştirme senaryolarını ele alarak ve Model-View-ViewModel (MVVM) deseni desteği aracılığıyla sunu, sunu mantığı ve varlıklarla ilgili endişeleri ayırarak uyarlanabilir, sürdürülebilir ve test edilebilir kod üretmeye yardımcı olmayı amaçlar.
Örnek uygulama
Bu kılavuz, aşağıdaki işlevleri içeren çevrimiçi bir mağaza olan eShop adlı örnek bir uygulamayı içerir:
- Arka uç hizmetinde kimlik doğrulaması ve yetkilendirme.
- Öğe kataloğuna göz atma.
- Kataloğu filtreleme.
- Katalogdaki öğeleri sıralama.
- Kullanıcının sipariş geçmişini görüntüleme.
- Ayarların yapılandırması.
Örnek uygulama mimarisi
Aşağıda örnek uygulamanın mimarisine üst düzey bir genel bakış verilmiştir.
Örnek uygulama ile birlikte:
- .NET Aspire Uygulama Barındırma ve Düzenleme
- ASP.NET Core ile geliştirilen bir Blazor web uygulaması.
- .NET MAUIile geliştirilen ve Mac Catalyst ve Windows aracılığıyla iOS, Android, macOS'u destekleyen çok platformlu bir uygulama.
Örnek uygulama aşağıdaki arka uç hizmetlerini içerir:
- ASP.NET Core Identity ve IdentityServer kullanan bir kimlik mikro hizmeti.
- EntityFramework Core kullanarak sql Server veritabanını kullanan veri odaklı oluşturma, okuma, güncelleştirme, silme (CRUD) hizmeti olan katalog mikro hizmeti.
- Etki alanı odaklı tasarım desenleri kullanan etki alanı temelli bir hizmet olan bir sipariş mikro hizmeti.
- Redis Cache kullanan veri temelli bir CRUD hizmeti olan sepet mikro hizmeti.
Bu arka uç hizmetleri ASP.NET Core kullanılarak mikro hizmetler olarak uygulanır ve .NET Aspire ile benzersiz kapsayıcılar olarak dağıtılır. Bu arka uç hizmetleri toplu olarak eShop başvuru uygulaması olarak adlandırılır. İstemci uygulamaları, Temsili Durum Aktarımı (REST) web arabirimi aracılığıyla arka uç hizmetleriyle iletişim kurar. Mikro hizmetler ve kapsayıcılar hakkında daha fazla bilgi için bkz . Kapsayıcılı mikro hizmetler.
Çok Platformlu uygulama
Bu kılavuz, .NET MAUIkullanarak platformlar arası kurumsal uygulamalar oluşturmaya odaklanır ve örnek olarak eShop çok platformlu uygulamasını kullanır. Aşağıdaki görüntüde, daha önce özetlenen işlevselliği sağlayan eShop çok platformlu uygulamasındaki sayfalar gösterilmektedir.
Çok platformlu uygulama, eShop başvuru uygulaması tarafından sağlanan arka uç hizmetlerini kullanır. Ancak, arka uç hizmetlerini dağıtmaktan kaçınmak isteyenler için sahte hizmetlerden gelen verileri kullanacak şekilde yapılandırılabilir.
eShop çok platformlu uygulaması aşağıdaki .NET MAUI işlevselliğini kullanıyor:
- XAML
- Denetimler
- Bağlamalar
- Dönüştürücü
- Stiller
- Animasyonlar
- Komutlar
- Davranışlar
- Tetikleyiciler
- Etkiler
- Özel Denetimler
Bu işlevsellik hakkında daha fazla bilgi için .NET MAUI belgelerine bakın.
Ayrıca, eShop çok platformlu uygulamadaki bazı sınıflar için birim testleri sağlanır.
Çok Platformlu uygulama çözümü
eShop çok platformlu uygulama çözümü, kaynak kodu ve diğer kaynakları birden çok proje halinde düzenler. Temel mobil bileşenlerin tümü eShopContainers adlı tek bir projede yer alır. Bu, bir projenin Xamarin.Forms ve önceki .NET sürümlerinde kullanacağımız birden çok platform projesi gereksinimini ortadan kaldırmaya yardımcı olan birden çok çıkışı hedeflemesine olanak tanıyan .NET 6 ile sunulan bir özelliktir. Birim testi için ek bir proje eklenmiştir.
Bu projenin tüm bileşenleri tek bir projede depolanmış olsa da, gereksinimlerinize göre birden çok projeye ayırmayı göz önünde bulundurmanız faydalı olabilir. Örneğin, kendi bağımlılıklarına sahip bir hizmetten yola çıkarak birden çok hizmet sağlayıcısı uygulamanız varsa, bu hizmet sağlayıcısı uygulamalarını kendi ayrı projelerine bölmek mantıklı olabilir. Proje ayrımı için iyi adaylar; paylaşılan modeller, hizmet uygulamaları, api istemci bileşenleri, veritabanı veya önbelleğe alma katmanlarıdır. İşletmenin bir bileşeni başka bir projede yeniden kullanabileceğini hissettiğiniz herhangi bir yer, ayrılma için potansiyel bir adaydır. Bu projeler daha sonra kolay dağıtım ve sürüm oluşturma için NuGet aracılığıyla paketlenebilir.
Tüm projeler, kaynak kodu ve diğer kaynakları kategoriler halinde düzenlemek için klasörleri kullanır. eShop çoklu platform uygulamasındaki sınıflar, herhangi bir .NET MAUI uygulamasında çok az değişiklikle veya hiç değişiklik yapmadan yeniden kullanılabilir.
eShop projesi
eShop projesi aşağıdaki klasörleri içerir:
Klasör | Açıklama |
---|---|
Animasyonlar | XAML'de animasyonların tüketilmesine olanak tanıyan sınıflar içerir. |
Davranışlar | Görünüm sınıflarına sunulan davranışları içerir. |
Denetimler | Uygulama tarafından kullanılan özel denetimleri içerir. |
Dönüştürücü | Bağlamaya özel mantık uygulayan değer dönüştürücüleri içerir. |
Özel durumlar | Özel ServiceAuthenticationException'ı içerir. |
Uzantı -ları | ve IEnumerable<T> sınıfları için VisualElement uzantı yöntemlerini içerir. |
Yardımcıları | Uygulamanın yardımcı sınıflarını içerir. |
Modeller | Uygulamanın model sınıflarını içerir. |
Veri Erişimi | .NET derleme meta veri dosyası olan AssemblyInfo.cs içerir. |
Hizmetler | Uygulamaya sağlanan hizmetleri uygulayan arabirimleri ve sınıfları içerir. |
Tetikleyiciler | XAML'de animasyon çağırmak için kullanılan BeginAnimation tetikleyicisini içerir. |
Doğrulama | Veri girişini doğrulamaya dahil olan sınıfları içerir. |
Görünüm Modelleri | Sayfalara sunulan uygulama mantığını içerir. |
Görünümler | Uygulamanın sayfalarını içerir. |
Özet
Microsoft'un platformlar arası çok platformlu uygulama geliştirme araçları ve platformları B2E, B2B ve B2C mobil istemci uygulamaları için kapsamlı bir çözüm sağlayarak tüm hedef platformlarda (iOS, macOS, Android ve Windows) kod paylaşma ve toplam sahip olma maliyetini düşürmeye yardımcı olma olanağı sunar. Uygulamalar kendi kullanıcı arabirimini ve uygulama mantıksal kodunu paylaşırken yerel platform görünümünü ve hissini koruyabilir.
Kurumsal uygulama geliştiricileri, geliştirme sırasında uygulamanın mimarisini değiştirebilecek çeşitli zorluklarla karşı karşıya kalır. Bu nedenle, zaman içinde değiştirilebilmeleri veya genişletilebilmeleri için bir uygulama oluşturmak önemlidir. Bu tür bir uyarlanabilirlik için tasarım zor olabilir, ancak genellikle bir uygulamayı bir uygulamaya kolayca tümleştirilebilen ayrık, gevşek bir şekilde bağlanmış bileşenlere bölmeyi içerir.