標籤: 程序開發

Xamarin 跨平台程式開發-訊息傳遞 – 軟體開發 教學

   在 Xamarin 開發 IOS、Android、UWP APP時,常常會遇到訊息接受與訊息傳遞,那麼這邊我想簡單示範如何在 Xamarin 實作一個訂閱訊息程式開發技巧。

Android 執行結果畫面

螢幕快照 2018-07-25 下午10.27.43螢幕快照 2018-07-25 下午10.28.49螢幕快照 2018-07-25 下午10.29.10

   Xamarin 透過 MessagingCenter 這個靜態類別來支援訂閱/通知訊息,這個類別主要需要知道三個 Methods ,分別為 Subscribe<TSender, TArgs> 與 Send<TSender, TArgs>、Unsubscribe<TSender, TArgs>。

Subscribe<TSender, TArgs> 方法用來訂閱訊息,當有訊息接受到時,可以通知使用者,例如出現對話訊息、畫面顯示訊息。

Send<TSender, TArgs> 方法用來通知訊息,已告知那些訂閱訊息者。

Unsubscribe<TSender, TArgs> 原先進行訂閱訊息接受,現在進行取消訂閱,後續如果有訊息通知,都不進行接受訊息。

程式範例示範

image

public class MainPageViewModel
     {
         public ObservableCollection<string> Greetings { get; set; }


        public MainPageViewModel ()
         {
             Greetings = new ObservableCollection<string> ();


           MessagingCenter.Subscribe<MainPage> (this, “哈嘍", (sender) => {
                 Greetings.Add(“哈嘍");
             });


            MessagingCenter.Subscribe<MainPage, string> (this, “哈嘍", (sender, arg) => {
                 Greetings.Add(“哈嘍 " + arg);
             });

         }
     }

在上面程式範例 宣告 一個 MainPageViewModel Class,這個作為 ViewModel 用途,在建構式裡實作訂閱服務,這個機制可以減少程式物件耦合度。

下面這行程式碼,主要是用於實作一個名叫 “哈嘍”的訂閱服務  MessagingCenter.Subscribe<MainPage> (this, “哈嘍", (sender) => {  Greetings.Add(“哈嘍"); });


在底下的主程式 MainPage ,實作訂閱通知服務,主要程式邏輯,我透過註解程式說明

public partial class MainPage : ContentPage
     {
         public MainPage()
         {
             InitializeComponent();


            //這邊我綁定一個ViewModel
             BindingContext = new MainPageViewModel();


            //宣告一個按鈕物件,當點選按鈕時,觸發一個發送訊息
             var button1 = new Button { Text = “Say 哈嘍" };
             button1.Clicked += (sender, e) =>
             {
                 MessagingCenter.Send<MainPage>(this, “哈嘍");
             };


            //宣告一個按鈕物件,當點選按鈕時,觸發一個發送訊息,並傳遞內容參數,傳遞的內容是 Allen
             var button2 = new Button { Text = “Say Hi to Allen" };
             button2.Clicked += (sender, e) =>
             {
                 MessagingCenter.Send<MainPage, string>(this, “哈嘍", “Allen");
             };


            //宣告一個按鈕物件,當點選按鈕時,觸發一個取消訂閱服務,並取消對話視窗訊息!
             var button3 = new Button { Text = “取消訂閱服務,並取消對話視窗訊息!" };
             button3.Clicked += (sender, e) =>
             {
                 MessagingCenter.Unsubscribe<MainPage, string>(this, “哈嘍");
                 DisplayAlert(“取消訂閱服務",
                     “This page has stopped listening, so no more alerts; however the ViewModel is still receiving messages.",
                     “OK");
             };


            //訂閱服務(背後的ViewModel還是仍然保持本身實作的訂閱服務),並出現對話視窗訊息
             MessagingCenter.Subscribe<MainPage, string>(this, “哈嘍", (sender, arg) =>
             {
                 DisplayAlert(“訊息已接受", “參數訊息 為 " + arg, “OK");
             });


            //綁定接受到的訂閱訊息
             var listView = new ListView();
             listView.SetBinding(ListView.ItemsSourceProperty, “Greetings");


            //放置物件內容
             Content = new StackLayout
             {
                 Padding = new Thickness(0, 20, 0, 0),
                 Children = { button1, button2, button3, listView }
             };
         }


在 iPhone X 執行畫面如下

螢幕快照 2018-07-25 下午10.20.29螢幕快照 2018-07-25 下午10.20.46

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen
my_qrcode_1519621481105

在.Net 透過 Parallel 類別操控多任務平行作業(一)【軟體開發、軟體設計、系統開發】

   此篇文章主要是延續之前的文章 【C#多工作業與平行處理技術講解】,講解與實作如何在利用強大的 透過 Parallel 類別支援的方法,撰寫非同步任務,這裡一樣我會透過簡單程式碼進行實作教學。


   在並行任務與建立一個新的執行緒過程來執行一個非同步作業的操作是非常相似地,但是在這邊的並行任務卻是可以更好地發揮多個CPU處理器或者多核心處理器的強大優勢,進而充分地利用CPU的可用資源來執行非同步作業任務,更方便地是,在 .Net 並行任務的操作過程被封裝地很好,身為程式開發人員只需要調用呼叫對應的類別與相關成員方法就可以很輕鬆地建立與執行並行任務了,至於任務是在那個CPU處理器執行,操作系統的底層會自動進行調用配置。


    在這邊我使用一個 WPF 的專案範例進行講解,來說明如何利用 .Net 的 Parallel 類別執行非同步作業。


步驟一 :

在 Visual Studio 2017 建立一個 WPF 專案,

wpf


步驟二:

在 主要的 MainWindow.xaml 畫面,用xaml 語法宣告了一下界面結果


2017-07-08_17-12-48


主要是有 提供 3 個讓使用者輸入整數值的 TextBox , 以及對應 3 個顯示執行結果的 TextBlock ,還有一個 Button (執行 Parallel 運算平行任務)的按鈕。


部分xaml 語法如下:

xaml

步驟三:

在 Button 的 Clieck 事件,進行撰寫主要的核心程式碼邏輯….

(Code)

private void OnClick(object sender, RoutedEventArgs e)
{
     int num1 = default(int);
     if (!int.TryParse(txtInput1.Text, out num1))
     {
         MessageBox.Show(“輸入第一個正整數值:");
         return;
     }
     int num2 = default(int);
     if (!int.TryParse(txtInput2.Text, out num2))
     {
         MessageBox.Show(“輸入第二個正整數值:");
         return;
     }
     int num3 = default(int);
     if (!int.TryParse(txtInput3.Text, out num3))
     {
         MessageBox.Show(“輸入第三個正整數值:");
         return;
     }


    //宣告第一個並行作業的委派實體
     Action act1 = () =>
         {
             int sum = 0;
             for (int x = 1; x <= num1; x++)
             {
                 sum += x;
             }


            //顯示執行結果
             this.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => run1.Text = sum.ToString()));
         };


    //宣告第二個並行作業的委派實體
     Action act2 = () =>
     {
         int sum = 0;
         for (int x = 1; x <= num2; x++)
         {
             sum += x;
         }


        //顯示執行結果
         this.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => run2.Text = sum.ToString()));
     };


    //宣告第三個並行作業的委派實體
     Action act3 = () =>
     {
         int sum = 0;
         for (int x = 1; x <= num3; x++)
         {
             sum += x;
         }


        //顯示執行結果
         this.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => run3.Text = sum.ToString()));
     };



    //使用 Parallel 類別來執行 並行任務
     Parallel.Invoke(act1, act2, act3);


}


程式碼重點講解:

1.這邊我主要用了 3 個 Action 的委派實體,分別用來進行整數的累加運算任務。

2.使用了 Dispatcher.BeginInvoke() 方法,和Windows Form 專案一樣,WPF 在平行作業模式下,也分為主UI的主執行緒,和多個任務的各別執行緒,而在任務的執行緒要改變主執行緒控管的主畫面下,必須透過 Dispatcher.BeginInvoke ,在不會發生一個 UnauthorizedAccessException 例外錯誤。

3.也是最重要的程式碼邏輯,利用 Parallel類別的 Invoke 方法呼叫,分別傳入多個委派實體,在這邊我宣告了3個 Action 委派實體,我一次傳入 Parallel.Invoke(act1,act2,act3), 這樣程式就自動進行3個平行作業任務了。


參考文章
C#多工作業與平行處理技術講解
1.透過 Thread 類別撰寫多執行緒多工作業。
2.透過 Delegate 委託支援的方法,撰寫非同步任務。
3-1.透過 Parallel 類別操控多任務平行作業(一)。
3-2. 透過 Parallel 類別操控多任務平行作業(二)。
4.使用 Task 自行控制非同步任務作業。
5.在非同步作業時,如何取消非同步任務。
6.多執行緒多任務存取相同變數,但卻各自隔離保留各自任務的值。
7.非同步存取變數的問題。
8.非同步資源鎖定解決方式。



網智數位-軟體開發(軟件開發)

針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

透過 Delegate 委託支援的方法,撰寫非同步任務(軟體開發、客製化軟體、系統設計)

      此篇文章主要是延續之前的文章 【C#多工作業與平行處理技術講解】,講解與實作如何在利用強大的 透過 Delegate 委託支援的方法,撰寫非同步任務,這裡一樣我會透過簡單程式碼進行實作教學。

       在.Net 平台的委派類型(Delegate)自身就可以很容易地使用非同步作業,因為只要是委派(Delegate)類型都一點有 BeginInvoke 以及對應的 EndInvoke() 這 2 個非同步操作方法,所以我們就可以非常容易地透過 委派實體 直接 使用非同步任務。

      在這邊我一樣使用 Windows Form 來做示範(因為比較單純可以講解程式技巧,所以不要問我為何不用 ASP.NET MVC),整個實作範例畫面為如下圖:


繪圖


步驟1 :

在 Visual Studio 新增一個 Windows Form 專案,我們準備拖拉幾個控制箱來達成 主要結果畫面,分別有

Label 控制箱 (Text = 基數)、Button 按鈕控制箱(Text = 進行計算作業 , Name = btnDelegateInvoke)、ProgressBar控制箱(用於顯示非同步作業的進度)、TextBox 文字方塊(Name = txtResult , 用於顯示執行計算結果)。

步驟 2:

在 Button 控制箱 (name = btnDelegateInvoke)的 Click 事件,撰寫主要核心代碼:

private void btnDelegateInvoke_Click(object sender, EventArgs e)
{
     int baseNum = default(int);
     if (!int.TryParse(txtBaseNum.Text, out baseNum))
     {
         MessageBox.Show(“請輸入一個正整數哦!");
         return;
     }


    txtResult.Clear();


    // 顯示進度表的狀態
     IProgress<int> progressReporter = new Progress<int>((p) =>
     {
         this.progressBar1.Value = p;
     });


    //  計算階乘的委派實體
     Func<int, BigInteger> ComputeNumValueAction = (bsNum) =>
         {
             BigInteger bi = new BigInteger(1);
             for (int i = 1; i <= bsNum; i++)
             {
                 bi *= i; //相乘
                 // 用於計算目前進度
                 double ps = Convert.ToDouble(i) / Convert.ToDouble(bsNum) * 100d;
                 progressReporter.Report(Convert.ToInt32(ps));
             }
             return bi;
         };


    // 開始呼叫使用
     btnDelegateInvoke.Enabled = false;
     ComputeNumValueAction.BeginInvoke(baseNum, new AsyncCallback(FinishedCallback), ComputeNumValueAction);


}


2017-07-06_01-01-56


程式碼邏輯講解:

1.在 Progress<T> 是實現 IProgress<T> 介面,所以這裡可以透過它支援的 Report()方法來報告目前非同步的操作進度數據,該對象在進度更新後,是允許使用者直接繼續操作主畫面的,例如拖拉。


2.Func<int,BigInteger> 委派,代表自身帶有一個 int 類型的參數,而返回的值類型為 BigInteger,這邊我特別用 BigInteger 類型,因為在計算階乘的計算結果,可能數字會非常大,會超出 long 類型的最大值。


3.在開始進行使用 委派(Delegate)支援的BeginInvoke方法時,必須再使用一個 AsyncCallback 委派,該委派主要是用於綁定一個方法,在檔非同步任務完成時,可以呼叫的回調方法,並且再回調方法中,再次調用 Delegate.EndInvoke方法來捕捉計算結果。


我們直接看 AsyncCallback 綁定的 FinishedCallback 方法。


private void FinishedCallback(IAsyncResult ar)
{
     // 取出委派變數
     Func<int, BigInteger> action = (Func<int, BigInteger>)ar.AsyncState;
     // 求得計算結果
     BigInteger res = action.EndInvoke(ar);
     this.BeginInvoke(new Action(() =>
     {
         btnDelegateInvoke.Enabled = true;
         // 顯示計算結果
         txtResult.Text = string.Format(“計算結果:{0}", res);
     }));
}


ddd



上述程式碼撰寫完畢後,就可以編譯執行,在 基數欄位輸入一個正整數,就可以進行非同步的計算階乘作業。





參考文章

C#多工作業與平行處理技術講解

1.透過 Thread 類別撰寫多執行緒多工作業。

2.透過 Delegate 委託支援的方法,撰寫非同步任務。

3.透過 Parallel 類別操控多任務平行作業。

4.使用 Task 自行控制非同步任務作業。

5.在非同步作業時,如何取消非同步任務。

6.多執行緒多任務存取相同變數,但卻各自隔離保留各自任務的值。

7.非同步存取變數的問題。

8.非同步資源鎖定解決方式。





網智數位-軟體開發(軟件開發)

針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna

黃先生 Allen

     

文具行業-ERP管理軟體導入(軟體開發、軟件開發、客製化軟體)

    感謝位於越南台商-台灣豐禾文具製品有限公司,選擇委託網智數位-軟體開發團隊,量身客製化開發軟體,該客戶是在越南已經有多年的耕耘,在文具加工與製程有非常好的品質與競爭力,但因為在針對下游客戶的訂單處理、報價評估、成本分析、都是人工Excel計算,以及庫存都是手寫記錄,因此與我們聯繫溝通想導入一個好的管理軟體。

LINE_ALBUM_AI產生圖_240212_738

  

而因為在成本的零件、材料的多樣性變化,在一般的套裝軟體的BOM表無法真的滿足,報價選擇零件的成本、利潤估算,因此必須針對該客戶的具體物料變化、用量、損耗進行客製化公式設計、軟體開發,來加速公司的報價利潤控管與查詢統計,以及後續的採購流程、庫存管理,所以評估多家軟體公司後,正式選擇網智數位,進行輔導與軟體開發。

網智數位-在企業的客制化軟體開發,有相當豐富的經驗,也在企業的流程知識、資料流、系統整合,ERP、MRP、CRM、庫存管理管理軟體導入都有產業經驗,目前已經橫跨地板業、窗簾業、成衣業、工業馬達、化妝品業、玩具貿易業、物流業…

(其他參考文章)
MPS主生產計畫專文介紹(一)
MRPⅡ/ERP 能力需求計畫原理
庫存管理-概念與釐清
庫存管理探討-VMI
真正的庫存量形成探討
庫存管理的中樞控管法則(上)
庫存管理的中樞控管法則(下)
BOM表管理與設定﹣輔料是否需輸入BOM
何謂 進銷存、ERP、WMS?三者差異性【軟體開發、軟件開發、程式設計】
ERP 產品成本管理與計算
庫存量正確性衡量法則
粗能力需求計畫(RCCP) – 專文介紹
ERP 系統的淺談與優勢
庫存目標6大範疇

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

勒索軟件大規模攻擊微軟的Windows系統

在5月13日的可靠消息,根據各大國內外媒體報導,大規模的勒索軟體攻擊已破壞英格蘭醫院的運作,也感染全球數十個國家的電腦。

wKiom1kWr9zChehWAABHDOkvIiA50.jpeg-wh_651x-s_2026428311_thumb[8]

而微軟今天表示,它的工程師已針對該攻擊加強了檢測和保護。

微軟發言人在聲明中稱,“今天,我們的工程師已針對名為Ransom:Win32.WannaCrypt的新惡意軟件加強了檢測和保護。”它說,公司正與客戶合作提供額外的幫助。
勒索軟件是一種能夠持續阻止計算機正常運作的軟件,除非受害者交出勒索贖金。新的WanaCrypt0r 2.0勒索軟件尤其致命,因為它利用了竊取自美國國家安全局(NSA)的黑客工具。
3月,微軟成功補上了讓該名為EternalBlue的NSA工具能夠運作的安全漏洞。
今天,針對WanaCrypt0r勒索軟件,Windows更新了兩款安全工具——Windows Defender antivirus和Windows Security Essentials。
卡巴斯基實驗室今天發現,全球74個國家共計發生數万起WanaCryt0r攻擊。該攻擊導致英國的醫院系統拒絕病患看病,西班牙電信公司出現大面積的停工,俄羅斯內務部有1000台計算機被感染。

該勒索軟件所使用的EternalBlue工具是一個名為ShadowBrokers的組織所流出的NSA黑客工具,該組織自夏季以來一直在放出這種工具。 EternalBlue於4月放出,就在微軟剛剛填補了安全漏洞之後。

ShadowBrokers一開始曾嘗試拍賣那些工具,隨意流出了至今仍很危險的工具來證明自己擁有其所聲稱的工具。由於不滿報價和其它的貨幣化機制,該組織於1月打消了拍賣計劃。
4月,ShadowBrokers放出一攬子新的工具,稱該舉是為了抗議美國總統特朗普做出中立派決策而非極右翼決策。
專家們認為,及時更新電腦軟件系統對於避免遭受黑客和惡意軟件的攻擊至關重要

目前具體做法與媒體報導,可以參考以下介紹
XP也有救!WannaCry 2.0勒索軟體肆虐,微軟破例再釋Windows XP修補
WannaCry 2.0勒索蠕蟲狠襲全球,上百個國家受駭,台灣也是重災區
勒索病毒爆發 安全專家預警周一上班要小心
中職/系統當機頭一回 尚不確定為勒索病毒
病毒軟體勒索恩主公醫院 病患個資無虞

 

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

徴 .Net 程式設計師數名(軟體開發、客製化軟體、軟體設計)

因業務的增量,網智數位目前有多個自身產品在研發、也有大型銀行專案在進行,尋求數名資深的系統分析師(尤其對行業ERP 或 銀行資產管理、處分資產財務等經驗)、程式設計師。

IT帥哥美女 (7)

1.鄙公司陸續手上有多個進行中的專案,需要找可長期合作的提案人,執行程式設計的設計與開發。
2.包含各種領域產業的公司,有製造業、電信業、半導體業,主要開發管理系統,財會系統,或是各項作業流程系統等。
3.提案人需有各領域作業的知識,有相關產業經驗佳,才能開發出符合產業需求的系統
4.開發工具不拘,以.NET C#為佳,資料庫包括MS-SQL,MY-SL,Oracle等皆可,部分系統可能需要建置類似ERP的規模
5.因案件很多,各案件規格需要與發案方討論,並個別報價
6.需有獨立完成一個 WEB(ASP.NET MVC)或 Windows Desktop APP(Windows Form or WPF) 專案經驗過。

PS.如果你是厲害的SOHO族想要長期配合專案,我們也非常歡迎,目前今年快速發展,在商業軟體與工業應用軟體,在空調大廠、機電大廠、馬達承軸器 產業目前領導廠商都是我們的客戶哦,因為客戶的信賴,給我們團隊不斷的前進…

網智數位科技公司在IT領域已有10年多經驗,在團隊合作下陸續完成許許多多的軟體開發承包、網路架設委外案、系統維護案,也正式跟大型軟體公司、玩具製造業、飾品製造業、知名衛浴公司、窗簾材料業、空調冷氣設備大廠、貿易公司、前進國際、大型上市成衣製造業、連鎖動物醫院、網拍零售業等正式長期合作,開發一系列的不同產業的進銷存系統、圖控軟體、監控軟體、紅外線檢測趨勢圖像報告、獎金計算系統、物流配送、客戶關係(CRM)管理系統、請假出缺勤管理系統、企業資源管理(ERP)系統、電子商務(EC)等,接下來我們將更積極努力的完成客戶的要求與完善的服務,希望如果您有軟體委外、客製,IT建置的需求、網路行銷等,我們將有一套完整的服務模式。

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

感謝鈺鋒集團委託我們開發-維修知識管理系統(軟體開發、軟件開發、客製化軟體)

      在多次討論需求會議中,鈺鋒集團梁總經理評估我們的專業能力與需求分析經驗,委託網智數位協助幫集團所有子公司開發一系列的維修知識管理系統,該集團成立20幾年,鈺鋒集團為提供各類優質泵浦及技術服務的泵浦代理商,為化工行業Goulds Pump,醫藥行業Viking Pump(Gear Pump)、Pulsafeeder Pump,廢水處理行業Flygt Pump,礦業IMO Warren Pump等行業,依選型、使用、維護、保養等各方面提供最佳的建議和服務。

 

mgcKAC_component

 

      鈺鋒集團,因為擁有眾多的客戶群,在各種維修設備上面,必須依靠大量的資深師傅經驗、而這樣在經驗的傳承以及知識的傳遞過程,都無法有效的複製經驗,這樣集團在擴廠中遇到人才不容易養成,而且因為客戶的產品維修複雜性、在資料的尋找、文件的歸納都是透過大量的人力,而在報價、成本計算、合約文件管理都是透過大量的紙上文件、Word、PDF、Excel文件來管理,但在管理效益上往往無法在歷史資料比較、歷史資料查詢、價格計算、文案合約管理,因此評估多家軟體公司後,委託我們網智數位進行從無到有開發公司的維修、知識管理系統。

 

 

 

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

網智數位與群環科技正式合作成為 微軟 Azure 雲端解決方案經銷商

        今年網智數位與群環科技正式簽約合作,網智數位也將正式成為雲端平台 Azure 經銷商與解決方案提供者,未來網智數位的客戶,可以透過我們採取微軟的雲端平台,而我們將可以提供良好的技術服務、更好的軟體開發品質,讓軟體使用更加便利性、跨越裝置、區域性地限制性。

 

下載

 

 

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

跨平台解決方案優缺點細說(軟體開發、軟件開發、客製化軟體)

       在現在智慧型裝置、平板裝置大量普偏化,從企業到個人甚至在企業內部團隊開發者的支持與合作之  下不斷推出大量新型移動應用。面對如此龐大的應用生態圈,認真規劃並調整戰略性技術決策無疑有助於確保應用的成功發布並獲得良好的市場反響。而在實際構建相關平台之前用戶界面(簡稱UI)、用戶體驗(簡稱UX)以及必要功能自然是首先需要明確的要素。而後,則應考慮如何採取適當舉措以推動開發流程。

       IC764638

       事實上,單純是原生抑或跨平台這一決策已經能夠帶來諸多後續影響。應用開發所選擇的首要平台及編程語言在產品對用戶的直觀性以及受眾類型方面發揮著巨大作用。例如,您的應用是否只能在Android或者iOS中的一類設備上使用?原生抑或跨平台這一決策最終取決於您的實際業務目標,且其各自都有著自己的優勢與缺點。

原生應用
原生應用採用面向特定平台的編程語言構建。在Android方面,其為Java; 在Windows上則為C#、VB .NET或者C/C++; iOS平台則為Objective-C或Swift。這些應用需要從零開始進行構建,且僅能夠在指定平台上運行。

優勢
用戶界面 (UI) – 應用的外觀以及整體使用方式能夠決定其最終成功與否。由於原生應用能夠與其創建平台無縫對接,因此用戶能夠使用其更為熟悉的界面。這有助於帶來更為積極的用戶體驗,並鼓勵用戶長期使用。
性能(UX) – 原生應用開發中往往涉及大量媒體(例如圖像、視頻或動畫)資源,因此需要進行大量交互與數據處理操作。在這方面,原生應用表現更好,因為其原生代碼能夠直接調用操作系統的獨特硬件與軟件功能,且幾乎不存在任何滯後現象。另外,使用本機代碼開發複雜應用能夠最大程度降低應用卡頓或者崩潰風險。
更佳排位–原生應用通常在用戶中口碑更佳,且能夠在應用商店中得到大力推薦。另外,原生應用也能夠憑藉著出色的性能與用戶友好型界面得到受眾的高度認同。
平台集成–原生應用往往能夠在指定平台上順暢運行,這意味著其功能可以根據用戶偏好進行自定義,並讓用戶擁有將其作為自身移動設備之上固有組成部分的感覺。

缺點
耗時– 面向多種平台開發原生應用往往更為耗時,因為同樣的代碼無法直接運行在其它平台之上,這意味著開發者需要耗費額外時間進行代碼轉換甚至重寫。
對開發技能要求更高–欲面向多種平台開發原生應用,企業需要擁有更多技能水平更高的開發者。取決於您所選定的平台類型,跨平台原生應用開發至少需要兩名開發者——其一負責進行Android版本開發,其二負責iOS版本開發。
高成本 – 開發者數量的增加意味著開發成本也將快速提升。再加上更為漫長的項目開發流程,企業可能需要將整體預算翻倍甚至再次翻倍。

跨平台
跨平台應用所使用的代碼可根據具體操作系統進行定制,而後再行發布。這種多合一式解決方案能夠讓單一應用運行在多種平台之上,因此受到廣大關注時間與成本的企業與開發者的熱烈歡迎。

優勢
節約時間–與原生應用不同,跨平台應用開發可採用單一代碼庫面向多種系統平台,從而幫助企業節約由代碼重寫及平台定制所帶來的時間消耗。
成本低廉–企業能夠有效削減開發項目的人員數量與成本水平。這種“一次編寫,隨處運行”的代碼能夠顯著提升開發效率並加快部署速度。
利潤最大化–除了節約成本外,跨平台應用還能夠同時在多種平台及用戶市場上取得影響力,最終實現利潤最大化。
螝於啟動及更新–企業可以首先啟動應用,並隨後根據需要面向多套平台同步推出更新。

缺點
性能延遲 – 跨平台應用往往無法像原生應用那樣與運行平台無縫對接。因此,此類應用通常會因代碼不能同設備硬件或軟件功能順暢協作而引發卡頓或者延遲。
以特性換通用 – 由於共享同一套代碼庫,因此跨平台應用無法完美與當前平台相集成,這意味著用戶往往不能充分利用平台內的某些功能,例如預設手勢、攝像頭甚至麥克風。

 

PhoneGap
PhoneGap,亦被稱為Apache Cordova,是一款高人氣開源平台,可用於創建跨平台/混合應用。其採用JS、HTML 5以及CSS 3編程語言。

優勢
編程語言熟知度高 – 由於PhoneGap採用JS、HTML 5與CSS 3等高人氣語言,因此開發者能夠輕鬆上手並開始使用。這不僅能夠減少相關培訓需求,同時也使得企業能夠更快向市場推出應用開發成果。
易在應用商店中被發現 – PhoneGap應用的安裝方式與原生應用類似,因此能夠在應用商店中獲得理想的曝光度。
插件架構– PhoneGap採用一套靈活的插件架構,能夠以模塊化方式擴展原生設備API。
無許可成本– PhoneGap是一套開源項目且可免費使用,因此企業無需承擔任何許可成本。
提供大量庫–開發者能夠輕鬆訪問並尋求各類資源庫的幫助,從而增強自有應用功能。

缺點
性能 – PhoneGap應用的性能表現常常受到批評。一旦應用架構中存在大量圖形或者復雜元素,則可能導致應用無響應甚至崩潰。
插件 – 在多數情況下,開發者必須使用特定插件以避免對其原生指定屬性產生干擾。 PhoneGap擁有一套靈活的插件友好型架構,開發者能夠根據需要選擇必要插件或者自行開發插件。然而,如果開發者無法找到適用的插件或者無法輕鬆編寫自有插件,則開發過程將遭遇嚴重延後。
缺少說明文檔– PhoneGap的用戶指南含糊不清且與用戶界面有關的指導性文件缺少部分關鍵性信息。另外,其中尚不提供可用於強化跨平台應用開發的最佳實踐信息。
內存丟失 – 由於PhoneGap缺少緩存/內存管理功能,因此經常出現內存丟失問題。

Titanium
Appcelerator Titanium是一套可用於開發桌面、原生移動以及跨平台應用的開源開發平台。目前市面上已經有超過3萬5千款利用JS、HTML 5、jQuery以及CSS 3等語言在Titanium中開發完成。

優勢
編程語言熟知度高 – Titanium採用JS、HTML 5與CSS 3等高人氣語言,因此開發者能夠輕鬆上手並開始使用。
可訪問各先進功能 – Titanium擁有獨立的API以訪問設備上的各項功能,包括攝像頭、麥克風、觸控屏幕以及GPS。這意味著用戶能夠將Titanium應用作為其設備中的固有組成部分並獲得良好的使用體驗。
即時反饋 – Titanium能夠縮短應用開發時間,允許開發者以更少代碼進行應用構建。這意味著開發者能夠快速構建應用原型設計,並根據即時反饋評估用戶與UI間的交互方式與效果。
龐大的技術社區 – Titanium/Appcelerator社區擁有超過20萬名開發者,並開放對其Open Mobile Marketplace的訪問。開發者能夠在這裡購買、出售及共享各類模塊、模板、設計元素以及面向Web服務的擴展。

缺點
複雜性更高– 應用複雜性的提升亦會引發成本增長。開發者在遭遇大量崩潰及bug等問題時往往需要投入更多時間與精力加以調試,這在無形中拉高了代碼組織與多平台支持維護的成本。
靈活性有限 – 儘管Titanium的API對代碼行數要求更低,因此能夠幫助開發者節約時間,但這種限制亦會導致應用複雜性上升的問題。另外,其還有可能引發應用中的延遲及其它持續性問題。
功能不穩定 – Appcelerator提供StoreKit模塊,旨在實現指向蘋果App Store的應用內購機制。然而這一功能非常不穩定,且有時無法正常起效。該模塊的部分功能極大影響了Titanium的免費增值定價策略。事實上,這款免費下載的軟件運行狀態極差,且根本無法實現有效的內購效果。而這種不穩定性甚至導致部分用戶徹底放棄相關應用。
工具包故障 – 可能很多開發者都有同感,即自從Titanium Studio(一套基於Eclipse的IDE)出現後,Titanium的學習成本開始大幅增加。 Titanium Studio存在諸多問題,最嚴重的就是會在構建過程中忽略部分變更。這迫使開發者必須在每次更改後進行項目清理,或者使用新項目進行完全重新啟動。

Xamarin
自2011年發布以來,這款知名框架就被廣泛應用於跨平台應用開發。通過API,Xamarin應用能夠以原生方式同iOS、Android以及Windows等設備上的攝像頭、GPS等功能進行通信。

優勢
一套代碼玩轉全部平台 – Xamarin採用C#與.NET框架相結合的方式,確保應用能夠在多平台上正常運行。這意味著開發者能夠復用大部分源代碼以加快開發流程。 Xamarin還能夠與Visual Studio及Xamarin IDE協作,開發者無需在不同開發環境間往來切換。
模擬原生 – 由Xamarin開發而成的跨平台應用在理論上可以被劃歸原生應用,因為其性能指標高度類似於針對單一平台的原生應用。另外,Xamarin應用亦可在應用商店中享受到原生應用的待遇。
原生UX – Xamarin允許用戶面向各平台定制其UI。通過使用Xamarin.Forms工具,開發者能夠構建跨平台應用並為其配備有針對性的UI組件。為了實現更理想的性能表現,開發者還可以使用Xamarin.iOS或Xamarin.Android工具開發具備原生使用體驗的高速、可靠跨平台應用。
功能 – 利用Xamarin,所有硬件兼容性問題都將不復存在。 Xamarin允許開發者訪問多種平台指定型API,並能夠接入原生庫以無縫實現多設備平台跨越,且舉帶來任何功能或者性能問題。
無需昂貴的許可成本 – 在微軟於2016年年中收購Xamarin之前,Xamarin的許可費用高達每開發者、每平台1000美元。這意味極小的開發者團隊即會給企業帶來高昂的許可成本。然而自收購之後,微軟開始免費將Xamarin提供給Visual Studio用戶,且目前亦在將其打造為真正的開源平台。

缺點
社區規模較小 – Xamarin在過去幾年中的發展速度比較穩​​定,且大多數追隨者來自微軟。由於社區規模較小,因此尋找有經驗的Xamarin開發者可能並不輕鬆。
需要更為廣泛的技能儲備 – Xamarin廣泛使用.NET開源資源及其它開源技術,因此希望使用Xamarin的朋友需要熟練掌握.NET,同時具備JS或者Objective-C等其它特定平台的專業知識。
應用體積 – Xamarin需要大量操作性軟件以實現.NET框架與平台特定操作系統間的代碼與引用鏈接,這意味著其應用的體積相對更大。

原文标题:Native vs Cross-Platform App Development: Pros and Cons of PhoneGap, Titanium, and Xamarin
原文作者:Prem Khatri、51CTO

 

 

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

 

進銷存-進口買賣業解決方案 (軟體開發、客製化軟體、程式開發、程式設計)

     去年被一家經營國際貿易美妝護膚用品的客戶委託開發符合該客戶營運流程與產品特性的進銷存管理系統委託案,該客戶事實上很久以前就找過網智數位進行量身定做的軟體開發要求,但因為當時我們與一家國外知名玩具的代工廠合作一系列的工廠自動化、MRP/ERP軟體開發案,因為時程問題覺得無法在時間點協助客戶完成軟體客製化需求,所以遲遲沒有承接,而經過1~2年該客戶還是找上我們,因為這期間客戶找了好多家市面上的套裝進銷存軟體、庫存管理軟體,但就是都無法滿足客戶在處理進出口成本計算、庫存銷量的分析角度來輔助跟國外進口物品的參考統計數字,所以又再次與我們細談,覺得我們量身定做可以滿足客戶的需求,合作案就正式開始了…

 

進貨單-部分功能畫面

image

進貨多筆新增-便利操作

image

週期性庫存銷售量分析

image

 

    今天,我帶工程師正式將開發完畢的軟體上線,到客戶端進行教育訓練,看到一個好的軟體可以真的讓客戶滿足、協助客戶的管理、分析、流程整合, 也可以進行各種成本、不同角度的成本查看、不同週期的銷售量分析、業務負責區域業績查看,這也是軟體所帶來的一種無形的價值,我與客戶也深信我們的用心開發,未來客戶的軟體需求只會不斷的加強、藉由軟體的管理輔助,客戶提高管理績效、我們也有軟體開發的成就感,這就是打造雙贏的合作案。

    網智數位-軟體開發團隊成員幾乎以前都是在知名軟體公司、上市公司服務超過10年以上的經驗,在商用軟體、工業軟體、系統整合都有非常好的經驗,也是知名航空公司的教育訓練委託合作案、電腦大廠清華同方的軟體開發解決方案合作廠商等等。

 

 

 

網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen