「實用推薦」如何為桌面 移動跨平臺應用選擇UI框架/APP架構?

DevExpress .NET MAUI UI組件庫提供了用于Android和iOS移動開發的高性能UI組件,該庫包括數據網格、圖表、日程、數據編輯器、CollectionView和選項卡組件。

獲取DevExpress .NET MAUI最新正式版下載(Q技術交流:532598169)

“一次編寫,隨處運行”——這個口號幫助Java在20世紀90年代中期獲得了廣泛的普及,從那時起,許多跨平臺框架被引入,比如Ionic、Flutter,當然還有.NET MAUI。這些框架允許開發人員使用相同的代碼,而不考慮底層操作系統/設備類型。雖然使用單一UI框架可以節省時間/資源,但這種開發策略的有效性和效率完全取決于應用程序的復雜性和用戶體驗需求。

跨平臺應用的另一種技術是共享業務邏輯和服務,但根據設備類型(桌面/移動)使用不同的UI框架。使用這種策略您將共享更少的UI代碼,但可以使用每個平臺的固有優勢來制作高質量的界面(當然,跨平臺/設備提供最佳的用戶體驗)。

如何為桌面 & 移動跨平臺應用選擇UI框架/APP架構?

單一UI項目:優勢與挑戰

一個完全跨平臺的界面可以幫助開發團隊減少開發成本和上市時間,例如使用DevExpress?Blazor創建的單個頁面可以通過Blazor Hybrid在Web、桌面和移動應用程序中使用。這不僅僅是一個Web組件的WebView封裝器:它允許您在.NET環境中運行代碼,同時訪問設備功能,這種策略可以提高團隊的效率,因為您可以共享代碼和專業知識。

下面的內容將幫助您創建一個Blazor Hybrid應用程序:Get Started - Blazor Hybrid。

另一個快速發展的跨平臺框架是 .NET MAUI,它被設計成支持不同的設備類型(桌面、移動、平板),該框架包括一些有用的特性,用于在不同目標之間共享代碼:

  • 項目結構:與Xamarin不同,.NET MAUI將所有跨平臺代碼合并到一個項目中。
  • 特定于設備的自定義:自適應布局XAML擴展允許您基于設備和操作系統類型更新控件屬性。
  • 原生UI元素:在底層.NET被轉換成原生的特定于操作系統的元素,確保了特定于設備的用戶體驗。

這些核心功能可以幫助您創建針對不同設備的單一代碼庫應用程序。

下面是一個如何為移動和桌面設備指定不同布局的示例(移動一欄,桌面兩欄):

<Grid ColumnDefinitions="{OnIdiom Phone='*', Desktop='*,500'}" ... >

這種技術對于相對簡單的應用程序非常有效,然而業務應用程序通常需要更復雜的特定于設備的更改。例如桌面客戶端可能包含帶Ribbon和Docking的復雜視圖,這些控件通常被移動設備上的其他元素所取代。

此外,手機上的整個用戶流程可能會有很大的不同。例如,本地單元格編輯在桌面應用程序中很常見,但對于移動設備,您可能更喜歡分別顯示細節和編輯屏幕,您可以在手機上的許多應用程序(如Contacts)中找到這種模式。

下面的圖片說明了一些例子,它可能是具有挑戰性的創建一個單一的UI代碼庫:

當期望的桌面界面和移動界面之間存在顯著差異時,創建大量特定于設備的觸發器可能會很快使代碼復雜化(使其難以開發和維護)。

如何為桌面 & 移動跨平臺應用選擇UI框架/APP架構?

如何為桌面 & 移動跨平臺應用選擇UI框架/APP架構?

如何為桌面 & 移動跨平臺應用選擇UI框架/APP架構?

如何為桌面 & 移動跨平臺應用選擇UI框架/APP架構?

具有設備特定UI框架的應用程序

使用單一UI平臺為代碼共享提供了更多的機會,但是在處理具有復雜接口的應用程序時,利用這些優勢是一項挑戰。如果您正在開發這樣的應用程序,可能需要為不同的客戶端類型使用單獨的UI框架,并重用非可視化代碼。這允許您利用每個平臺,并且仍然共享相當多的代碼。

如何為桌面 & 移動跨平臺應用選擇UI框架/APP架構?

在上圖中,客戶端應用程序使用不同的UI框架實現,而兩個客戶端都使用通用的服務、業務邏輯和服務器端模塊。根據您的偏好,可以將所有服務器邏輯實現為單個服務,也可以創建微服務基礎設施。

在客戶端上,您可以選擇最適合的應用程序平臺:

  • WPF和WinForms(都是非常成熟的平臺)為豐富的桌面用戶體驗提供了各種重要的特性和功能。
  • 輕量級的.NET MAUI將允許您為Android和iOS創建一個以移動用戶體驗為中心的應用程序。

由于WPF、WinForms和MAUI都是基于.NET的,您可以可以很容易地重用客戶端服務、幫助器和模型類。實現更多代碼共享的關鍵是一個松散耦合的體系結構,模塊之間可以相互隔離。MVVM設計模式將幫助您將視圖與視圖模型解耦,并使用依賴注入輕松引入外部依賴。

如果您采用這種策略,項目結構可能如下所示:

如何為桌面 & 移動跨平臺應用選擇UI框架/APP架構?

  • Client.Shared - 客戶端服務,通用助手
  • DataModel -?數據庫對象的模型
  • DesktopClient - WPF/WinForms應用程序
  • MobileClient - .NET MAUI 應用程序

WebApiService -?包含業務邏輯和處理對數據庫訪問的web服務,注意:您可以使用DevExpress免費Web API服務來實現服務器端安全性和基于角色的數據訪問。

DevExpress跨平臺 .NET App UI (XAF) 基于類似的想法,數據處理、安全性、業務邏輯和其他共享模塊被設計為與視圖無關的塊,在引入新的可視化客戶端時,您可以輕松地重用大部分代碼。

總結

為給定平臺選擇最佳UI框架至關重要,因為它決定了開發過程、用戶體驗,并最終決定了項目的成功。統一的跨平臺UI對于簡單的應用程序、最小可行產品(MVPs)或次要設備的卓越用戶體驗不是主要關注的時候,這或許是一個有效的解決方案。

對于更復雜的應用程序,共享UI代碼的可能性可能會受到限制,因為桌面設備和移動設備的用戶流存在顯著差異。通過分離可視化客戶端并利用每個UI平臺的優勢,您可以開發高影響力的應用程序,來高度滿足用戶需求。松耦合體系結構不僅允許廣泛的代碼重用,而且還確保代碼保持干凈、可維護和可測試。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15110.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15110.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15110.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ABB機器人---基礎編程

目錄 第一章 代碼解釋 1.1 基礎代碼 1.1.2 關于 VAR robtarget pos 1.1.3 關于四元數 1.2 機器人初始化程序 1.3 配置通信 (ProfiNet 示例&#xff0c;ABB RAPID) 1.4 設置干涉區 (ABB RAPID) 1.5 示教軌跡和自動過程 (ABB RAPID) 1.6 配置抓手并進行抓取操作 (ABB RA…

springboot錯誤

錯誤總結 1、使用IDEA 的 initialalzer顯示2、IDEA 新建文件 沒有 java class3、java: 錯誤: 不支持發行版本 22解決方法4、IDEA-SpringBoot項目yml配置文件不自動提示解決辦法 1、使用IDEA 的 initialalzer顯示 IDEA創建SpringBoot項目時出現&#xff1a;Initialization fail…

公認最好用的隨身wifi品牌推薦!歐本VS閃魚VS格行隨身wifi哪款更好用?歐本隨身wifi靠譜嗎?

最近小編后臺私信快被問爆了&#xff0c;都想讓測評一下自己相中的隨身wifi到底行不行。該說不說隨身wifi品牌真是越來越多了&#xff0c;今天就挑選咨詢量最多的三款&#xff1a;格行&#xff0c;歐本&#xff0c;閃魚&#xff01;咱們各方面都實測一下&#xff0c;看看哪款更…

基于ucos-ii操作系統的生產者消費者-問題

目 錄 第1章 題目分析. 1 1.1 生產者線程... 1 1.2 消費者線程... 1 1.3 緩沖區... 1 1.4 進程的同步與互斥... 1 第2章 解決方案. 2 2.1 總體方案... 2 2.2 生產者問題... 2 2.3 消費者問題... 3 2.4 進程問題... 5 第3章 實驗結果. 6 3.1 運行結果... 6 3.2 結果分析... 8 第…

提取 Chrome、Firefox 中儲存的用戶密碼用于憑據發現

操作環境 Chrome 瀏覽器 Version 125.0.6422.112 (Official Build) (64-bit)Firefox 瀏覽器 Version 126.0 (64 位) Chrome 瀏覽器儲存密鑰原理 新的 Chrome 瀏覽器儲存密碼的方案是使用 Chrome 生成的 AES 密鑰對用戶密碼進行加密之后儲存在 Sqlite 數據庫文件中&#xff0c;A…

Qt資源系統用法筆記 qrc

目錄 創建和使用.qrc文件的步驟&#xff1a; 步驟1: 創建.qrc文件 步驟2: 編輯.qrc文件 步驟3: 在代碼中使用資源 步驟4: 編譯和運行 優點和注意事項 c調用&#xff1a; Qt資源系統&#xff08;Qt Resource System&#xff09;提供了一種將應用程序所需的文件&#xff0…

Linux 內核之 mmap 內存映射的原理及源碼解析

文章目錄 前言一、簡介1. mmap 是什么&#xff1f;2. Linux 進程虛擬內存空間 二、mmap 內存映射1. mmap 內存映射的實現過程2. mmap 內存映射流程2.1 mmap 系統調用函數2.2 ksys_mmap_pgoff 函數2.3 vm_mmap_pgoff 函數2.4 do_mmap_pgoff 函數2.5 do_mmap 函數2.6 get_unmappe…

私域流量的真諦:構建并運營屬于你自己的私域生態

大家好&#xff0c;我是來自一家專注于私域電商行業的軟件開發公司的產品經理&#xff0c;擁有超過七年的行業經驗。今天&#xff0c;我想和大家聊聊私域流量的真正含義&#xff0c;以及為何我們應該關注并努力打造屬于自己的私域生態。 什么是私域流量&#xff1f; 私域流量&…

HCIA第二天復習上

延長傳輸距離-------中繼器&#xff08;放大器&#xff09;------物理層設備 可以延長5倍傳輸距離 增加網絡節點數量 網絡拓撲結構 1直線型拓撲 信息安全性差 網絡延遲高傳輸速度慢 2環形拓撲 3星型拓撲 4網狀型拓撲 傳輸效率高&#xff0c;…

【字典樹 馬拉車算法】336. 回文對

本文涉及知識點 字典樹 馬拉車算法 336. 回文對 給定一個由唯一字符串構成的 0 索引 數組 words 。 回文對 是一對整數 (i, j) &#xff0c;滿足以下條件&#xff1a; 0 < i, j < words.length&#xff0c;i ! j &#xff0c;并且words[i] words[j]&#xff08;兩個字…

通過注意力調節實現更好的文本到圖像生成對齊

近年來&#xff0c;生成性AI技術在眾多領域取得了前所未有的進步。大規模預訓練模型的出現激發了各種下游任務中的新應用。這在文本到圖像生成領域尤為明顯&#xff0c;例如Stable Diffusion、DALL-E 2和Imagen等模型已經顯著展示了它們的能力。盡管如此&#xff0c;復雜提示中…

appium篇-windows桌面自動化(一)[環境配置]

1、windows版本&#xff1a;win10 2、winSdk版本 Windows SDK and emulator archive | Microsoft Developer 3、winAppDriver版本 1.2.99 Releases microsoft/WinAppDriver (github.com) ################ 4、python版本 Python 3.9.13 ############### 5、appium版本 Re…

hubilder Android模擬器華為手機連接不上

APP真機測試注意點&#xff1a; 1. 同一個局域網下 2. 手機連接USB模式&#xff08;華為選擇USB配置&#xff1a;音頻來源&#xff09; &#xff0c;開發者模式 3. 實在不行重啟HBuilderX再運行真機 可是卡在了“正在安裝手機端HBuilder調試基座...” 就沒反應了&#xff1f;&…

【高時效通路】

一 高時效通路 1.1 pathchdumper 實時數據拉取、實時數據處理、5分鐘微批dump來加速時效性&#xff0c;具體來說&#xff1a; 實時數據拉取&#xff08;Fetcher&#xff09;&#xff1a;基于Databus Fetcher基建&#xff0c;直接對接F0層實時拉取最新數據&#xff0c;保證該…

Springboot整合Minio對象存儲超級詳細講解以及配置搭建

windows環境下搭建minio步驟 1.從minio官網進行查看詳細信息 地址&#xff1a;https://min.io/里面有詳細的配置信息搭建成功之后如下如所示&#xff1a;用戶名密碼默認情況下為 username&#xff1a;minioadmin password&#xff1a;minioadmin2.搭建成功之后的訪問 地址&…

python - 分割 pytest 的 conftest.py 文件

解決 pytest 的 conftest.py 文件過大問題。 1. 項目目錄結構 project_name ├── LICENSE ├── MANIFEST.in ├── Makefile ├── README.md ├── project_name │ ├── __init__.py │ ├── testing │ │ ├── __init__.py │ │ ├── fixtur…

vue項目實戰 - 如果高效的實現防抖和節流

在Vue項目中&#xff0c;處理高頻事件的優化至關重要&#xff0c;直接影響用戶體驗和應用性能。防抖&#xff08;Debounce&#xff09;和節流&#xff08;Throttle&#xff09;是兩種常用且有效的方法&#xff0c;可以控制事件觸發頻率&#xff0c;減少不必要的資源消耗。如何在…

SEO優化,小白程序員如何做SEO優化流量從0到1

原文鏈接&#xff1a;SEO優化&#xff0c;小白程序員如何做SEO優化流量從0到1 1、SEO是什么&#xff1f; SEO即&#xff1a;搜索引擎優化(Search Engine Optimization)&#xff0c;是一種通過優化網站結構、內容和外部鏈接等因素&#xff0c;提高網站在搜索引擎中的自然排名&…

python愛心樹表白代碼

以下是一個使用Python的turtle模塊來繪制一顆愛心并表白的簡單示例代碼&#xff1a; import turtle import math # 設置屏幕 screen turtle.Screen() screen.bgcolor("black") # 繪制愛心 def draw_heart(t, size): t.speed(9) t.penup() t.goto(0, -size…

Python Minio 工具類封裝

最近因為需要對大規模的文件進行存儲&#xff0c;選了多種對象存儲方案&#xff0c;最終選擇了MinIO&#xff0c;為了方便python的調用&#xff0c;在minio第三方包的基礎上進行進一步封裝調用&#xff0c;該工具除了基礎的功能外&#xff0c;還封裝了多線程分片下載文件和上傳…